summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorJohannes Mueller <github@johannes-mueller.org>2019-05-18 13:23:26 +0200
committerJohannes Mueller <github@johannes-mueller.org>2019-05-18 13:27:49 +0200
commit89f39d14f24648bb3737d83619e199e965825db1 (patch)
treebb2f20df3048d8b9af176650d47c0783db6e1680 /libs
parent1173ca8d3415b194f1f1bb61c4ebfe128d1ba77a (diff)
Add some options for surfaces to jump in the timeline
* ::jump_by_beats() * request transport to keep rolling after jump
Diffstat (limited to 'libs')
-rw-r--r--libs/surfaces/control_protocol/basic_ui.cc19
-rw-r--r--libs/surfaces/control_protocol/control_protocol/basic_ui.h5
2 files changed, 18 insertions, 6 deletions
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);