Files
midi-hid/midi.go
2025-08-03 16:21:33 +02:00

36 lines
727 B
Go

package main
import (
"gitlab.com/gomidi/midi/v2"
"gitlab.com/gomidi/midi/v2/drivers"
_ "gitlab.com/gomidi/midi/v2/drivers/rtmididrv"
)
type MidiInput struct {
input drivers.In
Messages chan midi.Message
Stop func()
}
func NewMidiInput(portName string) (*MidiInput, error) {
input, err := midi.FindInPort(portName)
if err != nil {
return nil, err
}
messages := make(chan midi.Message)
midiListener := func(msg midi.Message, timestampMs int32) {
if msg.IsOneOf(midi.NoteOnMsg, midi.NoteOffMsg, midi.ControlChangeMsg) {
messages <- msg
}
}
stopFunc, err := midi.ListenTo(input, midiListener, midi.UseSysEx())
if err != nil {
return nil, err
}
return &MidiInput{input, messages, stopFunc}, nil
}