有没有人知道在Linux上双向转储MIDI SysEx数据的好方法? (在雅马哈PSR-E413 MIDI键盘和运行在Wine中的Yamaha MusicSoft Downloader副本之间)
我想对用于将MIDI文件复制到键盘内部存储器的协议进行反向工程,为此,我需要对两者之间的有效交换进行一些记录。
该实用程序在Wine(with a little nudging)中有效,但我不想在使用FUSE文件系统时依赖Wine中廉价,无法编写脚本的应用程序。
以下是目前的状况:
snd-seq-dummy
工作。答案 0 :(得分: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许可证)
答案 1 :(得分:0)
我喜欢使用aseqdump
。
答案 2 :(得分: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 Through Port-0:B
读取MIDI数据,并将数据写入Midi Through Port-0:B
。
一些其他提示:您可以使用图形前端patchage
通过拖放来连接和检查MIDI连接。如果这样做,您将看到每个Midi Through
端口出现两次作为输入,一次出现作为输出。两者都必须连接才能使此设置正常工作。
如果您要使用GMidiMonitor或其他应用程序,则可以使用aconnect
监视两个混合在一起的流(不显示方向),假设129:0
是Midi Monitor
端口:
$ aconnect 14:0 129:0
$ aconnect 132:0 129:0
如果要获得确切的方向信息,可以添加另一个仅连接到其中一个端口的GMidiMonitor实例。丢失的消息来自另一个端口。
答案 3 :(得分:-1)
使用gmidimonitor怎么样?见http://home.gna.org/gmidimonitor/