Android から USB MIDI 機器を制御する ( Program Change )


20140106usb_midi_sample2

Android から USB MIDI 機器を制御します。
Program Change を使って楽器を選択します。

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

MIDIの簡単な説明
MIDI には、16個のチャネルがあり、チャネル毎に楽器が選択できます。
Program Change メッセージを使って楽器が選択します。
Program Change は、2バイト構成で、status ( 0xC0 ) + channel、instrument です。
instrument は、楽器の番号で、General MIDI Level 1 Sound Set で規定されています。
チャネル9は、特別にパーカッションが割り当てられています。
音階はなく、note の35から81 に、異なるパーカッションが割り当てられています。
パーカッションの番号は、同じくGeneral MIDI Level 1 Sound Set で規定されています。

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

(2) 下段にパーカッションのボタンを用意しました。
ボタンの番号と楽器の対応は、Percussion Key Map と同じです。
例えば、60 にタッチすると、Hi Bongo の音が出ます。

(3) 上段のチャネル選択により、鍵盤の楽器を変更できます。
このサンプルでは、下記のように割り当てています。
ch 0 : デフォルト
ch 1 : Acoustic Piano
ch 2 : Vibraphone
ch 3 : Drawbar Organ
ch 4 : Acoustic Steel Guitar
ch 5 : Acoustic Bass,
ch 6 : Violin
ch 7 : String Ensemble 1
ch 8 : Trumpet
ch 9 : ※ Acoustic Piano
ch 10 : Tenor Sax
ch 11 : Flute
ch 12 : Banjo
ch 13 : Tinkle Bell
ch 14 : Lead Calliope
ch 15 : Pad Fantasia
※ ch 9 は、Percussion なので、ここを選択すると、ch 1 ( Acoustic Piano ) に変更をしている。

参考
General MIDI Level 1 Sound Set – midi.org
MIDI – wikipedia
General MIDI – wikipedia


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