2012-02-01 34 views
5

Cubase、FL、Reasonなどの音楽ソフトを制御できるように、USB経由でMIDIメッセージを送信するアンドロイドのアプリを作りたいと考えています。AndroidでUSB経由でMIDIメッセージを送信する

ハードウェアMIDIコントローラ(キーボードなど)は、Windows上の音楽ソフトウェアで自動的に認識されます。私は音楽ソフトウェアによって直接認識されるユニバーサルMIDIプロトコルを使うからだと思います。彼らは自分のドライバーは必要ありません。

(ハードウェアコントローラのように)コンピュータにスタッフをインストールすることなく、電話機/タブレットをMIDIコントローラとして使用したいと考えています。

USB経由でMissile Launcherのおもちゃを制御するデモコードがAndroidデベロッパーにあります。同じテクニックを使用してMIDIプロトコルを送信すると、そのように動作しますか?

ご協力いただきありがとうございます

答えて

3

いいえ、それは遠隔地では動作しません。

USB MIDIデバイスはドライバを使用します...一般に「クラス準拠」であり、OSに付属の同じストックドライバをすべて使用できます。

あなたが提案していることをするには、USB経由でデバイスをエミュレートする必要があります...適切なPnP IDで完了していないものとそうでないものこれは不可能の隣にあります。あなたが見つけたコードは、ホストモードでUSBを使用するためのものであり、それ以外の方法ではありません。

あなたは、ネットワーク経由でMIDIを送信する方がはるかに簡単であり、利用可能な多くのネットワークMIDIドライバの1つを使用することがわかります。

+0

あなたの答えをありがとう、唯一の解決策は、WifiまたはBluetoothを介してメッセージを送信し、それらを翻訳して音楽ソフトウェアに送信するコンピュータ側のソフトウェアを持っていますか?しかし、TouchDawがどのようにネイティブのMIDIドライバと直接動作し、usb経由でメッセージを送信できるか考えていますか?ありがとう – Jecimi

+1

申し訳ありませんが、TouchDAWはドライバを使用します。 USB経由のデバイスのように振る舞うことが本当に不可能なのであれば、私はそのように行くつもりです。ありがとう! – Jecimi

7

私はAndroid用USB MIDIドライバを作成しました。
独自のMIDIコントローラー/レシーバーを構築するのに便利です。

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

他のMIDIドライバは 'NMJ' ライブラリです。
このライブラリはUSB MIDIにも対応しています。さらに、いくつかのネットワークMIDIプロトコル、MIDI over BluetoothおよびMIDI over ADB(デバッグ接続)をサポートしています。アンドロイド6.0(API 23)で

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

+1

あなたの答えを拡張し、libを使ってMIDIメッセージを送信するためのサンプルコードを書くことができますか?最近あなたのjavax.sound実装のドキュメントを削除したようです。このlibに問題がありますか、それともまだ機能していますか? – gaborous

+0

@kshoji:Eclipseのソースコードはありますか? –

+0

@kshojiあなたはこの機能がアンドロイドサポートライブラリに含まれるかどうかを知っています(以前のデバイスとの互換性のために)??? – Billyjoker

10

これが可能になりました - Androidデバイスクラスに準拠し(何のドライバは必要ありません)MIDIデバイスとして機能することができます。

USB-MIDIモードに切り替えるには、画面上部から下にスワイプして、USBモード選択画面(下記)にアクセスします。

Screenshot showing USB selection menu

アプリはnew MIDI APIを使用してMIDIメッセージを送信することができます。 MIDI message specificationに相談し、他のメッセージタイプを送信するには

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 NoteOnメッセージを送信するためにいくつかのコードです。バイトはJavaで署名されているので、this post might be helpfulに注意してください。

+0

@kshojiと同じように、Android 2.2以降からmidiを送信できますが、Android 6.0は必要ありません。 – Billyjoker

関連する問題