Merge with trunk R2978.
[ardour.git] / libs / ardour / smf_source.cc
index 3bc53cb5382b9d07b5f3f1d101917071354f1f54..29f36cc2cd3be54c2d6d655414f6d847a6762aca 100644 (file)
@@ -326,7 +326,7 @@ SMFSource::read_event(uint32_t* delta_t, uint32_t* size, Byte** buf) const
 nframes_t
 SMFSource::read_unlocked (MidiRingBuffer& dst, nframes_t start, nframes_t cnt, nframes_t stamp_offset) const
 {
-       //cerr << "SMF - read " << start << ", count=" << cnt << ", offset=" << stamp_offset << endl;
+       //cerr << "SMF " << name() << " read " << start << ", count=" << cnt << ", offset=" << stamp_offset << endl;
 
        // 64 bits ought to be enough for anybody
        uint64_t time = 0; // in SMF ticks, 1 tick per _ppqn
@@ -345,7 +345,8 @@ SMFSource::read_unlocked (MidiRingBuffer& dst, nframes_t start, nframes_t cnt, n
        
        // FIXME: assumes tempo never changes after start
        const double frames_per_beat = _session.tempo_map().tempo_at(_timeline_position).frames_per_beat(
-                       _session.engine().frame_rate());
+                       _session.engine().frame_rate(),
+                       _session.tempo_map().meter_at(_timeline_position));
        
        const uint64_t start_ticks = (uint64_t)((start / frames_per_beat) * _ppqn);
 
@@ -456,8 +457,9 @@ SMFSource::append_event_unlocked(const MidiEvent& ev)
        assert(ev.time() >= _last_ev_time);
        
        // FIXME: assumes tempo never changes after start
-       const double frames_per_beat = _session.tempo_map().tempo_at
-                       (_timeline_position).frames_per_beat(_session.engine().frame_rate());
+       const double frames_per_beat = _session.tempo_map().tempo_at(_timeline_position).frames_per_beat(
+                       _session.engine().frame_rate(),
+                       _session.tempo_map().meter_at(_timeline_position));
        
        const uint32_t delta_time = (uint32_t)((ev.time() - _last_ev_time) / frames_per_beat * _ppqn);
 
@@ -888,7 +890,8 @@ SMFSource::load_model(bool lock, bool force_reload)
        
        // FIXME: assumes tempo never changes after start
        const double frames_per_beat = _session.tempo_map().tempo_at(_timeline_position).frames_per_beat(
-                       _session.engine().frame_rate());
+                       _session.engine().frame_rate(),
+                       _session.tempo_map().meter_at(_timeline_position));
        
        uint32_t delta_t = 0;
        int ret;