首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ALSA MIDI SysEx交换机上双向嗅探/窥探

在ALSA MIDI SysEx交换机上双向嗅探/窥探
EN

Stack Overflow用户
提问于 2012-04-18 23:17:57
回答 4查看 2.9K关注 0票数 5

有谁知道在Linux上获得MIDI SysEx数据双向转储的好方法吗?(在雅马哈PSR-E413 MIDI键盘和运行在葡萄酒中的雅马哈MusicSoft下载器的副本之间)

我想反向工程的协议,用于复制MIDI文件到和从我的键盘的内部内存,为此,我需要做一些有效的交换之间的记录。

该实用工具确实在葡萄酒(再轻轻一推)中工作,但当我使用FUSE文件系统时,我不想依赖于葡萄酒中一个廉价的、无脚本的应用程序。

以下是当前的状况:

  • 我的键盘通过内置的USB桥连接到我的电脑上.USB翻盖/窥探是一种可能性,但如果可能的话,我更愿意避免它们。在我开始之前,我不想再解码另一层协议编码。
  • 我只运行Linux。然而,如果真的没有其他选择,只有基于Windows的翻盖/窥探,我可以尝试通过USB1.1通过工作在我的WinXP VirtualBox虚拟机。
  • 我运行光ALSA用于我的音频系统和dmix用于波形音频混合。
    • 如果需要一个声音服务器,我愿意和JACK一起做实验。
    • 不需要PulseAudio。它花了足够长的时间从我的系统中切除它。

  • 如果该过程涉及ALSA路由:
    • 我可以从下载器内部选择一个虚拟通过设备是首选的,因为它通常只出现在像帕查奇这样的ALSA补丁包GUI中,然后才开始与键盘通信。
    • 据我所知,KMIDIMonGMIDIMonitor都不支持双向窥探。
    • virmidi 不相关和我还没有设法让snd-seq-dummy工作。

  • 我想,如果我真的需要的话,我可以补上ALSA的补丁,让它变胖,但这确实是最后的选择。
    • 我绝大多数的编程经验都是用Python、PHP、Javascript和shell脚本编写的。
    • 我几乎没有C语言编程的经验。
    • 我从来没有见过内核模式代码的一瞥。
    • 我宁愿保持我的系统稳定和正常运行时间高。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-07 00:34:16

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

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

由于缺乏现有的解决方案,我在virmidi端口上使用了ALSA路由。我理解你为什么认为它们是无用的,因为没有额外的软件,它们无法帮助嗅探MIDI的流量。

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

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

可在此获得的资料来源:https://github.com/hiben/MIDISpy

(Java1.6,包括ant构建文件,源代码在BSD许可下)

票数 4
EN

Stack Overflow用户

发布于 2015-03-27 17:43:07

我喜欢在这方面使用aseqdump

pages/aseqdump1.html

票数 1
EN

Stack Overflow用户

发布于 2020-02-28 16:15:33

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

代码语言:javascript
复制
    $ sudo modprobe -r snd_seq_dummy
    $ sudo modprobe snd_seq_dummy ports=1 duplex=1

那么您应该有一个名为Midi through的设备

代码语言:javascript
复制
    $ 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端口:

代码语言:javascript
复制
    $ aconnect 132:0 14:0
    $ aconnect 14:0 131:0

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

代码语言:javascript
复制
    $ 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:0Midi Monitor端口:

代码语言:javascript
复制
    $ aconnect 14:0 129:0
    $ aconnect 132:0 129:0

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10219487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档