}
void
-MidiStateTracker::track (const MidiBuffer::iterator &from, const MidiBuffer::iterator &to)
+MidiStateTracker::track (const MidiBuffer::const_iterator &from, const MidiBuffer::const_iterator &to)
{
- for (MidiBuffer::iterator i = from; i != to; ++i) {
+ for (MidiBuffer::const_iterator i = from; i != to; ++i) {
track(*i);
}
}
+void
+MidiStateTracker::track (const uint8_t* evbuf)
+{
+ const uint8_t type = evbuf[0] & 0xF0;
+ const uint8_t chan = evbuf[0] & 0x0F;
+ switch (type) {
+ case MIDI_CTL_ALL_NOTES_OFF:
+ reset();
+ break;
+ case MIDI_CMD_NOTE_ON:
+ add(evbuf[1], chan);
+ break;
+ case MIDI_CMD_NOTE_OFF:
+ remove(evbuf[1], chan);
+ break;
+ }
+}
+
void
MidiStateTracker::resolve_notes (MidiBuffer &dst, framepos_t time)
{
this, (int) note, (int) channel, time));
_active_notes[note + 128 * channel]--;
/* don't stack events up at the same time */
- time += 1.0/128.0;
+ time += Evoral::MusicalTime::tick();
}
}
}