Android から USB MIDI 機器を制御する ( Note On )


20140105usb_midi_sampl1_not_connect

Android から USB MIDI 機器を制御します。
Note On を使って音を鳴らします。
Android 端末の USB HOST 機能を使っています。

ソースコードは Google Code に置いています。

MIDI の簡単な説明
Note On メッセージを使って、音を鳴らします。
Note Off メッセージを使って、鳴らした音を止めます。
Note On は、3バイト構成で、status ( 0×90 ) + channel、note、velocity です。
channel は、楽器の選択に使用しますが、このサンプルでは 0 固定です。
velocity は、音量ですが、このサンプルでは 127 (最大) 固定です
note は、音階の番号です。例えば、 60 は C (ド) の音です。

※ velocity の原義は速度です。
打鍵の速さが、音の大きさに比例するので、この名称になっているのかな。

USB MIDI の簡単な説明
MIDIメッセージをUSBで送信するには、先頭に CIN + cable を付加して、4バイト区切りにします。
CIN (Code Index Number ) は、Note On では 0×90 です。
cable は、複数の MIDI 機器を接続したときのケーブルの番号ですが、このサンプルでは 0 固定です。

20140105usb_midi_structure

ソースコードの簡単な説明
(1) UI としてピアノの鍵盤を模したボタンを用意しています。
例えば、C にタッチすると、C (ド) の音が出ます。

(2) Android 端末に USB MIDI 機器を接続します。
(2-1) アクセス許可のポップアップ画面が表示されます。
UsbManager#requestPermission を使用しています。
(2-2)「OK」をクリックして、許可します。
BroadcastReceiver で受け取ります。
(2-3) MIDI 機器であることを確認します。
Class は Audio Devices (1)、Subclass は MIDI Streaming (3) です。
(2-4) 接続されると、coneccted という表示に変わります。

20140105usb_midi_sampl1_permission
20140105usb_midi_sampl1_connected

(3) 鍵盤にタッチすると、MIDI 機器から音が出ます。
(3-1) MIDI メッセージの Note On で音を鳴らして、Note Off で止めます。
note は、鍵盤に対応していて、C は 60 です。
(3-2) MIDI メッセージを 4バイト区切りの USB MIDI の形式に変換します。
(3-3) この4バイトを UsbRequest#queue で送信します。

参考
MIDI Messages – midi.org
Universal Serial Bus Device Class Definition for MIDI Devices – usb.org
MIDI – wikipedia


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です