5

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

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

该实用程序确实可以在 Wine 中工作(稍微轻推),但是当我可以使用 FUSE 文件系统时,我不想在 Wine 中依赖廉价的、不可编写脚本的应用程序。

这是目前的情况:

  • 我的键盘通过内置的 USB-MIDI 桥接器连接到我的 PC。USB dumpers/snoopers 是可能的,但如果可能的话,我宁愿避免它们。在我开始之前,我不想再解码另一层协议编码。
  • 我只运行 Linux。但是,如果除了基于 Windows 的 dumper/snooper 之外别无选择,我可以尝试让 USB 1.1 直通在我的 WinXP VirtualBox VM 上工作。
  • 我为我的音频系统运行裸 ALSA,并使用 dmix 进行波形音频混合。
    • 如果需要声音服务器,我愿意尝试 JACK。
    • 请不要使用PulseAudio。从我的系统中删除它花了足够长的时间。
  • 如果该过程涉及 ALSA MIDI 路由:
  • 我想如果我真的必须的话,我可以修补 ALSA 以获得转储,但这确实是最后的选择。
    • 我的绝大多数编程经验是 Python、PHP、Javascript 和 shell 脚本。
    • 我几乎没有 C 编程经验。
    • 我什至从未见过内核模式代码的一瞥。
    • 我更愿意保持我的系统稳定和我的正常运行时间高。
4

4 回答 4

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 许可下)

于 2012-09-07T00:34:16.427 回答
1

我喜欢用aseqdump它。

http://www.linuxcommand.org/man_pages/aseqdump1.html

于 2015-03-27T17:43:07.517 回答
0

为此,您可以使用虚拟 MIDI 设备。所以你必须加载snd_seq_dummy以便它创建至少两个端口:

    $ sudo modprobe -r snd_seq_dummy
    $ sudo modprobe snd_seq_dummy ports=1 duplex=1

然后你应该有一个名为的设备Midi through

    $ aconnect -i -o -l
    client 0: 'System' [type=kernel]
        0 'Timer           '
        1 'Announce        '
    client 14: 'Midi Through' [type=kernel]
        0 'Midi Through Port-0:A'
        1 'Midi Through Port-0:B'
    client 131: 'VMPK Input' [type=user,pid=50369]
        0 'in              '
    client 132: 'VMPK Output' [type=user,pid=50369]
        0 'out             '

我将从这个例子中获取端口和设备号。您必须根据您的设置自行检查它们。

现在您将您喜欢的 MIDI 设备插入Midi Through端口:

    $ aconnect 132:0 14:0
    $ aconnect 14:0 131:0

此时你有一个连接,你可以同时监视两个设备。你可以aseqdump用来监视 MIDI 对话。有不同的可能性。我建议监视环回设备和真实设备之间的连接。这允许您将 rawmidi 连接到环回设备。

    $ aseqdump -p 14:0,132:0 | tee dump.log

现在一切都准备好使用了。您只需要注意 MIDI 应用程序中的端口名称。它应该读取 MIDI 数据Midi Through Port-0:B并将数据写入Midi Through Port-0:B.

一些额外的提示:您可以使用图形前端patchage通过拖放来连接和检查 MIDI 连接。如果您这样做,您将看到每个Midi Through端口出现两次,一次作为输入,一次作为输出。两者都必须连接才能使此设置正常工作。

如果您想使用 GMidiMonitor 或其他一些应用程序,您可以使用假设端口监视​​混合的两个流(不显示方向aconnect):129:0Midi Monitor

    $ aconnect 14:0 129:0
    $ aconnect 132:0 129:0

如果您想获得准确的方向信息,您可以添加另一个仅连接到其中一个端口的 GMidiMonitor 实例。丢失的消息来自另一个端口。

于 2020-02-28T16:15:33.027 回答
-1

使用 gmidimonitor 怎么样?见http://home.gna.org/gmidimonitor/

于 2012-12-29T22:47:12.903 回答