fix(tracker/gomidi): consume all available midi.Messages

This commit is contained in:
5684185+vsariola@users.noreply.github.com 2024-10-15 00:24:18 +03:00
parent 97e59c5650
commit 3986bbede7

View File

@ -87,23 +87,26 @@ func (m *RTMIDIContext) HandleMessage(msg midi.Message, timestampms int32) {
} }
func (c *RTMIDIContext) NextEvent() (event tracker.MIDINoteEvent, ok bool) { func (c *RTMIDIContext) NextEvent() (event tracker.MIDINoteEvent, ok bool) {
select { for {
case msg := <-c.events: select {
var channel uint8 case msg := <-c.events:
var velocity uint8 var channel uint8
var key uint8 var velocity uint8
if msg.GetNoteOn(&channel, &key, &velocity) { var key uint8
return tracker.MIDINoteEvent{Frame: 0, On: true, Channel: int(channel), Note: key}, true if msg.GetNoteOn(&channel, &key, &velocity) {
} else if msg.GetNoteOff(&channel, &key, &velocity) { return tracker.MIDINoteEvent{Frame: 0, On: true, Channel: int(channel), Note: key}, true
return tracker.MIDINoteEvent{Frame: 0, On: false, Channel: int(channel), Note: key}, true } else if msg.GetNoteOff(&channel, &key, &velocity) {
return tracker.MIDINoteEvent{Frame: 0, On: false, Channel: int(channel), Note: key}, true
}
// TODO: handle control messages with something like:
// if msg.GetControlChange(&channel, &controller, &value) {
// ....
// if the message is not any recognized type, ignore it and continue looping
default:
// Note (@LeStahL): This empty select case is needed to make the implementation non-blocking.
return tracker.MIDINoteEvent{}, false
} }
// TODO: handle control messages with something like:
// if msg.GetControlChange(&channel, &controller, &value) {
// ....
default:
// Note (@LeStahL): This empty select case is needed to make the implementation non-blocking.
} }
return tracker.MIDINoteEvent{}, false
} }
func (c *RTMIDIContext) BPM() (bpm float64, ok bool) { func (c *RTMIDIContext) BPM() (bpm float64, ok bool) {