- const sframes_t time_frames = BEATS_TO_FRAMES(i->time());
- if (time_frames < source_start + start + cnt) {
- dst.write(time_frames, i->event_type(), i->size(), i->buffer());
+ const sframes_t time_frames = converter.to(i->time());
+ if (time_frames < start + cnt) {
+ dst.write(time_frames + stamp_offset - negative_stamp_offset,
+ i->event_type(), i->size(), i->buffer());
+ if (tracker) {
+ Evoral::MIDIEvent<Evoral::MusicalTime>& ev (*(Evoral::MIDIEvent<Evoral::MusicalTime>*) (&(*i)));
+ if (ev.is_note_on()) {
+ DEBUG_TRACE (DEBUG::MidiSourceIO, string_compose ("\t%1 add note on %2 @ %3\n", _name, ev.note(), time_frames));
+ tracker->add (ev.note(), ev.channel());
+ } else if (ev.is_note_off()) {
+ DEBUG_TRACE (DEBUG::MidiSourceIO, string_compose ("\t%1 add note off %2 @ %3\n", _name, ev.note(), time_frames));
+ tracker->remove (ev.note(), ev.channel());
+ }
+ }