summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_state_tracker.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2014-11-30 18:33:22 -0500
committerDavid Robillard <d@drobilla.net>2014-11-30 23:56:19 -0500
commit008bfceb77298f21c592a3860d75d5cc4b315e4d (patch)
tree34e19194b2d450daa3b77aa0cf1c3062314bad0e /libs/ardour/midi_state_tracker.cc
parent0f72ea4a349480cf1272571395f63c10b6152b4f (diff)
Clean up state tracking of raw MIDI.
Diffstat (limited to 'libs/ardour/midi_state_tracker.cc')
-rw-r--r--libs/ardour/midi_state_tracker.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/libs/ardour/midi_state_tracker.cc b/libs/ardour/midi_state_tracker.cc
index 0eac3819f2..afe6f07db7 100644
--- a/libs/ardour/midi_state_tracker.cc
+++ b/libs/ardour/midi_state_tracker.cc
@@ -92,6 +92,24 @@ MidiStateTracker::track (const MidiBuffer::const_iterator &from, const MidiBuffe
}
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)
{
DEBUG_TRACE (PBD::DEBUG::MidiTrackers, string_compose ("%1 MB-resolve notes @ %2 on = %3\n", this, time, _on));