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

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

该实用程序确实可以在Wine(with a little nudging)中运行,但是当我可以使用FUSE文件系统时,我不想依靠Wine中一个便宜的,无法编写脚本的应用程序。

这是当前的状态:

  • 我的键盘通过内置的USB-MIDI桥连接到PC。 USB翻斗车/窥探器是可能的,但我希望尽可能避免使用它们。在开始之前,我不需要解码另一层协议(protocol)编码。
  • 我只运行Linux。但是,如果除了基于Windows的转储程序/窥探器之外别无选择,我可以尝试在WinXP VirtualBox VM上使用USB 1.1直通。
  • 我使用dmix为音频系统运行裸机ALSA,以进行波形音频混合。
  • 如果需要声音服务器,我愿意尝试JACK。
  • 请不要使用PulseAudio。从我的系统中删除它花费了足够长的时间。
  • 如果该过程涉及ALSA MIDI路由:

    首选
  • ,我可以从Downloader内选择一个虚拟的直通设备,因为它通常只出现在ALSA跳线GUI中,就像patchage一样,在它开始与键盘通信之前的瞬间。
  • 据我所知,KMIDIMonGMIDIMonitor都不支持双向监听。
  • virmidi isn't relevant和我没有设法使snd-seq-dummy工作。
  • 我想我真的可以对ALSA进行补丁以获取转储,但这实际上是最后的选择。
  • 我的绝大多数编程经验是使用Python,PHP,Javascript和Shell脚本。
  • 我几乎没有使用C编程的经验。
  • 我什至从未见过内核模式代码。
  • 我希望保持系统稳定和正常运行时间较长。
  • 最佳答案

    这个问题已经有一段时间没有得到解答了,虽然我没有确切的答案可以解决我的问题,但我也许会提出一些可以帮助您朝正确方向发展的东西(或者其他有类似问题的人)。

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

    由于缺乏现有的解决方案,我在VirMidi端口上使用ALSA MIDI路由进行了滚动。我了解您为什么认为它们无用,因为如果没有其他软件,它们将无助于监听MIDI流量。

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

    我只处理大约20字节长的SysEx消息,所以我不确定该软件如何监听大量数据的传输。但是也许您可以按照示例修改它/编写自己的程序。

    可用资源在这里:https://github.com/hiben/MIDISpy

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

    08-04 16:38