-double
-TempoMap::beat_offset_at (const Metrics& metrics, const double& beat) const
-{
- MeterSection* prev_m = 0;
- double beat_off = 0.0;
-
- for (Metrics::const_iterator i = metrics.begin(); i != metrics.end(); ++i) {
- MeterSection* m = 0;
- if ((m = dynamic_cast<MeterSection*> (*i)) != 0) {
- if (prev_m) {
- if (m->beat() > beat) {
- break;
- }
-
- if (m->position_lock_style() == AudioTime) {
- beat_off += ((m->pulse() - prev_m->pulse()) / prev_m->note_divisor()) - floor ((m->pulse() - prev_m->pulse()) / prev_m->note_divisor());
- }
- }
- prev_m = m;
- }
- }
-
- return beat_off;
-}
-
-frameoffset_t
-TempoMap::frame_offset_at (const Metrics& metrics, const framepos_t& frame) const
-{
- frameoffset_t frame_off = 0;
-
- for (Metrics::const_iterator i = metrics.begin(); i != metrics.end(); ++i) {
- MeterSection* m = 0;
- if ((m = dynamic_cast<MeterSection*> (*i)) != 0) {
- if (m->frame() > frame) {
- break;
- }
- if (m->position_lock_style() == AudioTime) {
- frame_off += frame_at_pulse_locked (metrics, m->pulse()) - m->frame();
- }
- }
- }
-
- return frame_off;
-}
-