use cleaned up Temporal ::quarters*_at* API (GUI edition)

This commit is contained in:
Paul Davis 2020-12-07 11:40:00 -07:00
parent 3ca2be321d
commit 9412130c01
6 changed files with 93 additions and 23 deletions

View file

@ -1244,10 +1244,10 @@ AudioClock::set_bbt (timepos_t const & w, timecnt_t const & o, bool /*force*/)
Temporal::BBT_Time sub_bbt; Temporal::BBT_Time sub_bbt;
if (negative) { if (negative) {
BBT = tmap->bbt_at (tmap->quarter_note_at (timepos_t (offset))); BBT = tmap->bbt_at (tmap->quarters_at (timepos_t (offset)));
sub_bbt = tmap->bbt_at (timepos_t (offset - when)); sub_bbt = tmap->bbt_at (timepos_t (offset - when));
} else { } else {
BBT = tmap->bbt_at (tmap->quarter_note_at (when + offset)); BBT = tmap->bbt_at (tmap->quarters_at (when + offset));
sub_bbt = tmap->bbt_at (timepos_t (offset)); sub_bbt = tmap->bbt_at (timepos_t (offset));
} }

View file

@ -2841,19 +2841,19 @@ Editor::snap_to_bbt (timepos_t const & presnap, Temporal::RoundMode direction, S
case bbt_show_16: case bbt_show_16:
case bbt_show_4: case bbt_show_4:
case bbt_show_1: case bbt_show_1:
ret = timepos_t (tmap->quarter_note_at (tmap->round_to_bar (tmap->bbt_at (presnap)))); ret = timepos_t (tmap->quarters_at (tmap->round_to_bar (tmap->bbt_at (presnap))));
break; break;
case bbt_show_quarters: case bbt_show_quarters:
ret = timepos_t (tmap->quarter_note_at (presnap).round_to_beat ()); ret = timepos_t (tmap->quarters_at (presnap).round_to_beat ());
break; break;
case bbt_show_eighths: case bbt_show_eighths:
ret = timepos_t (tmap->quarter_note_at (presnap).round_to_subdivision (1 * divisor, direction)); ret = timepos_t (tmap->quarters_at (presnap).round_to_subdivision (1 * divisor, direction));
break; break;
case bbt_show_sixteenths: case bbt_show_sixteenths:
ret = timepos_t (tmap->quarter_note_at (presnap).round_to_subdivision (2 * divisor, direction)); ret = timepos_t (tmap->quarters_at (presnap).round_to_subdivision (2 * divisor, direction));
break; break;
case bbt_show_thirtyseconds: case bbt_show_thirtyseconds:
ret = timepos_t (tmap->quarter_note_at (presnap).round_to_subdivision (4 * divisor, direction)); ret = timepos_t (tmap->quarters_at (presnap).round_to_subdivision (4 * divisor, direction));
break; break;
case bbt_show_sixtyfourths: case bbt_show_sixtyfourths:
ret = _session->tempo_map().round_to_quarter_note_subdivision (presnap.sample, 8 * divisor, direction); ret = _session->tempo_map().round_to_quarter_note_subdivision (presnap.sample, 8 * divisor, direction);
@ -2863,7 +2863,7 @@ Editor::snap_to_bbt (timepos_t const & presnap, Temporal::RoundMode direction, S
break; break;
} }
} else { } else {
ret = timepos_t (tmap->quarter_note_at (presnap).round_to_subdivision (get_grid_beat_divisions(), direction)); ret = timepos_t (tmap->quarters_at (presnap).round_to_subdivision (get_grid_beat_divisions(), direction));
} }
return ret; return ret;

View file

@ -3449,7 +3449,7 @@ MeterMarkerDrag::motion (GdkEvent* event, bool first_move)
if (map->time_domain() == AudioTime) { if (map->time_domain() == AudioTime) {
pos = timepos_t (map->sample_at (bbt, _editor->session()->sample_rate())); pos = timepos_t (map->sample_at (bbt, _editor->session()->sample_rate()));
} else { } else {
pos = timepos_t (map->quarter_note_at (bbt)); pos = timepos_t (map->quarters_at (bbt));
} }
_marker->reset_meter (map->set_meter (meter, pos)); _marker->reset_meter (map->set_meter (meter, pos));
@ -3619,7 +3619,7 @@ TempoMarkerDrag::motion (GdkEvent* event, bool first_move)
if (map->time_domain() == AudioTime) { if (map->time_domain() == AudioTime) {
pos = timepos_t (map->sample_at (bbt, _editor->session()->sample_rate())); pos = timepos_t (map->sample_at (bbt, _editor->session()->sample_rate()));
} else { } else {
pos = timepos_t (map->quarter_note_at (bbt)); pos = timepos_t (map->quarters_at (bbt));
} }
_marker->reset_tempo (map->set_tempo (tempo, pos)); _marker->reset_tempo (map->set_tempo (tempo, pos));
@ -3792,7 +3792,7 @@ BBTRulerDrag::setup_pointer_offset ()
beat = floor (beat_at_sample) + (floor (((beat_at_sample - floor (beat_at_sample)) * 4)) / 4); beat = floor (beat_at_sample) + (floor (((beat_at_sample - floor (beat_at_sample)) * 4)) / 4);
} }
_grab_qn = map.quarter_note_at (beat); _grab_qn = map.quarters_at (beat);
_pointer_offset = raw_grab_sample() - map.sample_at_quarter_note (_grab_qn); _pointer_offset = raw_grab_sample() - map.sample_at_quarter_note (_grab_qn);
@ -3823,7 +3823,7 @@ BBTRulerDrag::motion (GdkEvent* event, bool first_move)
if (ArdourKeyboard::indicates_constraint (event->button.state)) { if (ArdourKeyboard::indicates_constraint (event->button.state)) {
/* adjust previous tempo to match pointer sample */ /* adjust previous tempo to match pointer sample */
_editor->session()->tempo_map().gui_stretch_tempo (_tempo, map.sample_at_quarter_note (_grab_qn), pf, _grab_qn, map.quarter_note_at_sample (pf)); _editor->session()->tempo_map().gui_stretch_tempo (_tempo, map.sample_at_quarter_note (_grab_qn), pf, _grab_qn, map.quarters_at_sample (pf));
} }
ostringstream sstr; ostringstream sstr;
@ -3951,7 +3951,7 @@ TempoTwistDrag::setup_pointer_offset ()
beat = floor (beat_at_sample) + (floor (((beat_at_sample - floor (beat_at_sample)) * 4)) / 4); beat = floor (beat_at_sample) + (floor (((beat_at_sample - floor (beat_at_sample)) * 4)) / 4);
} }
_grab_qn = map.quarter_note_at_beat (beat); _grab_qn = map.quarters_at_beat (beat);
_pointer_offset = raw_grab_sample() - map.sample_at_quarter_note (_grab_qn); _pointer_offset = raw_grab_sample() - map.sample_at_quarter_note (_grab_qn);
@ -6922,7 +6922,7 @@ NoteCreateDrag::grid_aligned_beats (timepos_t const & pos, GdkEvent const * even
beats = pos.beats (); beats = pos.beats ();
break; break;
case -1: /* round to bar */ case -1: /* round to bar */
beats = map->quarter_note_at (map->metric_at (pos).meter().round_to_bar (map->bbt_at (pos))); beats = map->quarters_at (map->metric_at (pos).meter().round_to_bar (map->bbt_at (pos)));
break; break;
default: /* round to some beat subdivision */ default: /* round to some beat subdivision */
beats = (pos).beats().round_to_subdivision (divisions, Temporal::RoundNearest); beats = (pos).beats().round_to_subdivision (divisions, Temporal::RoundNearest);

View file

@ -981,14 +981,14 @@ Editor::compute_bbt_ruler_scale (samplepos_t lower, samplepos_t upper)
std::vector<Temporal::Point>::const_iterator i; std::vector<Temporal::Point>::const_iterator i;
Temporal::BBT_Time lower_beat, upper_beat; // the beats at each end of the ruler Temporal::BBT_Time lower_beat, upper_beat; // the beats at each end of the ruler
Temporal::TempoMap::SharedPtr tmap (Temporal::TempoMap::use()); Temporal::TempoMap::SharedPtr tmap (Temporal::TempoMap::use());
Beats floor_lower_beat = std::max (Beats(), tmap->quarter_note_at (lower)).round_down_to_beat (); Beats floor_lower_beat = std::max (Beats(), tmap->quarters_at_sample (lower)).round_down_to_beat ();
if (floor_lower_beat < 0.0) { if (floor_lower_beat < 0.0) {
floor_lower_beat = 0.0; floor_lower_beat = 0.0;
} }
const samplepos_t beat_before_lower_pos = tmap->sample_at (floor_lower_beat, _session->sample_rate()); const samplepos_t beat_before_lower_pos = tmap->sample_at (floor_lower_beat, _session->sample_rate());
const samplepos_t beat_after_upper_pos = tmap->sample_at ((std::max (Beats(), tmap->quarter_note_at (upper)).round_down_to_beat()) + Beats (1, 0), _session->sample_rate()); const samplepos_t beat_after_upper_pos = tmap->sample_at ((std::max (Beats(), tmap->quarters_at_sample (upper)).round_down_to_beat()) + Beats (1, 0), _session->sample_rate());
_session->bbt_time (timepos_t (beat_before_lower_pos), lower_beat); _session->bbt_time (timepos_t (beat_before_lower_pos), lower_beat);
_session->bbt_time (timepos_t (beat_after_upper_pos), upper_beat); _session->bbt_time (timepos_t (beat_after_upper_pos), upper_beat);
@ -1000,7 +1000,77 @@ Editor::compute_bbt_ruler_scale (samplepos_t lower, samplepos_t upper)
bbt_ruler_scale = bbt_show_many; bbt_ruler_scale = bbt_show_many;
const double ceil_upper_beat = floor (std::max (0.0, _session->tempo_map().beat_at_sample (upper))) + 1.0; switch (_grid_type) {
case GridTypeBeatDiv2:
bbt_beat_subdivision = 2;
break;
case GridTypeBeatDiv3:
bbt_beat_subdivision = 3;
break;
case GridTypeBeatDiv4:
bbt_beat_subdivision = 4;
break;
case GridTypeBeatDiv5:
bbt_beat_subdivision = 5;
bbt_accent_modulo = 2; // XXX YIKES
break;
case GridTypeBeatDiv6:
bbt_beat_subdivision = 3;
bbt_accent_modulo = 2; // XXX YIKES
break;
case GridTypeBeatDiv7:
bbt_beat_subdivision = 7;
bbt_accent_modulo = 2; // XXX YIKES
break;
case GridTypeBeatDiv8:
bbt_beat_subdivision = 4;
bbt_accent_modulo = 2;
break;
case GridTypeBeatDiv10:
bbt_beat_subdivision = 5;
bbt_accent_modulo = 2; // XXX YIKES
break;
case GridTypeBeatDiv12:
bbt_beat_subdivision = 3;
bbt_accent_modulo = 3;
break;
case GridTypeBeatDiv14:
bbt_beat_subdivision = 7;
bbt_accent_modulo = 3; // XXX YIKES!
break;
case GridTypeBeatDiv16:
bbt_beat_subdivision = 4;
bbt_accent_modulo = 4;
break;
case GridTypeBeatDiv20:
bbt_beat_subdivision = 5;
bbt_accent_modulo = 5;
break;
case GridTypeBeatDiv24:
bbt_beat_subdivision = 6;
bbt_accent_modulo = 6;
break;
case GridTypeBeatDiv28:
bbt_beat_subdivision = 7;
bbt_accent_modulo = 7;
break;
case GridTypeBeatDiv32:
bbt_beat_subdivision = 4;
bbt_accent_modulo = 8;
break;
case GridTypeBar:
case GridTypeBeat:
bbt_beat_subdivision = 4;
break;
case GridTypeNone:
case GridTypeTimecode:
case GridTypeMinSec:
case GridTypeCDFrame:
bbt_beat_subdivision = 4;
break;
}
const Beats ceil_upper_beat = std::max (Beats(), tmap->quarters_at_sample (upper)).round_up_to_beat() + Beats (1, 0);
if (ceil_upper_beat == floor_lower_beat) { if (ceil_upper_beat == floor_lower_beat) {
return; return;

View file

@ -334,7 +334,7 @@ Editor::compute_current_bbt_points (Temporal::TempoMapPoints& grid, samplepos_t
/* prevent negative values of leftmost from creeping into tempomap /* prevent negative values of leftmost from creeping into tempomap
*/ */
const Beats lower_beat = max (Beats (), TempoMap::use()->quarter_note_at (leftmost)).round_down_to_beat() - Beats (1, 0); const Beats lower_beat = max (Beats (), TempoMap::use()->quarters_at_sample (leftmost)).round_down_to_beat() - Beats (1, 0);
const samplecnt_t sr (_session->sample_rate()); const samplecnt_t sr (_session->sample_rate());
TempoMap::SharedPtr tmap (TempoMap::use()); TempoMap::SharedPtr tmap (TempoMap::use());
@ -419,7 +419,7 @@ Editor::mouse_add_new_tempo_event (timepos_t pos)
begin_reversible_command (_("add tempo mark")); begin_reversible_command (_("add tempo mark"));
const Beats qn = map->quarter_note_at (pos); const Beats qn = map->quarters_at (pos);
if (qn > Beats()) { if (qn > Beats()) {
XMLNode &before = map->get_state(); XMLNode &before = map->get_state();

View file

@ -2932,7 +2932,7 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_
} }
Temporal::TempoMap::SharedPtr tmap (Temporal::TempoMap::use()); Temporal::TempoMap::SharedPtr tmap (Temporal::TempoMap::use());
const timepos_t abs_beats (tmap->quarter_note_at (snapped_x)); const timepos_t abs_beats (tmap->quarters_at (snapped_x));
const Temporal::Beats beats = _region->absolute_time_to_source_beats (abs_beats); const Temporal::Beats beats = _region->absolute_time_to_source_beats (abs_beats);
Temporal::Beats len = Temporal::Beats(); Temporal::Beats len = Temporal::Beats();
@ -3027,7 +3027,7 @@ MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_
} }
/* and then to beats */ /* and then to beats */
const timepos_t abs_beats (Temporal::TempoMap::use()->quarter_note_at (current_time)); const timepos_t abs_beats (Temporal::TempoMap::use()->quarters_at (current_time));
const Temporal::Beats x_beats = _region->absolute_time_to_source_beats (abs_beats); const Temporal::Beats x_beats = _region->absolute_time_to_source_beats (abs_beats);
if (at_front && x_beats < canvas_note->note()->end_time()) { if (at_front && x_beats < canvas_note->note()->end_time()) {
@ -4268,11 +4268,11 @@ MidiRegionView::snap_sample_to_grid_underneath (samplepos_t p, bool shift_snap)
#warning NUTEMPO new tempo map API required #warning NUTEMPO new tempo map API required
#if 0 #if 0
Temporal::TempoMap& map (trackview.session()->tempo_map()); Temporal::TempoMap& map (trackview.session()->tempo_map());
Temporal::Beats eqaf = map.quarter_note_at (p + _region->position_sample()); Temporal::Beats eqaf = map.quarters_at (p + _region->position_sample());
if (shift_snap) { if (shift_snap) {
const Temporal::Beats qaf = map.quarter_note_at (p + _region->position_sample()); const Temporal::Beats qaf = map.quarters_at (p + _region->position_sample());
/* Hack so that we always snap to the note that we are over, instead of snapping /* Hack so that we always snap to the note that we are over, instead of snapping
to the next one if we're more than halfway through the one we're over. to the next one if we're more than halfway through the one we're over.
*/ */