case BBT:
if (is_duration) {
- pos = frame_duration_from_bbt_string (current_time(), edit_string);
+ pos = frame_duration_from_bbt_string (bbt_reference_time, edit_string);
} else {
pos = frames_from_bbt_string (0, edit_string);
}
void
AudioClock::set_bbt (framepos_t when, framecnt_t offset, bool /*force*/)
{
- char buf[16];
+ char buf[64];
Timecode::BBT_Time BBT;
bool negative = false;
} else {
TempoMap& tmap (_session->tempo_map());
- /* if offset is before beat 0, it is meaningless */
- offset = max (offset, tmap.frame_at_beat (0.0));
+ if (offset == 0) {
+ offset = bbt_reference_time;
+ }
const double divisions = tmap.meter_section_at_frame (offset).divisions_per_bar();
Timecode::BBT_Time sub_bbt;
TempoMetric m (_session->tempo_map().metric_at (pos));
- sprintf (buf, "%-5.3f", _session->tempo_map().tempo_at_frame (pos).beats_per_minute());
+ snprintf (buf, sizeof(buf), "%-5.3f/%f", _session->tempo_map().tempo_at_frame (pos).note_types_per_minute(), m.tempo().note_type());
+ /* XXX this doesn't fit inside the container. */
_left_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%3</span> <span foreground=\"green\">%2</span></span>",
INFO_FONT_SIZE, buf, _("Tempo")));
- sprintf (buf, "%g/%g", m.meter().divisions_per_bar(), m.meter().note_divisor());
+ snprintf (buf, sizeof(buf), "%g/%g", m.meter().divisions_per_bar(), m.meter().note_divisor());
_right_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%3</span> <span foreground=\"green\">%2</span></span>",
INFO_FONT_SIZE, buf, _("Meter")));
}