将 Ubuntu 设备检测为 Windows 中的 MIDI 键盘/接口

Posted

技术标签:

【中文标题】将 Ubuntu 设备检测为 Windows 中的 MIDI 键盘/接口【英文标题】:Detect Ubuntu device as a MIDI keyboard/Interface in Windows 【发布时间】:2015-07-04 14:53:25 【问题描述】:

我正在使用 Ubuntu 15.04 Lite 在我的 Odroid XU3 上创建一个小实验应用程序。 http://dn.odroid.com/homebackup/201407071058089142.jpg

设备 (Odroid) 通过一个可用 USB 主机端口连接的键盘接收 MIDI 作为输入(这部分没问题),并向计算机发送一些其他 MIDI 指令(也通过 USB,但 USB OTG)以创建和谐(这部分不行)。

用例是: 您在 midi 键盘上弹奏一些音符,odroid 收到它们,嵌入式应用程序代码分析它们,找到新音符(midi 指令)并将它们发送到您的 Windows PC,您可以将它们植根到您选择的 VST。

我遇到的问题是,为了实现这一点,我需要 Odroid 设备在 Windows 中显示为 MIDI 键盘,人们可以将设备添加到他们的数字音频工作站中。

市场上出售的大多数 MIDI 控制器都有自己的驱动程序,但有些是符合类标准的设备。

如何让 Windows 将这个 Odroid 板检测为 MIDI 键盘?如果我需要为此编写特定的驱动程序,从哪里开始?

编辑:找到 g_midi 驱动程序,但没有找到 usb_f_midi

odroid@odroid:/lib/modules/3.10.72-23/kernel/drivers/usb/gadget$ ls -al
total 628   
drwxr-xr-x 2 root root  4096 May 23 21:28 .   
drwxr-xr-x 8 root root  4096 May 23 21:27 ..  
-rw-r--r-- 1 root root 37544 May 23 21:11 g_acm_ms.ko  
-rw-r--r-- 1 root root 17468 May 23 21:11 g_audio.ko  
-rw-r--r-- 1 root root 24164 May 23 21:11 g_cdc.ko  
-rw-r--r-- 1 root root 44488 May 23 21:11 g_ether.ko  
-rw-r--r-- 1 root root 63552 May 23 21:11 g_ffs.ko  
-rw-r--r-- 1 root root 16672 May 23 21:11 g_hid.ko  
-rw-r--r-- 1 root root 37084 May 23 21:11 g_mass_storage.ko  
-rw-r--r-- 1 root root 17468 May 23 21:11 g_midi.ko  
-rw-r--r-- 1 root root 69752 May 23 21:11 g_multi.ko  
-rw-r--r-- 1 root root 28164 May 23 21:11 g_ncm.ko  
-rw-r--r-- 1 root root 35396 May 23 21:11 g_nokia.ko  
-rw-r--r-- 1 root root 20944 May 23 21:11 g_printer.ko  
-rw-r--r-- 1 root root  9016 May 23 21:11 g_serial.ko  
-rw-r--r-- 1 root root 26628 May 23 21:11 g_webcam.ko  
-rw-r--r-- 1 root root 11408 May 23 21:11 g_zero.ko  
-rw-r--r-- 1 root root 25380 May 23 21:11 gadgetfs.ko  
-rw-r--r-- 1 root root 45940 May 23 21:11 libcomposite.ko  
-rw-r--r-- 1 root root 15244 May 23 21:11 u_serial.ko  
-rw-r--r-- 1 root root  9972 May 23 21:11 usb_f_acm.ko  
-rw-r--r-- 1 root root  8060 May 23 21:11 usb_f_obex.ko  
-rw-r--r-- 1 root root  6928 May 23 21:11 usb_f_serial.ko  
-rw-r--r-- 1 root root 14584 May 23 21:11 usb_f_ss_lb.ko  

第二次编辑:感谢 CL 尝试 g_midi 驱动

odroid@odroid:/proc/asound$ cat cards
0 [odroidaudio ]: odroid-audio - odroid-audio odroid-audio 
1 [MPK225 ]: USB-Audio - MPK225 Akai MPK225 at usb-12110000.usb-1.2, full speed 
2 [K61 ]: USB-Audio - Keystation 61 M-Audio Keystation 61 at usb-12110000.usb-1.3, full speed.

$ modprobe g_midi in_ports=1 out_ports=1

错误:

modprobe : ERROR : could not insert 'g_midi' : Device Or Ressource busy.

与其他端口(3,4 等)相同的错误

移除 Midi 键盘时:

odroid@odroid:/proc/asound$ cat cards
0 [odroidaudio ]: odroid-audio - odroid-audio odroid-audio 

$ modprobe g_midi in_ports=1 out_ports=1

同样的错误:

modprobe : ERROR : could not insert 'g_midi' : Device Or Ressource busy.

【问题讨论】:

Linux 有一个用于 USB MIDI (usb_f_midi.ko) 的小工具驱动程序,但我不知道它是否在您的 Ubuntu 中启用。 感谢您的回答。和blackfin.uclinux.org/doku.php?id=linux-kernel:usb-gadget:midi一样吗? g_midi 是旧版本。但是您首先需要一个实际启用它的内核。 谢谢 CL。我会先用我的实际内核尝试一下,看看它是否已启用。 编辑了帖子,发现了一些驱动程序。 【参考方案1】:

只需加载g_midi 模块:

$ modprobe g_midi in_ports=1 out_ports=1

(1 和 1 是默认值。)

这将创建一个类兼容的 USB MIDI 接口,它在 Odroid 上就像普通声卡一样可见:

$ cat /proc/asound/cards
 0 [whatever       ]: ...
 1 [gmidi          ]: MIDI Gadget - g_midi
                      MIDI Gadget

...并且可以使用普通的 Linux MIDI API 访问。

【讨论】:

编辑了我的第一篇文章。设备或资源繁忙错误 我不知道XU3的OTG控制器的局限性。 g_serialg_ether 工作吗? modprobe g_serial 不返回任何错误,而 modprobe g_ether 返回:没有这样的设备。我不明白的是如何定位 OTG 端口(Odroid 作为从设备)而不是 USB 主机端口(用作键盘的主机输入,odroid 作为主机) 在我输入 modprobe g_serial 并通过 USB/USB OTG 将 Windows PC 连接到 Odroid 后,它确实显示为 Windows 正在尝试安装驱动程序。 Gadget Serial v2.4 可以在 Windows 中的未知设备中找到 在设备的属性上写着 Port #0003 Hub #0001 (On Windows)

以上是关于将 Ubuntu 设备检测为 Windows 中的 MIDI 键盘/接口的主要内容,如果未能解决你的问题,请参考以下文章

任何用于检测 MTP 设备的 Windows API?

从 bash 脚本检测“Windows 上的 Ubuntu”与本机 Ubuntu [重复]

Ubuntu18.04部署RAID 10磁盘阵列

ubuntu检测不到无线网卡

挂载错误(6):共享windows文件夹到ubuntu时没有这样的设备或地址

ubuntu检测鼠标键盘是否活动