在Android上通过USB发送MIDI消息

Jec*_*imi 7 usb midi android message

我想在android上制作一个应用程序,它通过USB将MIDI信息发送到计算机,以便能够控制音乐软件,如Cubase,FL,Reason等...

硬件MIDI控制器(例如键盘)在Windows上的音乐软件中自动识别.我猜这是因为他们使用的是通用音乐软件直接识别的通用MIDI协议.他们不需要自己的司机.

我希望能够将我的手机/平板电脑用作midi控制器,而无需在计算机上安装人员(如硬件控制器).

在Android开发者上有一个演示代码,用于通过USB控制导弹发射器玩具.如果我发送,使用相同的技术,遵循MIDI协议的消息它会像那样工作吗?

预先感谢您的帮助

don*_*ner 12

使用Android 6.0(API 23),现在可以实现 - Android设备可以充当类兼容(无需驱动程序)MIDI设备.

要切换到USB-MIDI模式,用户可以从屏幕顶部向下滑动以访问USB模式选择屏幕(如下).

屏幕截图显示USB选择菜单

应用程序可以使用新的MIDI API发送MIDI消息.这是发送MIDI NoteOn消息的一些代码:

byte[] buffer = new buffer[3];
buffer[0] = (byte)0x90 + (byte)0x01; // Note On - Channel 1
buffer[1] = (byte)0x3C; // pitch (Note C3)
buffer[2] = (byte)127; // velocity
int offset = 0;
inputPort.send(buffer, offset, numBytes);
Run Code Online (Sandbox Code Playgroud)

要发送其他消息类型,请参阅MIDI消息规范.请注意,字节是用Java签名的,所以这篇文章可能会有所帮助.


小智 7

我为Android编写了USB MIDI驱动程序.
用于构建自己的MIDI控制器/接收器.

https://github.com/kshoji/USB-MIDI-Driver

另一个midi驱动程序是'nmj'库.
该库还支持USB MIDI.此外,它支持一些网络MIDI协议,MIDI over Bluetooth和MIDI over ADB(调试连接).

http://www.humatic.de/htools/nmj/


Bra*_*rad 3

不,它不能像那样远程工作。

USB MIDI 设备确实使用驱动程序...只是它们通常是“类兼容”的,并且都可以使用操作系统附带的相同库存驱动程序。

为了完成您所建议的操作,您需要通过 USB 模拟设备...并提供适当的 PnP ID 等。这几乎是不可能的。您找到的代码是在主机模式下使用 USB 的,而不是相反。

您会发现通过网络发送 MIDI 并使用众多可用的网络 MIDI 驱动程序之一要容易得多。