Gigamix DM-SYSTEM2

BGM演奏機能

updated:

第1章 概要

 MSX-BASIC上からBGM(Back Ground Music)を演奏します。

 BGMと唱っているだけあり、1/60秒のタイマー割り込みでBASICの処理と平行してBGMを自動的に演奏します。

※SCCはコナミ株式会社のウェーヴ音源ICです。

第2章 対応するBGM形式

 BGMを演奏する為には、「BGMドライバ」と呼ばれる演奏プログラムと、「BGMデータ」と呼ばれる演奏データの2つが必要です。ドライバとデータは対になっていて、このバランスが崩れるとBGMは演奏できません。

 BGMドライバとはDMシステム2上で動作する専用の楽曲再生プログラムのことで、いくつかの種類が用意されています(熟練者なら自作もできます)。デフォルトのBGMドライバは「MGSDRV」で、システムに同梱されています。他のBGMドライバは随時インストール作業を行うことでBGMドライバの差し替えができます。

 2025年5月現在、DMシステム2で対応しているBGM形式は以下の通りです。

MGSDRV(デフォルト設定)

 MGSDRVは、Ain.氏が提唱したミュージックドライバです。フリーソフトウェアとして日本のMSX系パソコン通信ネットワークで普及しました。OPLL・PSG・SCCの計17音同時発声が可能で、ゲームミュージックから歌謡曲まで豊富なジャンルの楽曲データがパソコン通信の頃から現在に至るまで多数出回っています。

  • DMシステム2ではMGSDRVを標準でインストールしています。MGSDRV形式の楽曲データをメモリに配置するだけでそのまま再生できます。
  • 現在では作者のAin.氏に代わり、当クラブがMGSDRVのサポートを担当しています。→MGSDRVのページ https://www.gigamix.jp/mgsdrv/
  • DMシステム2におけるこのBGMドライバの管理IDは、0です。

※DMシステム2版MGSDRVは原版(MSX-DOS2アプリ)からのサブセットとなります。簡略化のため一部機能はサポートしません。

MuMAKA(MuSICA互換)

 MuMAKAは、M.K Softが開発したミュージックドライバで、アスキー刊「MSXマガジン」が提唱したミュージックドライバ「MuSICA」と上位互換性があります。OPLL・PSG・SCCの17音同時発声が可能で、トランスポーズ機能等が追加されています。

  • DMシステム2ではこのBGMドライバを手動でインストールすることで、楽曲データを再生できます。
  • MuSICAはかつてソフトベンダーTAKERUで販売されていましたが、2025年現在は入手が非常に困難です。また、MuSICA本体の配布・組み込みライセンスが現在も一切不明な状態です。
  • MuSICAの権利関係を回避した互換ドライバが複数存在します。DMシステム2ではMuMAKAの移植対応版を用意しています。
  • DMシステム2におけるこのBGMドライバの管理IDは、1です。

※DMシステム2版MuMAKAは「NVマガジン」収録の正式版からのサブセットとなります。簡略化のため一部機能はサポートしません。

FM-BIOS(OPLDRV)

 MSXのFM音源機能「MSX-MUSIC」に内蔵されているBGMの演奏ルーチンです。FM-BIOSの利点は「処理の軽さ」で、対応する音源はOPLLのみです。OPLLによる最低限の演奏しかできない代わりに割り込み処理にはほとんど時間をかけません。とにもかくにも速度が欲しいアクション性の高いソフトに最適です。

  • DMシステム2ではこのBGMドライバを手動でインストールすることで、楽曲データを再生できます。
  • DMシステム2におけるこのBGMドライバの管理IDは、2です。

※このBGMドライバはPSG音源・SCC音源の演奏に対応していません。

NDP

 なると氏が2025年5月にリリースしたPSG特化のミュージックドライバです。任意のチャンネルにリズム音を自動的に割り込ませて発音できたり、ハードエンベロープのループ波形を用いた疑似ノコギリ波や疑似三角波(ブザーエフェクト)を手軽に鳴らせたり…などMSXのPSG音源IC「AY-3-8910」の性能を存分に発揮できます。対応する音源はPSGのみです。

  • DMシステム2ではこのBGMドライバを手動でインストールすることで、楽曲データを再生できます。
  • DMシステム2におけるこのBGMドライバの管理IDは、3です。

※このBGMドライバはFM音源・SCC音源の演奏に対応していません。

その他

 ユーザー自身がDMシステム2対応のBGMドライバを差し替えたり新たに開発することも可能です。→ BGMドライバ

第3章 DMシステム2からの使用方法

 BGMドライバにMGSDRV以外を使用している場合でも、プログラムの記述はすべてのドライバにおいて共通します。

BGMデータのロード

 まずはBGMデータをどこかのメモリ(RAM)へ配置しなければなりません。使用するBGMドライバのデータ形式によって方法が変わりますので注意してください。

 BGMを配置するメモリはあらかじめCLEAR命令で宣言しておく必要があります。

CLEAR 200,&HC000  ← C000h以降をBASICが使用しない

MGSDRVの場合

 MGSDRV形式のデータファイル(拡張子 *.MGS)は、BSAVEヘッダが付いていません。

CALL LOAD("ファイルネーム",配置アドレス)
ex.) _LOAD("SAMPLE.MGS",&HC000)  ← C000hへ配置

MuSICAの場合

 MuSICA形式および互換ドライバのデータファイル(拡張子 *.BGM)は、配置すべきアドレスが決定しているBSAVEヘッダが付いています。

BLOAD "ファイルネーム"
ex.) BLOAD "SAMPLE.BGM"  ← BSAVEヘッダが示すアドレスへ配置

※MuSICA形式のBGMデータはリロケータブル(任意のアドレスへ移動できる)のデータ構造ではありません。必ずBSAVEヘッダに記載されている開始アドレスへ配置してください。

FM-BIOSの場合

 FM-BIOS形式のBGMデータは、データ作成アプリによってBSAVEヘッダの有無が変わります。生成されたファイルにBSAVEヘッダが付いていない場合はMGSDRVと同様の手順、BSAVEヘッダが付いている場合はMuSICAと同様の手順でデータをロードしてください。

NDPの場合

 NDP形式のデータファイル(拡張子 *.NDP)は、配置すべきアドレスを自由に決められるBSAVEヘッダが付いています。逆に言うと、配置アドレスは常に明示しなければなりません(省略不可)。

BLOAD "ファイルネーム",配置アドレス
ex.) BLOAD "SAMPLE.NDP",&HC000  ← C000hへ配置
ex.) _LOAD("SAMPLE.NDP",&H3000,,7)  ← BSAVEヘッダ(先頭7バイト)を除外したうえで3000hへ配置(BLOAD命令ではページ0のRAMへ配置できないため _LOADを使用する)

BGMデータの演奏

 RAMに配置したBGMデータの演奏を開始します。

CALL BGMON(BGMの先頭アドレス)
ex.) CALL BGMON(&H3000)  ← 3000hに配置したBGMデータを演奏

 CALL LOAD 等で設定したアドレスをそのまま代入してください。BLOAD命令でデータを配置する場合は、データの先頭アドレスをあらかじめ把握しておく必要があります。

 設定したアドレスにBGMデータを確認できなかった場合、DMシステム2はエラーを返します。

※BGMドライバによっては確認しない(できない)場合があります。最悪の場合暴走・フリーズの危険性もありますので、予め先頭アドレスは把握しておくことをおすすめします。

BGMデータの演奏(ループ回数指定)

 RAMに配置したBGMデータの演奏に、ループ回数を指定しながら演奏を開始します。

CALL BGMON(BGMの先頭アドレス,ループ回数)
ex.) CALL BGMON(&H3000,3)  ← 3000hに配置したBGMデータを3回ループで演奏

 ループ回数は 1~255 を指定します(0:永久ループ)。
 第2パラメータ(ループ回数)を指定しない場合は、永久ループとなります。

BGMドライバごとによるループ回数指定の動作の違いについて

 2025年5月現在、第2パラメータ(ループ回数)はBGMドライバによって挙動が変わり、正常に機能しない場合があります。

BGMドライバによる第2パラメータ(ループ回数)の挙動の違い
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ドライバでは無視されます。

TIPS

BGMが演奏中かをプログラムで調べる方法

 インフォメーションエリアの BGFLAG(+15, 1byte) のbit0を参照します。(0:停止中、1:演奏中)

 注意すべき点は、BGFLAGは本来「バックグラウンド処理へのタイマー割り込みの接続状況」を示すフラグであって「バックグラウンド処理実行中(=演奏中)」を示すフラグではありません。ループしない曲などの再生処理が終了した際にBGFLAGのbit0を0へ変更するか否かは各種BGMドライバの実装によって異なるため、再生は終了しているのにBGFLAGのbit0が1のままであるために演奏中の状態が続いているという状況が、BGMドライバによってはあり得ます

BGMドライバごとによるループ回数指定の動作の違いについて もご覧ください。

FM音源・SCC音源が利用可能かをプログラムで調べる方法

 FM音源(MSX-MUSIC)は、インフォメーションエリアの SLTOPL(+16, 1byte) を参照します。(接続されているスロットの値。255:未接続=利用不可能)

 SCC音源は、インフォメーションエリアの SLTSCC(+17, 1byte) を参照します。(接続されているスロットの値。255:未接続=利用不可能)

開発例:BGMプレイヤー

 DMシステム2で対応する各種BGMデータを再生できる「プレイヤー」アプリをBASIC言語で制作しました。開発例として参考になれば幸いです。ダウンロードしてお使いいただけます。


簡易BGMプレイヤー ver.3(MGSDRV・MuSICA・FM-BIOS・NDP対応)  naruto2413
Download DSK(52KB)
Run BGMON.DSK on WebMSX

対応するBGM形式は「MGSDRV」「MuMAKA(MuSICA互換)」「FM-BIOS(OPLDRV)」「NDP」の4種類です。BGMプレイヤー起動時にBGM形式の選択があります。

Filename指定で「B:」のように2文字のドライブレターを入力すると、指定のドライブに切り替えます。例えばエミュレータ等の動作で、このBGMプレイヤーのディスクイメージをドライブA、BGMデータを入れたディスクイメージをドライブBのにセットするような場合に便利です。

第4章 データの作成方法

 DMシステム2で使用するBGMデータは事前に各種ツールで作成しておく必要があります。この章ではそれぞれのBGM形式の作成法を紹介します。

MGSDRV

 MSX実機・MSXエミュレータで作る方法と、PC・スマートフォン(Webブラウザ)で作る方法があります。詳しくは MGSDRVのページをご覧ください。→ https://www.gigamix.jp/mgsdrv/

MuMAKA(MuSICA)

 アスキーの「MuSICA」エディタで作成します。(Dante2に付属)

 または、テキストエディタでMMLを書き、「勤労4号」でコンパイルし、「勤労5号」で再生します。勤労シリーズのダウンロードは「FSW倉庫」をご覧ください。 → http://sakuramail.net/fswold/music.html

FM-BIOS(OPLDRV)

MML Compiler(作者:たろうさん)

 テキストエディタでMMLを作成し、MCMP210F.COMでコンパイルします。たろうさん制作のFM-BIOS用BGM製作キットが用意されています。詳しくは「MML Compiler」のドキュメント(MCMP210F.DOC)をご覧ください。


(MCMP210F によるMMLのコンパイルと PLAY0 によるBGM再生)
Download MCMP210F.PMA(9KB) | LZH(9KB) | ZIP(10KB)

MIDI to OPLDRV(FM-BIOS) Converter(作者:むらかたとうじさん)

 MID形式のMIDIデータからFM-BIOS形式へ変換します。詳しくはこちら → https://mikusx.hatenablog.com/entry/2018/11/28/203627

SMDS(Super Music Driver System) ver.2.10(作者:卯如(Shin-ya S.)さん)

 MuSICAライクのUIを持ったエディタでMMLを作成し、FM-BIOS形式で出力します。詳しくはこちら → http://www5.ocn.ne.jp/~unyo-lar/smds-midi/smds-midi.htm

NDP

 NDP作者・なると氏のWebサイトで配布されているアーカイブをダウンロードし、Windows用のエディタおよびMMLコンパイラを実行します。→ https://ndp.squares.net/web/

[Back]トップページへ