[GameMaker: Studio] 音声再生の優先順位

gms_audio_priority_1

Legacy Soundでは最大同時再生数はプラットフォーム依存で、それを越える数の同時再生でどの音が鳴るかはその時の状況次第でした。

New Audio Engineになってその点が改善され、最大同時再生数の指定(もちろんプラットフォームの最大数を超えることはできません)や、再生時の優先順位を指定できるようになっています。

最大同時再生数はデフォルト値の128またはプラットフォームの最大値のうち、低い方が採用されます。
デフォルト値の128は、audio_channel_num(最大同時再生数)で変更することもできます。
リファレンスには明記されていませんが、audio_channel_numの最低値は2のようで、1を指定しても2音まで同時に再生されます。

この最大同時再生数を超えて新たにaudio_play_soundを実行すると、指定したPriorityより優先順位の低い音は停止されて新しい音が再生されます。
すでに再生されている音すべての優先順位が新しい音より高ければ、新しい音の再生はキャンセルされます。

では、この優先順位というのは値が低い方、高い方のどちらが優先されるのでしょうか?

リファレンスには「優先順位が高い音を再生するために優先順位の低い音は停止される」とだけ書かれていて、数値的にどちらが上かは書かれていません。

描画のDEPTHの場合は数値が低いほど手前に表示されます。”順位”という単語的にも少ない方が上位に感じる方もいるかと思います。

audio_channel_num(2)とした上で、何かBGMをPriority=200でループ再生し、少し長めの効果音をPriority=100で連続再生してみてください。
BGMは停止せず、効果音は一度に1つしか再生されません。

次に効果音をPriority=300で連続再生してみてください。
今度はBGMは止まってしまい、効果音が一度に2音重ねて再生されます。

このことから、audio_play_soundPriorityは数値が高いほど優先される(値が同じ場合は先に鳴っている方が優先される)ということがわかります。

BGMのように途中で止まっては困る音は1000、
ジングルのようにできるだけ鳴ってほしい音は800~899、
ボイスは600~699、
1UP音やアイテム取得音のように特別な効果音は400~499、
その他途中で消えたり鳴らなかったりしても困らない音は200~299…のように割り当てるといいかもしれません。

HTML5IEにも対応させる場合は自動的にLegacy Soundに切り替わってしまうので、このような優先順位のコントロールができないということに注意しましょう。
IEでの音声再生については「IEの音と通信」も参照してください。