summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/midi_state_tracker.h
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2014-11-19 20:47:18 -0500
committerDavid Robillard <d@drobilla.net>2014-11-20 11:31:31 -0500
commit8f8a4878f30795b7ac5398c8daa6b01b5c6d4468 (patch)
treead69529a7ee88452f77403104b8cd0d970d67123 /libs/ardour/ardour/midi_state_tracker.h
parent9d8bbf4b9a7ddf2f7f030a6716f9d647190abca8 (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.h19
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;
};