2012-02-01 97 views
5

MIDI信息,我想就在Android其通过USB发送MIDI信息到电脑上能够控制音乐软件如Cubase,FL,究其原因,ECT的应用...通过USB发送的Android

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

我希望能够将我的手机/平板电脑用作MIDI控制器,而不必在电脑上安装人员(如使用硬件控制器)。

Android开发人员通过USB控制导弹发射器玩具上有一个演示代码。如果我使用相同的技术发送符合MIDI协议的消息,它会如何工作?

在此先感谢您的帮助

回答

3

不,它不能像那样工作。

USB MIDI设备确实使用驱动程序......只不过它们一般都是“符合类”,并且都可以使用与操作系统一起提供的相同库存驱动程序。

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

您会发现通过网络发送MIDI更容易,并且使用许多可用的网络MIDI驱动程序之一。

+0

感谢您的回答,所以唯一的解决方案是通过Wifi或蓝牙发送消息,并在计算机端有一个软件将其翻译并发送给音乐软件?但是,你是否知道TouchDaw如何直接与本地MIDI驱动程序一起工作,并且能够通过USB发送消息?谢谢 – Jecimi 2012-02-01 20:50:01

+1

对不起,TouchDAW确实使用驱动程序。那么如果真的不可能像USB设备那样工作,那么我就会这么做。谢谢 ! – Jecimi 2012-02-01 21:03:48

7

我为Android写了USB MIDI Driver。
用于构建您自己的MIDI控制器/接收器。

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

的另一个MIDI驱动程序 'NMJ' 库。
该库还支持USB MIDI。此外,它支持一些网络MIDI协议,蓝牙MIDI和ADB上的MIDI(调试连接)。

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

+1

你能扩展你的答案,并写一个示例代码来发送一个MIDI消息使用你的lib?看来你最近删除了你的javax.sound实现文档。这个库有没有问题,还是仍然有效? – gaborous 2013-10-18 00:17:36

+0

@kshoji:Eclipse的源代码? – 2015-02-17 09:58:12

+0

@kshoji你知道这个功能是否会包含在android支持库中(用于早期设备的retrocompability)? – Billyjoker 2015-09-21 14:49:43

10

借助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

+0

就像@ kshoji所说的那样,你可以从Android 2.2开始发送midi,而不是真的需要Android 6.0吗? – Billyjoker 2015-12-01 15:20:12