在Android上通过USB发送MIDI消息

时间:2012-02-01 20:30:41

标签: android usb message midi

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

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

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

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

提前感谢您的帮助

3 个答案:

答案 0 :(得分:11)

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

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

Screenshot showing USB selection menu

应用程序可以使用new 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);

要发送其他消息类型,请参阅MIDI message specification。请注意,字节用Java签名this post might be helpful

答案 1 :(得分: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/

答案 2 :(得分:3)

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

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

要做你提出的建议,你需要通过USB模拟一个设备...完成适当的PnP ID,什么不是。这几乎是不可能的。您找到的代码是在主机模式下使用USB,而不是相反。

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