我希望使用GO程序监听传入的MIDI消息。但是,我无法让它工作。
我尝试过使用midi库,例如https://github.com/gomidi/midi,但我无法使其工作。找不到示例,文档对我来说也不清晰。
package main
import (
"fmt"
"io"
"github.com/gomidi/midi"
. "github.com/gomidi/midi/midimessage/channel" // (Channel Messages)
"github.com/gomidi/midi/midimessage/realtime"
"github.com/gomidi/midi/midireader"
)
func main() {
var input io.Reader
rthandler := func(m realtime.Message) {
fmt.Printf("Realtime: %s\n", m)
}
rd := midireader.New(input, rthandler)
var m midi.Message
var err error
for {
m, err = rd.Read()
// breaking at least with io.EOF
if err != nil {
break
}
// inspect
fmt.Println(m)
switch v := m.(type) {
case NoteOn:
fmt.Printf("NoteOn at channel %v: key: %v velocity: %v\n", v.Channel(), v.Key(), v.Velocity())
case NoteOff:
fmt.Printf("NoteOff at channel %v: key: %v\n", v.Channel(), v.Key())
}
}
if err != io.EOF {
panic("error: " + err.Error())
}
}
我的目标是能够读取(接收MIDI消息后只需打印)用于进一步处理的MIDI输入。
提前感谢。