Add some options for surfaces to jump in the timeline
* ::jump_by_beats() * request transport to keep rolling after jump
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user