MIDIをJavaを経由で利用するにあたってまずやることは自分のPC上で使えるMIDIのデバイスを調べることです。
デバイスの種類
認識されるデバイスには次のようなものがあります。
シンセサイザー
MIDI信号を受け取りオーディオ情報に変換するものです。Javaではデフォルトで一つシンセサイザーが内臓されています。
またUSBでPCに接続されている外付けの実物のシンセサイザーやインストールされ起動されているソフトウェアシンセサイザーなども認識されます。最近はソフトウェアシンセサイザーのほうが手軽で流通していますがJavaが使えるかどうかは調べる必要があります。
Garritanのソフトウェア音源に付属しているARIA PlayerはMAC上のJavaで認識させることができました。
MIDIコントローラー
MIDI信号を発生させ送信するものです。USBで接続されたMIDIキーボードなどです。コントローラーは他にも笛の形をしているものやドラム用のパッドやミックス用のコンソールなどがあります。たいていの場合はドライバーが必要なので自分のPCに合うドライバーがメーカーに用意されているか調べてから購入するようにしてください。
MIDIインタフェース
MIDIの一番最初の規格では各機材はMIDIケーブルで接続されていました。PCにMIDIケーブルを接続するにはMIDIインタフェースが必要になります。こちらもドライバーが必要なものもあるので自分のPCに合うドライバーがメーカーに用意されているか調べてから購入するようにしてください。
デバイスを調べる
ではデバイスを調べていきます。以下のようなコードを実行します。
- MidiSystemに全てのデバイス情報を問い合わせる
- 各デバイスについて以下の情報を取得して表示
- 名前
- バージョン
- ベンダー
- 詳細な記述
- 各デバイスの受信と送信のための可能最大接続数を取得して表示
import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiSystem; import javax.sound.midi.MidiUnavailableException; public class MidiUtil { public static void printMidiDevices(){ MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo(); System.out.println("MidiDevice.Info : " + infos.length + " item(s)"); for (int i = 0; i < infos.length; i++) { System.out.println(" MidiDevice.Info[" + i + "]"); System.out.println(" Name : " + infos[i].getName()); System.out.println(" Version : " + infos[i].getVersion()); System.out.println(" Vendor : " + infos[i].getVendor()); System.out.println(" Description : " + infos[i].getDescription()); MidiDevice device; try { device = MidiSystem.getMidiDevice(infos[i]); } catch (MidiUnavailableException ex) { throw new IllegalStateException(ex); } System.out.println(" Receivers : " + device.getMaxReceivers()); System.out.println(" Transmitters : " + device.getMaxTransmitters()); } } public static void main(String[] args){ printMidiDevices(); } }
以下実行結果です。表示される一覧はPCやOSによって変わります。以下の結果はMacのものです。
Receiversつまり受信可能最大接続数やTransmitterつまり送信可能最大接続数の-1は「システムが許す限り無制限」を意味します。0の場合は受け付けないことを意味します。
最初のGervillはJavaの内臓シンセサイザーでMIDI情報を無制限に受信できると言っています。またReal Time SequencerはJavaの内臓シーケンサーでMIDI情報をタイミングよく送信したり外部からの入力を受信したりするものです。
MidiDevice.Info : 2 item(s) MidiDevice.Info[0] Name : Gervill Version : 1.0 Vendor : OpenJDK Description : Software MIDI Synthesizer Receivers : -1 Transmitters : 0 MidiDevice.Info[1] Name : Real Time Sequencer Version : Version 1.0 Vendor : Oracle Corporation Description : Software sequencer Receivers : -1 Transmitters : -1
ソフトウェアシンセサイザーを起動した場合は以下の情報が表示されました。
MidiDevice.Info[1] Name : ARIA Player Version : Unknown version Vendor : Unknown vendor Description : ARIA Player Receivers : -1 Transmitters : 0
次にMIDIキーボードをUSBに接続して実行しました。
送信用と受信用で別のデバイスになっています。
MidiDevice.Info[1] Name : LPK25 Version : Unknown version Vendor : AKAI professional LLC Description : LPK25 Receivers : 0 Transmitters : -1 MidiDevice.Info[2] Name : LPK25 Version : Unknown version Vendor : AKAI professional LLC Description : LPK25 Receivers : -1 Transmitters : 0
次にオーディオインタフェースとMIDIインタフェース兼用の機材をUSBつなぎました。こちらはドライバーをインストールした上で行なっています。
MidiDevice.Info[1] Name : TASCAM US-4x4 Version : 2 Vendor : TEAC Corporation Description : TASCAM US-4x4 Receivers : 0 Transmitters : -1 MidiDevice.Info[2] Name : TASCAM US-4x4 Version : 2 Vendor : TEAC Corporation Description : TASCAM US-4x4 Receivers : -1 Transmitters : 0
次回はこれらの機材を接続させて音を鳴らしたいと思います。