Linux ALSA MIDI SysEx交换机上的双向嗅探/窥探
有人知道在Linux上双向转储MIDI SysEx数据的好方法吗?(雅马哈PSR-E413 MIDI键盘和雅马哈葡萄酒版之间) 我想对用于将MIDI文件复制到键盘内存和从键盘内存复制MIDI文件的协议进行反向工程,为此,我需要对两者之间的有效交换进行一些记录 该实用程序在Wine()中确实可以工作,但我不想在可以使用FUSE文件系统的情况下依赖Wine中廉价的、不可编写脚本的应用程序 以下是目前的情况:Linux ALSA MIDI SysEx交换机上的双向嗅探/窥探,linux,midi,alsa,wine,sniffing,Linux,Midi,Alsa,Wine,Sniffing,有人知道在Linux上双向转储MIDI SysEx数据的好方法吗?(雅马哈PSR-E413 MIDI键盘和雅马哈葡萄酒版之间) 我想对用于将MIDI文件复制到键盘内存和从键盘内存复制MIDI文件的协议进行反向工程,为此,我需要对两者之间的有效交换进行一些记录 该实用程序在Wine()中确实可以工作,但我不想在可以使用FUSE文件系统的情况下依赖Wine中廉价的、不可编写脚本的应用程序 以下是目前的情况: 我的键盘通过内置USB-MIDI桥接器连接到电脑。USB转储程序/窥探器是可能的,但如果可
- 我的键盘通过内置USB-MIDI桥接器连接到电脑。USB转储程序/窥探器是可能的,但如果可能的话,我宁愿避免它们。在我开始之前,我不想再解码另一层协议编码
- 我只运行Linux。但是,如果除了基于Windows的转储程序/窥探器之外真的没有其他选择,我可以尝试在我的WinXP VirtualBox VM上使用USB 1.1
- 我为我的音频系统运行裸ALSA,使用dmix进行波形音频混合。
- 如果需要一个声音服务器,我愿意用杰克做实验
- 请不要用PulseAudio。从我的系统中删除它花了足够长的时间
- 如果该过程涉及ALSA MIDI路由:
- 我可以从下载器内部选择虚拟直通设备是首选,因为它通常只出现在ALSA补丁盒GUI中,就像它开始与键盘通信之前的瞬间一样
- 据我所知,他们都不支持双向窥探
- virmidi和我还没有设法让
工作snd-seq-dummy
- 我想如果我真的必须的话,我可以给阿尔萨打补丁,让它变得更糟,但这确实是最后的选择。
- 我的大部分编程经验都是Python、PHP、Javascript和shell脚本
- 我几乎没有C语言编程的经验
- 我甚至从未见过内核模式代码
- 我更喜欢保持我的系统稳定和正常运行时间高
- 这个问题已经有一段时间没有答案了,虽然我对你的问题没有确切的答案,但我可能有一些东西可以把你推向正确的方向(或者其他有类似问题的人)
当我想要嗅探用于在Akai LPK25 MIDI键盘上设置和读取预设值的数据时,我遇到了一个类似但不太复杂的问题。与您的设置类似,用于设置键盘的软件可以在Wine中运行,但我也没有在Linux中找到嗅探器设置
由于缺乏现有的解决方案,我在virmidi端口上使用ALSA MIDI路由推出了自己的解决方案。我理解为什么你认为它们没用,因为没有额外的软件,它们无法帮助嗅探MIDI流量
我的解决方案是用Java编程一个MIDI中继/桥接器,在这里我从一个virmidi端口读取输入,显示数据并将其进一步发送到键盘。来自键盘的答案(如果有的话)也会被读取、显示并最终传输回virmidi端口。Wine中的应用程序可以设置为使用virmidi端口进行通信,理论上这个过程是完全透明的(除了潜在的延迟问题)。应用程序是以通用方式编写的,而不是针对我的问题进行硬编码
我只处理大约20字节长的SysEx消息,因此我不确定该软件在嗅探大量数据传输方面的工作情况如何。但是也许你可以按照这个例子修改它/编写你自己的程序
资料来源如下:
(Java 1.6,包括ant构建文件,源代码在BSD许可下)使用gmidimonitor怎么样?请参见我喜欢使用
aseqdump
您可以使用虚拟midi设备来实现此目的。因此,您必须加载
snd_seq_dummy
,以便它至少创建两个端口:
$ sudo modprobe -r snd_seq_dummy
$ sudo modprobe snd_seq_dummy ports=1 duplex=1
然后您应该有一个名为Midi的设备,通过:
$ 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:
$ aconnect 132:0 14:0
$ aconnect 14:0 131:0
此时,您有一个可以同时监视两台设备的连接。您可以使用aseqdump
监视MIDI对话。有不同的可能性。我建议监视环回设备和真实设备之间的连接。这允许您将rawmidi连接到环回设备
$ aseqdump -p 14:0,132:0 | tee dump.log
现在一切都准备好了。您只需小心MIDI应用程序中的端口名。它应该通过端口-0:B从MIDI读取MIDI数据,并通过端口-0:B将数据写入MIDI
一些额外提示:您可以使用图形前端补丁
通过拖放连接和检查MIDI连接。如果您这样做,您将看到每个通过
端口的Midi出现两次,一次作为输入,一次作为输出。两者都必须连接才能使此设置正常工作
如果您想使用GMidiMonitor或其他应用程序,您可以使用aconnect
监视混合的两个流(不显示方向),假设129:0
是Midi监视器
端口:
$ aconnect 14:0 129:0
$ aconnect 132:0 129:0
如果希望获得确切的方向信息,可以添加另一个仅连接到其中一个端口的GMidiMonitor实例。丢失的消息来自另一个端口。谢谢。一旦我不再为刚刚开始的新学期课程而不知所措,我将尝试一下。正如问题中所说,“就我所知,KmidMon和GmidMonitor都不支持双向窥探。”应用程序支持双向还是单向窥探(至少在某些情况下)无关紧要看到我的答案了吗?那个主页