From 89f39d14f24648bb3737d83619e199e965825db1 Mon Sep 17 00:00:00 2001 From: Johannes Mueller Date: Sat, 18 May 2019 13:23:26 +0200 Subject: Add some options for surfaces to jump in the timeline * ::jump_by_beats() * request transport to keep rolling after jump --- libs/surfaces/control_protocol/basic_ui.cc | 19 +++++++++++++++---- .../control_protocol/control_protocol/basic_ui.h | 5 +++-- 2 files changed, 18 insertions(+), 6 deletions(-) (limited to 'libs') diff --git a/libs/surfaces/control_protocol/basic_ui.cc b/libs/surfaces/control_protocol/basic_ui.cc index 3ffe334be4..d03b721394 100644 --- a/libs/surfaces/control_protocol/basic_ui.cc +++ b/libs/surfaces/control_protocol/basic_ui.cc @@ -388,7 +388,7 @@ BasicUI::locate (samplepos_t where, bool roll_after_locate) } void -BasicUI::jump_by_seconds (double secs) +BasicUI::jump_by_seconds (double secs, bool with_roll) { samplepos_t current = session->transport_sample(); double s = (double) current / (double) session->nominal_sample_rate(); @@ -399,11 +399,11 @@ BasicUI::jump_by_seconds (double secs) } s = s * session->nominal_sample_rate(); - session->request_locate ( floor(s) ); + session->request_locate (floor(s), with_roll); } void -BasicUI::jump_by_bars (double bars) +BasicUI::jump_by_bars (double bars, bool with_roll) { TempoMap& tmap (session->tempo_map()); Timecode::BBT_Time bbt (tmap.bbt_at_sample (session->transport_sample())); @@ -417,7 +417,18 @@ BasicUI::jump_by_bars (double bars) any.type = AnyTime::BBT; any.bbt.bars = bars; - session->request_locate ( session->convert_to_samples (any) ); + session->request_locate (session->convert_to_samples (any), with_roll); +} + +void +BasicUI::jump_by_beats (double beats, bool with_roll) +{ + TempoMap& tmap (session->tempo_map ()); + double qn_goal = tmap.quarter_note_at_sample (session->transport_sample ()) + beats; + if (qn_goal < 0.0) { + qn_goal = 0.0; + } + session->request_locate (tmap.sample_at_quarter_note (qn_goal), with_roll); } void diff --git a/libs/surfaces/control_protocol/control_protocol/basic_ui.h b/libs/surfaces/control_protocol/control_protocol/basic_ui.h index 788dcbd43b..60ed6d86ee 100644 --- a/libs/surfaces/control_protocol/control_protocol/basic_ui.h +++ b/libs/surfaces/control_protocol/control_protocol/basic_ui.h @@ -68,8 +68,9 @@ class LIBCONTROLCP_API BasicUI { void set_transport_speed (double speed); double get_transport_speed (); - void jump_by_seconds( double sec ); - void jump_by_bars(double bars); + void jump_by_seconds (double sec, bool with_roll = false); + void jump_by_bars (double bars, bool with_roll = false); + void jump_by_beats (double beats, bool with_roll = false); ARDOUR::samplepos_t transport_sample (); void locate (ARDOUR::samplepos_t sample, bool play = false); -- cgit v1.2.3