MSX用FM音源ドライバ「いっぱいOPLL」

MSXでは、アプリケーション側からFM音源カートリッジ「FM-PAC」や本体に内蔵されたFM音源(OPLL)を使う場合、どれか一つの音源しか有効にしてはいけない、という決まりがあります。

それをぶっちぎって、同時にいっぱい使ってしまおう というドライバです。

ただし、このツールを使用することで本体や周辺機器に悪影響を与える可能性もありますので、必ず自己責任でお願いします。

ダウンロード

いっぱいOPLL ver1.00

動作環境

「いっぱいOPLL」は、PC上で動くMMLコンパイラと、そこから出力されるMSX用の実行ファイルから成り立っています。

MMLコンパイラ(IppaiOPLL.exe)

実行ファイル

使い方


MMLの書式について

MMLについては、なるべく一般的な書式に近づけたつもりですが、機能は極限までシンプルにしています。

大文字と小文字は厳密に区別しているので、マクロや16進数などの特別な場合以外は すべて小文字で記述してください。

音色定義

ユーザー音色を定義するには、以下の3通りの定義方法があり、データの個数で自動的に判断されます。

また、16進数を用いる場合、データの先頭に 0x を付け、A~F は必ず大文字で記述してください。

  1. レジスタの値を直接指定する。最後にボイス移調を設定することもできる。(8ビット×8個あるいは9個)

    *@<音色番号>= <レジスタ0>, <レジスタ1>, ..., <レジスタ7>

    *@<音色番号>= <レジスタ0>, <レジスタ1>, ..., <レジスタ7>, <ボイス移調>

    *@1=0,0,0,27,249,244,18,34

  2. _VOICE COPY で配列に格納される値で指定する(16ビット×16個)

    *@<音色番号>= <配列要素0>,<配列要素1>, ..., <配列要素15>

    *@2=0x6C43,0x6573,0x6948,0x7468,0x1800,0x0008,0x0000,0x0000,0x08A3,0x76F1,0x0080,0x0000,0x0082,0x17F2,0x0080,0x0000

  3. FM音源のパラメータを個々に指定する(23個)

    *@<音色番号>= <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】トラック番号について

【※2】音色番号について

※OPLLの仕様により、ユーザー定義の音色は、OPLL一つにつき同時に一種類 しか発音できません。

その他のオプションについて

出力形式

以下の3通りの出力形式があります。

  1. BLOADファイル

    BLOADコマンドでロード可能なマシン語ファイルを出力します。

    サウンドドライバと演奏データがセットになっているので、ファイル単体で演奏することができます。

    ファイルをフロッピーディスクにコピーし、MSXにそのディスクをセットした状態で、BASICから BLOAD"ファイル名",R で実行可能です。

  2. バイナリーファイル

    ヘッダのない純粋なバイナリーファイルを出力します。

    BASICからロードすることはできません。

    主にデバッグ用です。

  3. テープイメージ

    エミュレータなどで使用できる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 までコメントください。よろしくお願いします!


DEEP! P6! DEEP! MSX! へ戻る