【问题标题】:MIDI Out on Raspberry Pi using Python使用 Python 在 Raspberry Pi 上输出 MIDI
【发布时间】:2016-12-21 19:15:36
【问题描述】:

我正在使用扫描矩阵中的按钮将 MIDI 音符输出到连接到 MIDI-OX 的 MIDI-USB 转换器。

为此,我使用 Python 来确定何时按下或释放按钮以及它是哪个按钮。这部分代码运行良好。

但是,我发现 MIDI-OX 收到的命令有很多不一致之处。对于通信,我将 Pi 的 UART0_TXD 引脚直接连接到用于 MIDI 和 PySerial 发送数据的 5 极 DIN 连接器的引脚 2。据我所知,我的代码应该生成正确的命令并正确地通过串行发送它们,所以我不知道去哪里进行故障排除。

发送命令的代码如下:

message=chr(0x90) + chr(0x3D) + chr(0x40)
port.write(message)

这会在 MIDI-OX 中产生以下输出:

TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT       
007B971E   1  --     90    68    27    1  G# 8 Note On     
007B971E   1  --     FF    --    --   --  ---  System Reset

从上面可以看出,MIDI-OX 接收到的数据 2 为 68,并为该数字输出正确的音符 (G#)。但是,如果我将代码更改为:

message=chr(0x90) + chr(0x3C) + chr(0x40)
port.write(message)

MIDI-OX 输出为:

TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT               
007FAC19   1  --     81    00    42    2  C  0 Note Off              
007FAC3A   1  --     FF    --    --   --  ---  System Reset          

表明它正在接收完全不同的数据。

任何关于从这里去哪里的想法将不胜感激。

【问题讨论】:

  • 所以你发送 1 件东西和“G 尖锐?”打开,您发送另一件事并且错误的音符“C”关闭,似乎是一个好的开始,为什么不只是迭代每个十六进制chr并映射音符,它们可能不是十六进制序列?试试看:chr(x90) + chr(0x3D) + chr(0x41) ... 成功的一半基本上就是偷偷改变一件事,然后看到结果,改变另一件事,然后看到结果……一遍又一遍,直到你弄清楚为什么会这样没有做你最初预期的事情。
  • 感谢您的建议。不幸的是,MIDI-OX 收到的所有数据都是错误的,我看不到模式。我怀疑我在 PySerial 上做错了什么,但我不知道是什么。要么是那个,要么是我的 USB-MIDI 接口有缺陷,但我没有 MIDI 乐器要检查。
  • 所以如果你一遍又一遍地发送同样的东西,它会改变吗?也许是一些松动的电压或电线?
  • 不,这每次都会产生相同的输出。当我说我看不到模式时,我的意思是我看不到数据中的一致错误。例如,如果所有数据都是正确值的一半。相反,我发送的每个值似乎都是随机错误的。
  • 我会从x000000 开始数到xFFFFFF,然后我会再次这样做,看看是否有任何变化。如果没有任何改变,那么我会将按钮“映射”到值。

标签: python serial-port raspberry-pi midi pyserial


【解决方案1】:

刚开始一个类似的项目,我指的是你的评论:

很遗憾,MIDI-OX 收到的所有数据都是错误的,我看不到模式。我怀疑我在 PySerial 上做错了什么,但我不知道是什么。

据我了解,对于 Raspi,MIDI 波特率设置并不是那么简单,请参阅 https://zuzebox.wordpress.com/2014/06/26/raspberry-pi-minipiio-midi-board/

也许您的设置稍微不同步,因此只能产生“几乎”正确但有些不稳定的 MIDI 数据,并且需要调整波特率才能使事情正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多