从GO读取MIDI输入

从GO读取MIDI输入,go,midi,Go,Midi,我想用我的围棋程序收听传入的MIDI消息。然而,我不能让它工作 我曾尝试使用midi库,例如,但无法使其正常工作。没有可以找到的例子,文档对我来说也不清楚 package main import ( "fmt" "io" "github.com/gomidi/midi" . "github.com/gomidi/midi/midimessage/channel" // (Channel Messages) "github.com/gomidi/midi

我想用我的围棋程序收听传入的MIDI消息。然而,我不能让它工作

我曾尝试使用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输入以进行进一步处理


提前感谢

这里有一个当前版本的
gitlab.com/gomidi/midi
的工作示例(也可以查看
gitlab.com/gomidi/midi/examples

主程序包
进口(
“fmt”
“时间”
“gitlab.com/gomidi/midi”
“gitlab.com/gomidi/midi/midimessage/channel”//(channelmessages)
“gitlab.com/gomidi/midi/reader”
“gitlab.com/gomidi/rtmiddrv”
)
//此示例从第一个输入端口读取数据
func main(){
drv,err:=rtmiddrv.New()
必须(错误)
//确保最后关闭驱动器
延迟drv.Close()
ins,err:=drv.ins()
必须(错误)
//获取第一个输入
in:=ins[0]
fmt.Printf(“打开MIDI端口%v\n”,在中)
必须(在.Open()中)
延迟进入。关闭()
//要禁用日志记录,请将mid.NoLogger()作为选项传递
rd:=读卡器。新建(
reader.NoLogger(),
//打印每封邮件
reader.Each(func(pos*reader.Position,msg midi.Message){
//检查
fmt.Println(味精)
开关v:=消息(类型){
案例说明:
fmt.Printf(“在通道%v:键:%v速度:%v\n”、通道()、键()、速度()处的注释)
案件记录:
fmt.Printf(“在通道%v:键:%v\n处的注释”,通道(),键())
}
}),
)
//听MIDI
err=rd.ListenTo(在中)
必须(错误)
时间。睡眠(10*时间。秒)
err=in.StopListening()
必须(错误)
fmt.Printf(“关闭MIDI端口%v\n”,在中)
}
func必须(错误){
如果错误!=零{
死机(err.Error())
}
}

您能解决这个问题吗?我认为原因是您没有打开任何MIDI端口来读取数据。