USB midi 协议理解
Posted
技术标签:
【中文标题】USB midi 协议理解【英文标题】:USB midi protocol understanding 【发布时间】:2015-12-20 17:28:39 【问题描述】:我有一个带有 USB MIDI 接口的声音处理器设备。除了官方应用程序到设备之外,我还想从我的 PC 控制设备。但是我没有命令协议描述。 在 usbmon 的帮助下,我可以设法将几个 USB 数据包转储到设备上。他们看着像是: 0x0B 0xB0 0x00 0x00 0x0C 0xC0 0x05 0x00
如果我从我的应用程序发送此命令,则设备会激活程序 5。
该协议似乎是 MIDI,但如果我遵循它并尝试与设备的其他功能交互,我不会得到想要的结果。
所以,我正在寻求任何帮助以使其正常工作。例如,我需要学习如何选择效果或控制音量和其他参数。
问候, 德米特里
【问题讨论】:
您想使用哪个操作系统?设备不是显示为 MIDI 端口吗? 那是Linux。我不确定它是否被识别,操作系统非常有限。我更愿意在我的用户应用程序中使用协议级别的低级别访问,以减少对操作系统的依赖。 它是否出现在amidi -l
的输出中?如果没有,则显示此设备的lsusb -v
的输出。
“有限”是什么意思? USB MIDI 驱动程序是内核的一部分。
amidi -l 显示一个空行(带标题)
【参考方案1】:
您可以在 Universal Serial Bus Device Class Definition for MIDI Devices 和 MIDI 规范中找到您需要的内容。
您的示例由两个数据包组成,每个数据包都包含一个 MIDI 事件。它们可以解码如下:
cable: 0
event: control change
channel number: 0
controller number: 0 (bank select)
controller value: 0
cable: 0
event: program change
channel number: 0
program number: 5
【讨论】:
是的,非常感谢您的快速答复。你的解释是完全正确的。我已经从规范开始解码命令。但是,如果我想设置主音量的某个值,我无法从规范中获得如何构建命令。据我了解,它应该看起来像 0x0c 0x07 0xXX 0x00。但是我的设备做错了,而是将音量设置为 XX。我是否正确地发送了消息,或者我需要在它之前发送另一条消息?再次非常感谢!!! 感谢您的提示。我只是尝试将此消息发送到设备,但没有看到任何反应...音量仍保持在其旧值。也许我需要在这个之后再发送一些事件? 换句话说。我是否理解正确,消息 0x0B 0xB0 0x07 0xXX 应该立即导致一些变化,或者它需要按照我原来的顺序发送任何额外的消息? 这是改变频道音量的正确方法。您的设备(无论是什么设备)是否对此消息做出反应是另一个问题。 哦,我从另一方面问,只是为了更好地理解协议序列。如果我需要使用某个踏板进行操作。是不是我理解对了,用命令0x0B 0xB0 0x04 0xXX我只会选择某个Pedal控制器,然后我需要使用Program Change事件来操作某个Pedal?【参考方案2】:Zoom G3X 设备使用standard USB MIDI protocol。
但是,仅仅因为它使用 MIDI 消息并不能自动暗示您知道这些消息的含义。 还有其他标准,例如通用 MIDI,但是当设备不是“普通”合成器而是效果处理器时,大多数标准消息都没有意义。
要了解设备接受哪些 MIDI 消息,请查看文档。
如果消息没有被记录(例如在这种情况下,设备只能与提供的软件一起使用),您必须在设备上进行更改,并记录它发出的任何 MIDI 消息 ( amidi --dump
或 aseqdump
)。
如果设备没有发送消息来显示其当前状态的变化,您必须使用 USB 监视器捕获官方应用程序发送的消息(如 Linux 中的usbmon
)。
【讨论】:
以上是关于USB midi 协议理解的主要内容,如果未能解决你的问题,请参考以下文章