第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ドライバの差し替えができます。
2025年5月現在、DMシステム2で対応しているBGM形式は以下の通りです。
MGSDRVは、Ain.氏が提唱したミュージックドライバです。フリーソフトウェアとして日本のMSX系パソコン通信ネットワークで普及しました。OPLL・PSG・SCCの計17音同時発声が可能で、ゲームミュージックから歌謡曲まで豊富なジャンルの楽曲データがパソコン通信の頃から現在に至るまで多数出回っています。
※DMシステム2版MGSDRVは原版(MSX-DOS2アプリ)からのサブセットとなります。簡略化のため一部機能はサポートしません。
MuMAKAは、M.K Softが開発したミュージックドライバで、アスキー刊「MSXマガジン」が提唱したミュージックドライバ「MuSICA」と上位互換性があります。OPLL・PSG・SCCの17音同時発声が可能で、トランスポーズ機能等が追加されています。
※DMシステム2版MuMAKAは「NVマガジン」収録の正式版からのサブセットとなります。簡略化のため一部機能はサポートしません。
MSXのFM音源機能「MSX-MUSIC」に内蔵されているBGMの演奏ルーチンです。FM-BIOSの利点は「処理の軽さ」で、対応する音源はOPLLのみです。OPLLによる最低限の演奏しかできない代わりに割り込み処理にはほとんど時間をかけません。とにもかくにも速度が欲しいアクション性の高いソフトに最適です。
※このBGMドライバはPSG音源・SCC音源の演奏に対応していません。
なると氏が2025年5月にリリースしたPSG特化のミュージックドライバです。任意のチャンネルにリズム音を自動的に割り込ませて発音できたり、ハードエンベロープのループ波形を用いた疑似ノコギリ波や疑似三角波(ブザーエフェクト)を手軽に鳴らせたり…などMSXのPSG音源IC「AY-3-8910」の性能を存分に発揮できます。対応する音源はPSGのみです。
※このBGMドライバはFM音源・SCC音源の演奏に対応していません。
ユーザー自身がDMシステム2対応のBGMドライバを差し替えたり新たに開発することも可能です。→ BGMドライバ
BGMドライバにMGSDRV以外を使用している場合でも、プログラムの記述はすべてのドライバにおいて共通します。
まずはBGMデータをどこかのメモリ(RAM)へ配置しなければなりません。使用するBGMドライバのデータ形式によって方法が変わりますので注意してください。
BGMを配置するメモリはあらかじめCLEAR命令で宣言しておく必要があります。
CLEAR 200,&HC000 ← C000h以降をBASICが使用しない
MGSDRV形式のデータファイル(拡張子 *.MGS)は、BSAVEヘッダが付いていません。
CALL LOAD("ファイルネーム",配置アドレス)
ex.) _LOAD("SAMPLE.MGS",&HC000) ← C000hへ配置
MuSICA形式および互換ドライバのデータファイル(拡張子 *.BGM)は、配置すべきアドレスが決定しているBSAVEヘッダが付いています。
BLOAD "ファイルネーム"
ex.) BLOAD "SAMPLE.BGM" ← BSAVEヘッダが示すアドレスへ配置
※MuSICA形式のBGMデータはリロケータブル(任意のアドレスへ移動できる)のデータ構造ではありません。必ずBSAVEヘッダに記載されている開始アドレスへ配置してください。
FM-BIOS形式のBGMデータは、データ作成アプリによってBSAVEヘッダの有無が変わります。生成されたファイルにBSAVEヘッダが付いていない場合はMGSDRVと同様の手順、BSAVEヘッダが付いている場合はMuSICAと同様の手順でデータをロードしてください。
NDP形式のデータファイル(拡張子 *.NDP)は、配置すべきアドレスを自由に決められるBSAVEヘッダが付いています。逆に言うと、配置アドレスは常に明示しなければなりません(省略不可)。
BLOAD "ファイルネーム",配置アドレス
ex.) BLOAD "SAMPLE.NDP",&HC000 ← C000hへ配置
ex.) _LOAD("SAMPLE.NDP",&H3000,,7) ← BSAVEヘッダ(先頭7バイト)を除外したうえで3000hへ配置(BLOAD命令ではページ0のRAMへ配置できないため _LOADを使用する)
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パラメータ(ループ回数)を指定しない場合は、永久ループとなります。
2025年5月現在、第2パラメータ(ループ回数)はBGMドライバによって挙動が変わり、正常に機能しない場合があります。
MGSDRV(BGM-MGS) | 未実装のため第2パラメータそのものが無視されます(永久ループのみ)。 |
---|---|
MuMAKA(BGM-MK) | ループ指定は可能ですが、ループ終了後のBGFLAG(インフォメーションエリア +15)のbit0は1のままになります。 |
NDP(BGM-NDP) | ループ指定は可能で、ループ終了後にBGFLAGのbit0が0になります。 |
BGMの演奏テンポを調節します。百分率で設定します。通常は100(%)です。この数を少なくすればテンポが遅くなり、多くすればテンポが早くなります。
CALL BGMTMP(百分率)
ex.) CALL BGMTMP(50) ← テンポを50%(2分の1)にする
ex.) CALL BGMTMP(150) ← テンポを150%(1.5倍)にする
テンポを遅くする分には一向に構いませんが(BGMとして聴くのは辛いですが)、極端にテンポを早めるとMSX自体のパワー不足により暴走することがあります。いいとこ2倍程度が限界です(MSX2時)。
BGMを移調(トランスポーズ)します。移調幅は-128~127で、通常は0です。この数を少なくすればBGM全体が低い音へ移調され、多くすれば高い音へ移調されます。
CALL BGMTRS(移調幅)
ex.) CALL BGMTRS(-1) ← 半音下げる
ex.) CALL BGMTRS(1) ← 半音上げる
※移調機能の無いBGMドライバでは無視されます。
BGMデータの音量を調節します。音量は0(最小)~15(最大)で、OPLL・PSG・SCCの全てのBGM演奏パートの音量が調節できます。
CALL BGMVOL(マスターボリューム)
ex.) CALL BGMVOL(15) ← 音量を最大にする
ex.) CALL BGMVOL(8) ← 音量を8(中間)にする
※音量調節機能の無いBGMドライバでは無視されます。
BGMの演奏を一時的に停止(ポーズ)します。
CALL BGMWAIT
一時停止したBGMを戻すのも、同じく CALL BGMWAIT を使用します。
※一時停止機能の無いBGMドライバでは無視されます。
BGMの演奏を完全に中止します。
CALL BGMOFF
※BGMの演奏が行われていない場合は無視されます。
BGMの音量を徐々に下げます(フェードアウト)。時間を1/60秒単位で設定すると、音量調節がバックグラウンド処理され、BASICの命令との「並列処理」ができます。音量が最小になった時点で演奏を中止(CALL BGMOFF)します。
CALL BGMOFF(時間)
ex.) CALL BGMOFF(30) ← 30/60秒ずつ音量を1下げる
※フェードアウト中 CALL BGMVOL による音量変更は無視されます。しかし CALL BGMOFF による演奏中止は有効になります。
※フェードインはありません。
※音量調節機能の無いBGMドライバでは無視されます。
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形式・データによってはやや不快感をもたらす場合があります。ソフトエンベロープで本来音が停止するような微弱な音声がバランス調節により音量が下がりきれず、かえって目立ってしまうからです。こればっかりはどうしようもありません。
※音量調節機能の無いBGMドライバでは無視されます。
インフォメーションエリアの BGFLAG(+15, 1byte) のbit0を参照します。(0:停止中、1:演奏中)
注意すべき点は、BGFLAGは本来「バックグラウンド処理へのタイマー割り込みの接続状況」を示すフラグであって「バックグラウンド処理実行中(=演奏中)」を示すフラグではありません。ループしない曲などの再生処理が終了した際にBGFLAGのbit0を0へ変更するか否かは各種BGMドライバの実装によって異なるため、再生は終了しているのにBGFLAGのbit0が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)」「NDP」の4種類です。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
NDP作者・なると氏のWebサイトで配布されているアーカイブをダウンロードし、Windows用のエディタおよびMMLコンパイラを実行します。→ https://ndp.squares.net/web/