今回はCF2.5のサウンド再生の仕様について説明いたします。
(CF2.5の標準サウンド機能には『サウンド』と『音楽』に2種類がありますが、『音楽』の方はMIDIを再生するための機能で、今時MIDIをゲームのBGMに使う人も少ないと思われますので、こちらは割愛いたします。)
効果音を同時に大量に再生された場合に、それ以降の音が再生されなかったり、BGMとして再生している音声が消えてしまったりする現象に遭遇された方がいらっしゃるかもしれませんが、今回はこれが発生する仕様について説明します。
サウンド再生アクションには『サウンドを再生』と『特定のチャンネルでサウンドを再生』の2種類があります。ちなみに『特定のチャンネルでサウンドファイルを再生』もありますが、こちらは動作自体は『特定のチャンネルでサウンドを再生』と同じですが、サウンドをアプリケーションに内蔵せず、外部のファイルを参照して再生するタイプとなります。
筆者は最初の頃は、『サウンドを再生(チャンネルを指定しない方)』は『特定のチャンネルでサウンドを再生(チャンネル1〰32まで)』と違って、無限に音を鳴らせるアクションだと思っていました。
しかし、効果音が大量に再生されると、音が鳴らなかったり、チャンネル指定で鳴らしているBGMが消えてしまう現象に遭遇し、検証したところ、『サウンドを再生』は無限に再生できるわけではない、ということが判りました。
具体的に言いますと、『サウンドを再生』でもチャンネルが消費されており、その仕組みは『空きのチャンネルをサーチしてそこに割り当てる』というものでした。
以下のサンプリプログラムをご覧ください。
cf25_blog_kj_2015-04-19_use_sound_ch.zip
Z,Xキーでサウンドを再生、Cキーで特定のチャンネルでサウンドを再生(チャンネル1を使用)します。リストには使用されているチャンネル番号が表示されます。
チャンネルを指定しないサウンド再生アクションでも、チャンネルが消費されていることが判ります。つまり、チャンネルを指定せずに再生するアクションであっても、同時に鳴らせるのは1〰32の32音まで(Build 292.0以降は48まで)、ということになります。
また、チャンネルを指定してサウンドを再生した後に、チャンネルを指定しないサウンド再生が、空きチャンネルを全て消費しつくしてしまうと、今度はチャンネルを指定してサウンド再生しているチャンネルも使ってしまう仕様のようで、チャンネルを指定して再生している音声が消えてしまいます。
チャンネルを指定してサウンドを再生しているチャンネルを、チャンネルを指定しないサウンド再生のサーチの対象から外すには、『チャンネルをロック』アクションを使用します。ロックされたチャンネルはサウンドを再生アクションによって使用されなくなりますが、その分フリーで使えるチャンネルが1つ減ることになりますのでご注意ください。
チャンネル指定しない音再生イベントが連続すると
音が途切れることがあるのは知っていましたが自動割付で最大32音と言うのは
今回初めて知りました。勉強になります。
チャンネルのロック機能はそのためにあったんですね(^_^;)
>>kousakuさん
ヘルプにも「チャンネルをロックします。 ロックされたチャンネルは、 「サウンドを再生」 アクションに無視されます。」と説明されているのですが、『サウンドを再生』でチャンネルが自動割振されるとは書かれていないので、何のことかと思いますよね(自分も最初はそうでした
ちなみに、サンプルのような形で空きチャンネルを把握するシステムを組めば、『チャンネルを指定して再生』で手動で空きチャンネルを指定しても同じ動作になり、かつ何番チャンネルを消費してるか把握できるので
BGMとは別に効果音だけの音量設定をオプションとして組み込むこともできるようになります。
一応ツッコミを入れさせてもらうと、
「今時MIDIをゲームのBGMに使う人も少ないと思われますので」
これ、そうでもないと思いますよ。
確かにMIDI形式はもう古いファイル形式で、
現状ではmp3、wav、oggなどが主流なのは間違いないですが、
BGMファイルは1ファイルの容量が大きくなりやすいため、
MIDIは容量面で選択する人も割りといたりします。
フリー素材でもいまだにMIDI形式で提供しているサイトさんも結構ありますし、
インディーゲームクリエイター以外の、他の開発環境(プログラムやゲーム制作ツール等)でも
MIDIをサポートしているツールは多いです。
ツールがMIDIをサポートしていないのであれば無視してもいいでしょうけど、
取り扱えるファイル形式については、
ツールをリリースする運営側が軽視するのは正直どうかと思いますよ( ^ ^ ;)
>>ろーくんさん
失礼いたしました。
MIDI自体を貶しているわけではないのですが、Windows標準のMIDI音源がよろしくないので正常に鳴らない(最悪ドラムパートのみ)ファイルも多く、
また再生前の初期化にて待ち時間が発生するなどの理由から、今からゲームを作ろうとしてBGMにMIDIを採用する人はほとんど居ないだろうと認識しておりました。
今回の記事ではMIDIは関係なかったので余計だったかもしれません。反省いたしております。