}
} else if ((ts = dynamic_cast<TempoSection*>(*i)) != 0) {
- if (ts->type() == TempoSection::Constant) {
- if (ts->note_type() != 4.0) {
- snprintf (buf, sizeof (buf), "%.3f/%.0f", ts->note_types_per_minute(), ts->note_type());
- } else {
- snprintf (buf, sizeof (buf), "%.3f", ts->note_types_per_minute());
- }
- } else {
- if (ts->note_type() != 4.0) {
- snprintf (buf, sizeof (buf), "%.3f/%.0f>%.3f", ts->note_types_per_minute(), ts->note_type(), ts->end_note_types_per_minute());
- } else {
- snprintf (buf, sizeof (buf), "%.3f>%.3f", ts->note_types_per_minute(), ts->end_note_types_per_minute());
- }
- }
max_tempo = max (max_tempo, ts->note_types_per_minute());
max_tempo = max (max_tempo, ts->end_note_types_per_minute());
min_tempo = min (min_tempo, ts->note_types_per_minute());
tempo_curves.push_back (new TempoCurve (*this, *tempo_group, tc_color,
*(const_cast<TempoSection*>(ts)), ts->frame(), false));
+ const std::string tname (X_(""));
if (ts->position_lock_style() == MusicTime) {
- metric_marks.push_back (new TempoMarker (*this, *tempo_group, UIConfiguration::instance().color ("tempo marker music"), buf,
+ metric_marks.push_back (new TempoMarker (*this, *tempo_group, UIConfiguration::instance().color ("tempo marker music"), tname,
*(const_cast<TempoSection*>(ts))));
} else {
- metric_marks.push_back (new TempoMarker (*this, *tempo_group, UIConfiguration::instance().color ("tempo marker"), buf,
+ metric_marks.push_back (new TempoMarker (*this, *tempo_group, UIConfiguration::instance().color ("tempo marker"), tname,
*(const_cast<TempoSection*>(ts))));
}
if (prev_ts && abs (prev_ts->end_note_types_per_minute() - ts->note_types_per_minute()) < 1.0) {
ENSURE_GUI_THREAD (*this, &Editor::tempo_map_changed, ignored);
if (tempo_lines) {
- tempo_lines->tempo_map_changed();
+ tempo_lines->tempo_map_changed(_session->tempo_map().music_origin());
}
compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + current_page_samples());
ENSURE_GUI_THREAD (*this, &Editor::tempo_map_changed);
if (tempo_lines) {
- tempo_lines->tempo_map_changed();
+ tempo_lines->tempo_map_changed(_session->tempo_map().music_origin());
}
TempoSection* prev_ts = 0;
if ((ts = &tempo_marker->tempo()) != 0) {
tempo_marker->set_position (ts->frame ());
- char buf[64];
if (prev_ts && abs (prev_ts->end_note_types_per_minute() - ts->note_types_per_minute()) < 1.0) {
tempo_marker->set_points_color (UIConfiguration::instance().color ("tempo marker music"));
tempo_marker->set_points_color (UIConfiguration::instance().color ("tempo marker"));
}
- if (ts->type() == TempoSection::Constant) {
- if (ts->note_type() != 4.0) {
- snprintf (buf, sizeof (buf), "%.3f/%.0f", ts->note_types_per_minute(), ts->note_type());
- } else {
- snprintf (buf, sizeof (buf), "%.3f", ts->note_types_per_minute());
- }
- } else {
- if (ts->note_type() != 4.0) {
- snprintf (buf, sizeof (buf), "%.3f/%.0f>%.3f", ts->note_types_per_minute(), ts->note_type(), ts->end_note_types_per_minute());
- } else {
- snprintf (buf, sizeof (buf), "%.3f>%.3f", ts->note_types_per_minute(), ts->end_note_types_per_minute());
- }
- }
-
- tempo_marker->set_name (buf);
-
max_tempo = max (max_tempo, ts->note_types_per_minute());
max_tempo = max (max_tempo, ts->end_note_types_per_minute());
min_tempo = min (min_tempo, ts->note_types_per_minute());
}
if (immediate_redraw) {
- compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + current_page_samples());
+
+//only recalculate bbt_ruler_scale on a zoom or snap-change; not every redraw; if a case is found where this is necessary, uncomment this line.
+// compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + current_page_samples());
+
std::vector<TempoMap::BBTPoint> grid;
if (bbt_ruler_scale != bbt_show_many) {
void
Editor::tempo_curve_selected (TempoSection* ts, bool yn)
{
+ if (ts == 0) {
+ return;
+ }
+
for (Curves::iterator x = tempo_curves.begin(); x != tempo_curves.end(); ++x) {
if (&(*x)->tempo() == ts) {
if (yn) {
}
if (tempo_lines == 0) {
- tempo_lines = new TempoLines (time_line_group, ArdourCanvas::LineSet::Vertical);
+ tempo_lines = new TempoLines (time_line_group, ArdourCanvas::LineSet::Vertical, new BeatsFramesConverter (_session->tempo_map(), _session->tempo_map().music_origin()));
}
const unsigned divisions = get_grid_beat_divisions(leftmost_frame);
Timecode::BBT_Time requested;
meter_dialog.get_bbt_time (requested);
- const double beat = map.beat_at_bbt (requested);
- const double al_frame = map.frame_at_beat (beat);
+ const double al_frame = map.frame_at_bbt (requested);
begin_reversible_command (_("add meter mark"));
- XMLNode &before = map.get_state();
+ XMLNode &before = map.get_state();
if (meter_dialog.get_lock_style() == MusicTime) {
- map.add_meter (Meter (bpb, note_type), beat, requested, 0, MusicTime);
+ map.add_meter (Meter (bpb, note_type), requested, 0, MusicTime);
} else {
- map.add_meter (Meter (bpb, note_type), beat, requested, al_frame, AudioTime);
+ map.add_meter (Meter (bpb, note_type), requested, al_frame, AudioTime);
}
_session->add_command(new MementoCommand<TempoMap>(map, &before, &map.get_state()));
const PositionLockStyle pls = (meter_dialog.get_lock_style() == AudioTime) ? AudioTime : MusicTime;
begin_reversible_command (_("replace meter mark"));
- XMLNode &before = _session->tempo_map().get_state();
+ XMLNode &before = _session->tempo_map().get_state();
_session->tempo_map().replace_meter (*section, meter, when, frame, pls);
}
double bpm = tempo_dialog.get_bpm ();
+ double end_bpm = tempo_dialog.get_end_bpm ();
double nt = tempo_dialog.get_note_type ();
bpm = max (0.01, bpm);
- const Tempo tempo (bpm, nt);
+ const Tempo tempo (bpm, nt, end_bpm);
Timecode::BBT_Time when;
tempo_dialog.get_bbt_time (when);