summaryrefslogtreecommitdiff
path: root/libs/ardour/beats_frames_converter.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/beats_frames_converter.cc')
-rw-r--r--libs/ardour/beats_frames_converter.cc20
1 files changed, 7 insertions, 13 deletions
diff --git a/libs/ardour/beats_frames_converter.cc b/libs/ardour/beats_frames_converter.cc
index 180b3e563a..4cda4173b3 100644
--- a/libs/ardour/beats_frames_converter.cc
+++ b/libs/ardour/beats_frames_converter.cc
@@ -27,25 +27,19 @@ namespace ARDOUR {
framecnt_t
BeatsFramesConverter::to(double beats) const
{
- // FIXME: assumes tempo never changes after origin
- const Tempo& tempo = _tempo_map.tempo_at (_origin_b);
- const double frames_per_beat = tempo.frames_per_beat(
- _tempo_map.frame_rate(),
- _tempo_map.meter_at (_origin_b));
+ Timecode::BBT_Time delta;
- return llrint (beats * frames_per_beat);
+ delta.bars = 0;
+ delta.beats = rint (floor (beats));
+ delta.ticks = rint (floor (Meter::ticks_per_beat * fmod (beats, 1.0)));
+
+ return _tempo_map.framepos_plus_bbt (_origin_b, delta);
}
double
BeatsFramesConverter::from (framecnt_t frames) const
{
- // FIXME: assumes tempo never changes after origin
- const Tempo& tempo = _tempo_map.tempo_at (_origin_b);
- const double frames_per_beat = tempo.frames_per_beat(
- _tempo_map.frame_rate(),
- _tempo_map.meter_at (_origin_b));
-
- return frames / frames_per_beat;
+ return _tempo_map.framewalk_to_beats (_origin_b, frames);
}
} /* namespace ARDOUR */