diff options
author | David Robillard <d@drobilla.net> | 2014-11-30 18:33:22 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-11-30 23:56:19 -0500 |
commit | 008bfceb77298f21c592a3860d75d5cc4b315e4d (patch) | |
tree | 34e19194b2d450daa3b77aa0cf1c3062314bad0e /libs/ardour/midi_state_tracker.cc | |
parent | 0f72ea4a349480cf1272571395f63c10b6152b4f (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.cc | 18 |
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)); |