チャンネルの割り当て・優先制御
ゲームはBGMだけでなく効果音も鳴ります。また複数の効果音が同時に発生することがあります。
その場合のチャンネル割り当てや優先順位の制御について調べました。
各サウンドにはチャンネル割り当てがある
前回の記事で32種類のサウンド(曲+効果音)があると書きましたが、それぞれに「開始チャンネル」が設定されています。
原則的にBGM類は0ch、効果音は4ch以降が設定されています。
例)開始chが0で4和音の曲→0,1,2,3chを使用
開始chが4で2和音の効果音→4,5chを使用
BGMは4〜5和音で構成されており、BGMに5音、効果音に3音使うイメージです。ファミコンやPSG搭載PCに比べると余裕のある構成と言えます。
優先順位は曲番号に依存
効果音が同時に鳴ったらどうなるか、ですがこちらは曲番号(前回記事参照)の高いものを優先する制御になっています。(曲番号順に処理を行ってワークエリアを上書きするので結果的に曲番号の高いものが残る)
ちなみにクレジット投入音は31番ですので、最も優先順位が高い設定になっています。アーケードゲームならではですね。
優先制御はチャンネル毎ですので、優先順位の低いSEも残ってるチャンネルがあれば鳴り続けます。可能な限り音を鳴らす設計です。(注)
例えば歩行音は25番に割り当られており効果音の中では高い優先順位なのですが、ch7単独使用なので「歩いているので呪文の音が鳴らなかった」とならないようになっています。
音源は8chですが論理chが45個用意されています。曲ごとに論理chが決められています。先述のチャンネル割り当ては論理chと物理chの関連付けの役割も持っている訳です。優先順位で鳴らないトラックも論理chでシーケンスは進むので、復帰しても音がズレることはありません。
ただあまりに多くの効果音を同時に鳴らしたら処理落ちするんじゃないかと思います。
(注)チャンネルの割り当ては静的です。動的な割り当ては行っていません。例えば4chに割り当てられているトラックは他に空きがあっても4chが使用中なら鳴りません。開いてるチャンネルに移動、という機能はありません。