前回まででサウンドバンクを利用した音色の変更はJavaから操作可能になりました。しかし重要なのは操作マニュアルから設定値を見つけることでもあります。今回はSC-88proというシンセサイザーを利用して設定値を決めたいと思います。
SC-88proについて
SC-88proはRolandの音源モジュールで今でも中古が出回っているようです。Javaから使う場合にはMIDIのインターフェースを使ってMIDIケーブルでつなぐ事になります。
マニュアルを読む
まず必要なものは操作マニュアルです。Rolandのページを探したのですが英語版しかありませんでした。
128ページの記述をみるとMSB、LSB、プログラムチェンジの順でメッセージを受け取るとなっています。
- The value of Control Change 0 : MIDI Bank Number (upper) (this unit’s Variation number)
- The value of Control Change 32 : MIDI Bank Number (lower)
- Program Change value: MIDI Program Number (this unit’s instrument number)
129ページにはLSBの設定値が書かれています。どうやらSC-88proの下位機種の音色をしていすることができるようです。Hで終わる数字は16進数を意味しています。
Least significant byte (LSB)
- 00H The setting of the [SC-55 MAP] or [SC-88 MAP] button is followed. If the front panel [SC-55 MAP] button is lit, SC-55 map will be selected.If the front panel [SC-88 MAP] button is lit, SC-88 map will be selected. If the button is dark, Native map will be selected.
- 01H SC-55 map will be selected, and [SC-55 MAP] is lit.
- 02H SC-88 map will be selected, and [SC-88 MAP] is lit.
- 03H Native map will be selected, and [SC-55 MAP][SC-88 MAP] is dark.
156ページにはピアノの音色一覧がありました。
PCの列はプログラムチェンジの値、CC00とかいてある列はコントロールチェンジ00番つまりMSBの値を指しています。LSBは129ページの記述からNative Mapは3、SC88 Mapは2、SC55 Mapは1を指定するようです。この表の2段目右のSC55 MapのPiano1wという音色は以下のような値で指定することができます。
- MSBは008つまり0x08
- LSBはSC55 Mapつまり0x01
- プログラムチェンジは001ただしこれは1ベースなので0ベースに直すと0、つまり0x00
Javaでの実装
以上のことからチャンネル0に設定するショートメッセージ配列を取得しトラックに設定するには以下のようにします。
track = sequence.createTrack(); for(ShortMessage message:getProgramMessages(0, 0x08, 0x01, 0x00)){ track.add(new MidiEvent(message, 0)); }
マニュアルでの書き方はメーカーによっても異なるので読み取って試行錯誤をする覚悟は必要です。