- void bbt_time (nframes_t when, BBT_Time&) const;
- nframes_t frame_time (const BBT_Time&) const;
- nframes_t bbt_duration_at (nframes_t, const BBT_Time&, int dir) const;
+ void bbt_time (framepos_t when, Timecode::BBT_Time&);
+ /* realtime safe variant of ::bbt_time(), will throw
+ std::logic_error if the map is not large enough
+ to provide an answer.
+ */
+ void bbt_time_rt (framepos_t when, Timecode::BBT_Time&);
+ framecnt_t frame_time (const Timecode::BBT_Time&);
+ framecnt_t bbt_duration_at (framepos_t, const Timecode::BBT_Time&, int dir);
+
+ /* TEMPO-SENSITIVE FUNCTIONS
+
+ These next 4 functions will all take tempo in account and should be
+ used to determine position (and in the last case, distance in beats)
+ when tempo matters but meter does not.
+
+ They SHOULD be used to determine the position of events
+ whose location is canonically defined in beats.
+ */
+
+ framepos_t framepos_plus_bbt (framepos_t pos, Timecode::BBT_Time b) const;
+ framepos_t framepos_plus_beats (framepos_t, Evoral::MusicalTime) const;
+ framepos_t framepos_minus_beats (framepos_t, Evoral::MusicalTime) const;
+ Evoral::MusicalTime framewalk_to_beats (framepos_t pos, framecnt_t distance) const;