在ALSA MIDI SysEx交换器上进行双向监听/监听

sso*_*low 5 linux midi wine sniffing alsa

有谁知道在Linux上双向获取MIDI SysEx数据的好方法吗?(在Yamaha PSR-E413 MIDI键盘和在Wine中运行的Yamaha MusicSoft下载器的副本之间)

我想对用于将MIDI文件复制到键盘内部存储器或从键盘内部存储器复制MIDI的协议进行反向工程,为此,我需要对两者之间的有效交换进行一些记录。

该实用程序确实可以在Wine中工作(稍加改动),但是当我可以使用FUSE文件系统时,我不想不得不依赖Wine中一个便宜的,无法编写脚本的应用程序。

这是当前的状态:

  • 我的键盘通过内置的USB-MIDI桥连接到PC。USB倾卸器/窥探器是可能的,但我希望尽可能避免使用它们。在开始之前,我不需要解码另一层协议编码。
  • 我只运行Linux。但是,如果除了基于Windows的转储程序/窥探器之外别无选择,我可以尝试在WinXP VirtualBox VM上使用USB 1.1直通。
  • 我为音频系统运行裸机ALSA,并为波形音频混合运行dmix。
    • 如果需要声音服务器,我愿意尝试JACK。
    • 请不要使用PulseAudio。从我的系统中删除它花费了足够长的时间。
  • 如果该过程涉及ALSA MIDI路由:
    • 我可以从Downloader内选择一个虚拟直通设备,因为它通常只出现在ALSA跳线架GUI中,就像补丁一样,它开始与键盘进行通讯之前就被选中了。
    • 据我所知,KMIDIMonGMIDIMonitor都不支持双向监听。
    • virmidi 是不相关的,我还没有设法得到snd-seq-dummy工作。
  • 我想我真的可以修补ALSA以获得转储,但这确实是不得已的选择。
    • 我的编程经验绝大多数是Python,PHP,Javascript和Shell脚本。
    • 我几乎没有用C编程的经验。
    • 我什至从未见过内核模式代码。
    • 我希望保持系统稳定和正常运行时间较长。

小智 4

这个问题已经有一段时间没有答案了,虽然我对你的问题没有确切的答案,但我也许有一些东西可以推动你走向正确的方向(或者也许其他有类似问题的人)。

当我想嗅探用于在 Akai LPK25 MIDI 键盘上设置和读取预设的数据时,我遇到了类似但不太复杂的问题。与您的设置类似,设置键盘的软件可以在 Wine 中运行,但我也没有找到适用于 Linux 的嗅探器设置。

由于缺乏现有的解决方案,我使用 ALSA MIDI 路由通过 virmidi 端口推出了自己的解决方案。我理解为什么您认为它们毫无用处,因为如果没有额外的软件,它们无法帮助嗅探 MIDI 流量。

我的解决方案是用 Java 编写 MIDI 中继/桥接器,从 virmidi 端口读取输入,显示数据并将其进一步发送到键盘。来自键盘的答案(如果有)也会被读取、显示并最终传输回 virmidi 端口。Wine 中的应用程序可以设置为使用 virmidi 端口进行通信,理论上这个过程是完全透明的(除了潜在的延迟问题)。该应用程序是以通用方式编写的,并未针对我的问题进行硬编码。

我只处理大约 20 字节长度的 SysEx 消息,因此我不确定该软件在嗅探大量数据传输方面的效果如何。但也许您可以按照示例修改它/编写自己的程序。

此处提供资源:https: //github.com/hiben/MIDISpy

(Java 1.6,包含 ant 构建文件,源代码在 BSD 许可下)