メガドラ開発:MDSDRVについて(2)

 SGDKによるゲーム開発において鬼門であるサウンド周りについて記事を書いてきました。今回はMDSDRVを実際に使う上で自分がわかりにくいと感じたチャンネルとスロットについてまとめてみました。

チャンネルとスロット

 MDSDRVはPCMを同時に3音まで鳴らすことができるそうです。その場合はMML上でPCMのチャンネルをF、K、Lの3種を指定します(FはBGMと共有、Lチャンネルを使う場合はPCMMODE3を指定する必要がある)。このチャンネルというのはMMLを記述するうえで指定するもので、全体としては以下のようになっています。

  • A-F FM音源(PCM CH1含め)

  • G-I PSG音源(DCSG)

  • J  PSGノイズ

  • KL PCMチャンネル(CH2,3)

 対してゲーム側でSEを再生する際にはMDS_SE1~MDS_SE3までのスロットを指定します。これは同時に再生できるSEの数であり、同時に優先として機能します(MDS_SE3が最も優先が高くなります)。
 ただし、同時に鳴らすことができるといってもチャンネルが発声できる音は当然1つだけです。例えばチャンネルCを指定した3種のSEを、MDS_SE1からMDS_SE3で同時に鳴らしても…当然MDS_SE3のSEしか再生されません。
 もう少し複雑なケースとして、低優先スロットのSE内でチャンネルC、Jを使用していて、高優先スロットがチャンネルJをすでに使っていた場合…低優先のSEでは使用可能なチャンネルの音だけが再生されます。これはとても変なSEとなる可能性が高いです…。
 また高優先スロットが再生が終了したチャンネルは開放されるため、低優先スロットのSEではその瞬間からそのチャンネルが再生されることもあります。

MDSDRVとゲームプログラム、ハードの関係図

 ゲーム側では各スロットの再生状況をフラグとして知ることができますので、各スロットに対してゲーム側で別の優先を実装することは可能です。ですが、上記のように別のスロットでチャンネルが使われているかどうかはわかりませんので、SEが正しく鳴る保証はありません。どのような実装とデータを管理するべきか、なかなか難しい問題となりそうです(私も良い方法がわかりません…)。

この記事が気に入ったらサポートをしてみませんか?