diff options
author | David Robillard <d@drobilla.net> | 2014-11-19 20:47:18 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-11-20 11:31:31 -0500 |
commit | 8f8a4878f30795b7ac5398c8daa6b01b5c6d4468 (patch) | |
tree | ad69529a7ee88452f77403104b8cd0d970d67123 /libs/ardour/ardour/midi_state_tracker.h | |
parent | 9d8bbf4b9a7ddf2f7f030a6716f9d647190abca8 (diff) |
Clean up some MIDI code.
Diffstat (limited to 'libs/ardour/ardour/midi_state_tracker.h')
-rw-r--r-- | libs/ardour/ardour/midi_state_tracker.h | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/libs/ardour/ardour/midi_state_tracker.h b/libs/ardour/ardour/midi_state_tracker.h index 046e77f38c..a77ffdada3 100644 --- a/libs/ardour/ardour/midi_state_tracker.h +++ b/libs/ardour/ardour/midi_state_tracker.h @@ -52,9 +52,24 @@ public: return _active_notes[(channel*128)+note] > 0; } -private: - void track_note_onoffs(const Evoral::MIDIEvent<MidiBuffer::TimeType>& event); + template<typename Time> + void track (const Evoral::Event<Time>& ev) { + const uint8_t type = ev.buffer()[0] & 0xF0; + const uint8_t chan = ev.buffer()[0] & 0x0F; + switch (type) { + case MIDI_CTL_ALL_NOTES_OFF: + reset(); + break; + case MIDI_CMD_NOTE_ON: + add(ev.buffer()[1], chan); + break; + case MIDI_CMD_NOTE_OFF: + remove(ev.buffer()[1], chan); + break; + } + } +private: uint8_t _active_notes[128*16]; uint16_t _on; }; |