Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux ALSA MIDI SysEx交换机上的双向嗅探/窥探_Linux_Midi_Alsa_Wine_Sniffing - Fatal编程技术网

Linux ALSA MIDI SysEx交换机上的双向嗅探/窥探

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转储程序/窥探器是可能的,但如果可

有人知道在Linux上双向转储MIDI SysEx数据的好方法吗?(雅马哈PSR-E413 MIDI键盘和雅马哈葡萄酒版之间)

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

该实用程序在Wine()中确实可以工作,但我不想在可以使用FUSE文件系统的情况下依赖Wine中廉价的、不可编写脚本的应用程序

以下是目前的情况:

  • 我的键盘通过内置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都不支持双向窥探。”应用程序支持双向还是单向窥探(至少在某些情况下)无关紧要看到我的答案了吗?那个主页