MSXでは、アプリケーション側からFM音源カートリッジ「FM-PAC」や本体に内蔵されたFM音源(OPLL)を使う場合、どれか一つの音源しか有効にしてはいけない、という決まりがあります。
それをぶっちぎって、同時にいっぱい使ってしまおう というドライバです。
ただし、このツールを使用することで本体や周辺機器に悪影響を与える可能性もありますので、必ず自己責任でお願いします。
いっぱいOPLL ver1.00
「いっぱいOPLL」は、PC上で動くMMLコンパイラと、そこから出力されるMSX用の実行ファイルから成り立っています。
MMLについては、なるべく一般的な書式に近づけたつもりですが、機能は極限までシンプルにしています。
大文字と小文字は厳密に区別しているので、マクロや16進数などの特別な場合以外は すべて小文字で記述してください。
ユーザー音色を定義するには、以下の3通りの定義方法があり、データの個数で自動的に判断されます。
また、16進数を用いる場合、データの先頭に 0x を付け、A~F は必ず大文字で記述してください。
*@<音色番号>= <レジスタ0>, <レジスタ1>, ..., <レジスタ7>
*@<音色番号>= <レジスタ0>, <レジスタ1>, ..., <レジスタ7>, <ボイス移調>
*@1=0,0,0,27,249,244,18,34
*@<音色番号>= <配列要素0>,<配列要素1>, ..., <配列要素15>
*@2=0x6C43,0x6573,0x6948,0x7468,0x1800,0x0008,0x0000,0x0000,0x08A3,0x76F1,0x0080,0x0000,0x0082,0x17F2,0x0080,0x0000
*@<音色番号>= <TR>,<TL>,<FB>, <PD1>,<AD1>,<EV1>,<KR1>,<ML1>,<KL1>,<AR1>,<DR1>,<SR1>,<RR1>, <PD2>,<AD2>,<EV2>,<KR2>,<ML2>,<KL2>,<AR2>,<DR2>,<SR2>,<RR2>
*@3=0,43,6, 0,0,1,1,0,2,0,14,12,10, 0,0,1,1,0,0,0,13,1,10
よく使うMMLはマクロとして定義することができます。
コンパイル時に展開されるので、出力データが節約できるようなことはありません。
マクロ内マクロも使用可能ですが、自分自身を含めることはできないので注意してください。
*M<マクロ番号>=<MML文字列> … マクロにMML文字列を定義する。(マクロ番号 0~999)
*M<マクロ番号>+=<MML文字列> … 定義済のマクロの終端にMML文字列を追加する。(マクロ番号 0~999)
*M1 = cege
*M2 = dfaf
*M3 = M1 M1 M2 M1
> … 1オクターブ上げる。
< … 1オクターブ下げる。
( … ボリュームを1上げる。直後に数値をつけると任意の数だけ上げる。
) … ボリュームを1下げる。直後に数値をつけると任意の数だけ下げる。
【※1】トラック番号について
トラック番号を使いわけることで、同時に10個までのOPLLを制御することができます。
トラック番号とOPLLの関係は以下の通りです。
トラック番号 | 対応するOPLL |
---|---|
p0~9 | OPLL#1(p9 がリズムトラック) |
p10~19 | OPLL#2(p19 がリズムトラック) |
p20~29 | OPLL#3(p29 がリズムトラック) |
p30~39 | OPLL#4(p39 がリズムトラック) |
p40~49 | OPLL#5(p49 がリズムトラック) |
p50~59 | OPLL#6(p59 がリズムトラック) |
p60~69 | OPLL#7(p69 がリズムトラック) |
p70~79 | OPLL#8(p79 がリズムトラック) |
p80~89 | OPLL#9(p89 がリズムトラック) |
p90~99 | OPLL#10(p99 がリズムトラック) |
※例えば、OPLL#1でリズム音源を使用しない場合は p0~p8 までの 9トラックが使用可能、リズム音源を使用する場合は p0~p5 の 6トラックと p9 が使用可能となります(無視してもエラーにはなりませんが、正しく発音されません)。
【※2】音色番号について
IppaiOPLLでは、@0~@63がユーザー定義の音色、@65~@79がROM内蔵の音色となっています(BASICとは違う番号なので注意)。
内蔵音色とBASICでの音色番号の関係は以下の通りです。
IppaiOPLL | 楽器名 | BASIC |
---|---|---|
@65 | バイオリン | @2 |
@66 | ギター | @10 |
@67 | ピアノ | @0 |
@68 | フルート | @3 |
@69 | クラリネット | @4 |
@70 | オーボエ | @5 |
@71 | トランペット | @6 |
@72 | オルガン | @9 |
@73 | ホルン | @48 |
@74 | シンセ | @24 |
@75 | ハープシコード | @14 |
@76 | ビブラフォン | @16 |
@77 | シンセベース | @23 |
@78 | ウッドベース | @33 |
@79 | エレキベース | @12 |
※OPLLの仕様により、ユーザー定義の音色は、OPLL一つにつき同時に一種類 しか発音できません。
以下の3通りの出力形式があります。
BLOADコマンドでロード可能なマシン語ファイルを出力します。
サウンドドライバと演奏データがセットになっているので、ファイル単体で演奏することができます。
ファイルをフロッピーディスクにコピーし、MSXにそのディスクをセットした状態で、BASICから BLOAD"ファイル名",R で実行可能です。
ヘッダのない純粋なバイナリーファイルを出力します。
BASICからロードすることはできません。
主にデバッグ用です。
エミュレータなどで使用できるCASファイルを出力します。
なんでもピーガーmkII等で音声ファイルに変換することで、実機でロードすることもできます。
BASICから BLOAD"CAS:",R で実行可能です。
※どの出力形式でも、「演奏データのみ」をチェックすると、サウンドドライバを出力せず演奏データのみを出力します。
コンパイル後、演奏に必要なOPLLの個数や、演奏時に使用されるメモリが「各種情報」の部分に表示されます。
ファイルとして出力されるのは「演奏データ」と「サウンドドライバ」の部分になります。
サウンドドライバは必ず D000H から配置されるので、一度ドライバをロードした後は DEFUSR=&HD000:A=USR(0) で何度でも演奏することができます。
OPLLを3つ使ったサンプルのMMLファイルが入っています。参考にしてみてください。
ちなみに実機で演奏させた動画はこちら
MSXのお約束をブッチして、こんなことをやってみましたが、いかがだったでしょうか。
FMPACを複数使う場合の注意ですが、例えば全チャンネル "v15" とかで発音すると、音が重なってとんでもないボリュームになり、間違いなくハードウェアまわりにヤバい影響を与えそうです。
実機で試す場合、基本的には FMPACの音量切り替えは「小」にしておくと良いでしょう。
また、10個のOPLLを使えるようにしてはみたものの、結局のところ、発音数が増えたところであまり意味はなく、メリットといえば「オリジナル音色をいくつも使える」ということくらいかと思います。
かといって、2オペレータのOPLLでいくら工夫したところで、そこまで画期的な変化を出せるわけでもないので、若干期待外れな感じでした(^_^;)
ただ、使う人が使えば凄い音が鳴るのかもしれませんし、「ポコポコドラムをすべてオリジナル音色に置き換える」というのも面白そうな気がします。
お時間のある方は、ぜひ遊んでみてください。
ちなみに、実機でこんな環境が用意できるのは変態だけだと思うので、エミュレータ用の設定ファイルも入れておきました。
エミュレータ上だけでも、「OPLLx9個」の世界を楽しんでみてください(ただ、実機とは全く音のバランスが違ってしまいますが…)。
コンパイラとサウンドドライバについては、以前作ったぴゅう太用のものを改変して作りました。
あくまでも「ちょっとしたお遊び」で始めたということもあって、最低限の機能のみとなっていますし、PSGも使えません。ごめんなさい。
IppaiOPLLに関する質問や、「こんなの作ってみたよー」みたいなお知らせは、twitter で @tiny_yarou までコメントください。よろしくお願いします!