第1章 概要
MSX-BASIC上からBGM(Back Ground Music)を演奏します。
BGMと唱っているだけあり、1/60秒のタイマー割り込みでBASICの処理と平行してBGMを自動的に演奏します。
- BASIC上からBGM演奏の指示を出すことができます。
- FM音源(OPLL、MSX-MUSIC)・PSG音源・SCC音源の、最大17音同時発声ができます。
- BGMドライバを変更することにより、多くのBGM形式に対応します。
※SCCはコナミ株式会社のウェーヴ音源ICです。
updated:
MSX-BASIC上からBGM(Back Ground Music)を演奏します。
BGMと唱っているだけあり、1/60秒のタイマー割り込みでBASICの処理と平行してBGMを自動的に演奏します。
※SCCはコナミ株式会社のウェーヴ音源ICです。
BGMを演奏する為には、「BGMドライバ」と呼ばれる演奏プログラムと、「BGMデータ」と呼ばれる演奏データの2つが必要です。ドライバとデータは対になっていて、このバランスが崩れるとBGMは演奏できません。
BGMドライバとはDMシステム2上で動作する専用の楽曲再生プログラムのことで、いくつかの種類が用意されています(熟練者なら自作もできます)。デフォルトのBGMドライバは「MGSDRV」で、システムに同梱されています。他のBGMドライバは随時インストール作業を行うことでBGMドライバの差し替えができます。
2020年12月現在、DMシステム2で対応しているBGM形式は以下の通りです。
Ain.氏の提唱した音楽ドライバで、日本のMSX系パソコン通信で有名です。OPLL・PSG・SCCの計17音同時発声が可能で、強力なループ機能やカラオケ機能などがウリです。ゲームミュージックから歌謡曲まで、豊富なジャンル(のデータ)がMSX系ネットワークで出まわっています。
DMシステム2ではMGSDRVを標準でインストールしています。MGSDRV形式の楽曲データをメモリに配置するだけでそのまま再生できます。
現在では作者のAin.氏に代わり、当クラブがMGSDRVのサポートを担当しています。→MGSDRVのページ https://www.gigamix.jp/mgsdrv/
※DMシステム2のMGSDRVは簡略化の為、「圧縮形式(MGSARC)」と「カラオケ機能(MGSELの歌詞機能)」はサポートしません。また、16KBを超えるBGMデータは再生できません。
「MSXマガジン」(アスキー刊)で提唱された音楽ドライバです。MuSICAは「Dante2」「ディスク通信」等、MSXマガジンがリリースした多くのソフトウェアで活用されていました。エディタの快適さには定評が有ります。
「MuMAKA」は M.K Softが製作した MuSICA の上位互換ドライバです。OPLL、PSG、SCCの17音同時演奏が可能で、MuSICAには無いトランスポーズ等の新機能が追加されています。
MuSICA本体の入手方法ですが、「MSXマガジン」は既に休刊、ソフトベンダーTAKERUでの販売は終了、「MSXマガジン永久保存版」も入手困難なため、2021年現在ではMuSICA本体の入手は非常に困難です。しかし「勤労シリーズ」と言うMuSICA互換BGMドライバが出回っており、それを用いてデータが作成できます。
DMシステム2ではこのドライバを新たにインストールすることで、楽曲データを再生できます。
MSXのFM音源機能「MSX-MUSIC」に内蔵されているBGMの演奏ルーチンです。「MSX・FAN」(徳間書店インターメディア刊)の付録ディスクでこのBGM形式が採用されていました。
FM-BIOSの利点は「処理の軽さ」です。OPLLによる最低限の演奏しかできないかわりに割り込み処理にはほとんど時間をかけません。とにもかくにも速度が欲しいアクション性の高いソフトに最適です。
DMシステム2ではこのドライバを新たにインストールすることで、楽曲データを再生できます。
※このドライバはPSG音源・SCC音源の演奏に対応していません。
ユーザー自身がDMシステム2対応のBGMドライバを差し替えたり新たに開発することも可能です。→ BGMドライバ
BGMドライバにMGSDRV以外を使用している場合でも、プログラムの記述はすべてのドライバにおいて共通します。
まずはBGMデータをどこかのメモリ(RAM)へ配置しなければなりません。使用するBGMドライバのデータ形式によって方法が変わりますので注意してください。
BGMを配置するメモリはあらかじめCLEAR文で宣言しておく必要があります。
CLEAR 200,&HC000 ← C000h以降をBASICが使用しない
CALL LOAD("ファイルネーム",配置アドレス)
ex.) CALL LOAD("SAMPLE.MGS",&HC000) ← C000hへ配置
BLOAD "ファイルネーム"
ex.) BLOAD "SAMPLE.BGM" ← BSAVEヘッダが示すアドレスへ配置
ex.) CALL LOAD("SAMPLE.BGM",&HC000,,7) ← BSAVEヘッダ(先頭7バイト)を除外したうえでC000hへ配置
※MuSICA形式のBGMデータはリロケータブル(任意のアドレスへ移動できる)のデータ構造ではありません。必ずBSAVEヘッダに記載されている開始アドレスへ配置してください。
FM-BIOS形式のBGMデータは、データ作成アプリによってBSAVEヘッダの有無が変わります。生成されたファイルにBSAVEヘッダが付いていない場合はMGSDRVと同様の手順、BSAVEヘッダが付いている場合はMuSICAと同様の手順でデータをロードしてください。
RAMに配置したBGMデータの演奏を開始します。
CALL BGMON(BGMの先頭アドレス)
ex.) CALL BGMON(&H3000) ← 3000hに配置したBGMデータを演奏
CALL LOAD 等で設定したアドレスをそのまま代入してください。BLOAD命令でデータを配置する場合は、データの先頭アドレスをあらかじめ把握しておく必要があります。
設定したアドレスにBGMデータを確認できなかった場合、DMシステム2はエラーを返します。
※BGMドライバによっては確認しない(できない)場合があります。最悪の場合暴走・フリーズの危険性もありますので、予め先頭アドレスは把握しておくことをおすすめします。
RAMに配置したBGMデータの演奏に、ループ回数を指定しながら演奏を開始します。
CALL BGMON(BGMの先頭アドレス,ループ回数)
ex.) CALL BGMON(&H3000,3) ← 3000hに配置したBGMデータを3回ループで演奏
ループ回数は 1~255 を指定します(0:永久ループ)。
第2パラメータ(ループ回数)を指定しない場合は、永久ループとなります。
2023年1月19日現在、第2パラメータ(ループ回数)はBGMドライバによって挙動が変わり、正常に機能しない場合があります。
BGMの演奏テンポを調節します。百分率で設定します。通常は100(%)です。この数を少なくすればテンポが遅くなり、多くすればテンポが早くなります。
CALL BGMTMP(百分率)
ex.) CALL BGMTMP(50) ← テンポを50%(2分の1)にする
ex.) CALL BGMTMP(150) ← テンポを150%(1.5倍)にする
テンポを遅くする分には一向に構いませんが(BGMとして聴くのは辛いですが)、極端にテンポを早めるとMSX自体のパワー不足により暴走することがあります。いいとこ2倍程度が限界です(MSX2時)0。
BGMを移調(トランスポーズ)します。移調幅は-128~127で、通常は0です。この数を少なくすればBGM全体が低い音へ移調され、多くすれば高い音へ移調されます。
CALL BGMTRS(移調幅)
ex.) CALL BGMTRS(-1) ← 半音下げる
ex.) CALL BGMTRS(1) ← 半音上げる
※移調機能の無いドライバでは無視されます。
BGMデータの音量を調節します。音量は0(最小)~15(最大)で、OPLL・PSG・SCCの全てのBGM演奏パートの音量が調節できます。
CALL BGMVOL(マスターボリューム)
ex.) CALL BGMVOL(15) ← 音量を最大にする
ex.) CALL BGMVOL(8) ← 音量を8(中間)にする
※音量調節機能の無いドライバでは無視されます。
BGMの演奏を一時的に停止(ポーズ)します。
CALL BGMWAIT
一時停止したBGMを戻すのも、同じく CALL BGMWAIT を使用します。
BGMの演奏を完全に中止します。
CALL BGMOFF
※BGMの演奏が行われていない場合は無視されます。
BGMの音量を徐々に下げます(フェードアウト)。時間を1/60秒単位で設定すると、音量調節がバックグラウンド処理され、BASICの命令との「並列処理」ができます。音量が最小になった時点で演奏を中止(CALL BGMOFF)します。
CALL BGMOFF(時間)
ex.) CALL BGMOFF(30) ← 30/60秒ずつ音量を1下げる
※フェードアウト中 CALL BGMVOL による音量変更は無視されます。しかし CALL BGMOFF による演奏中止は有効になります。
※フェードインはありません。
※音量調節機能の無いドライバでは無視されます。
OPLL・PSG・SCCのそれぞれの音源の音量を調節します。音量は -15(最小)~15(最大)で、OPLL・PSG・SCCそれぞれの音源の音量が調節できます。
CALL BGMVOL(マスターボリューム,OPLL,PSG,SCC) ※マスターボリュームは省略可能です
ex.) CALL BGMVOL(,3) ← OPLL音源の音量を +3 する
ex.) CALL BGMVOL(,,-2) ← PSG音源の音量を -2 する
※バランス調節の通常は0なので、特にプラス方向へバランスを調節するとBGM形式・データによってはやや不快感をもたらす場合があります。ソフトエンベロープで本来音が停止するような微弱な音声がバランス調節により音量が下がりきれず、かえって目立ってしまうからです。こればっかりはどうしようもありません。
※音量調節機能の無いドライバでは無視されます。
インフォメーションエリアの BGFLAG(+15, 1byte) のbit0を参照します。(0:停止中、1:演奏中)
※BGMドライバによっては機能に差異があります。BGMドライバごとによるループ回数指定の動作の違いについて をご覧ください。
FM音源(MSX-MUSIC)は、インフォメーションエリアの SLTOPL(+16, 1byte) を参照します。(接続されているスロットの値。255:未接続=利用不可能)
SCC音源は、インフォメーションエリアの SLTSCC(+17, 1byte) を参照します。(接続されているスロットの値。255:未接続=利用不可能)
DMシステム2で対応する各種BGMデータを再生できる「プレイヤー」アプリをBASIC言語で制作しました。開発例として参考になれば幸いです。ダウンロードしてお使いいただけます。
対応するBGM形式は「MGSDRV」「MuMAKA(MuSICA互換)」「FM-BIOS(OPLDRV)」の3種類です。BGMプレイヤー起動時にBGM形式の選択があります。
Filename指定で「B:」のように2文字のドライブレターを入力すると、指定のドライブに切り替えます。例えばエミュレータ等の動作で、このBGMプレイヤーのディスクイメージをドライブA、BGMデータを入れたディスクイメージをドライブBのにセットするような場合に便利です。
DMシステム2で使用するBGMデータは事前に各種ツールで作成しておく必要があります。この章ではそれぞれのBGM形式の作成法を紹介します。
MSX実機・MSXエミュレータで作る方法と、PC・スマートフォン(Webブラウザ)で作る方法があります。詳しくは MGSDRVのページをご覧ください。→ https://www.gigamix.jp/mgsdrv/
アスキーの「MuSICA」エディタで作成します。(Dante2に付属)
または、テキストエディタでMMLを書き、「勤労4号」でコンパイルし、「勤労5号」で再生します。勤労シリーズのダウンロードは「FSW倉庫」をご覧ください。 → http://sakuramail.net/fswold/music.html
テキストエディタでMMLを作成し、MCMP210F.COMでコンパイルします。たろうさん制作のFM-BIOS用BGM製作キットが用意されています。詳しくは「MML Compiler」のドキュメント(MCMP210F.DOC)をご覧ください。
MID形式のMIDIデータからFM-BIOS形式へ変換します。詳しくはこちら → https://mikusx.hatenablog.com/entry/2018/11/28/203627
MuSICAライクのUIを持ったエディタでMMLを作成し、FM-BIOS形式で出力します。詳しくはこちら → http://www5.ocn.ne.jp/~unyo-lar/smds-midi/smds-midi.htm