ブラウザ版にデプロイした時などで、 なぜか音楽が遅れて聞こえてきた ことはありませんか? そういう時は大抵、 音楽ファイルが事前に読みこまれていない のが原因です。
今回の記事では、そういったトラブルを予防するために、 事前にBGM/BGSをプリロードする方法 を教えます。
◆BGMの演奏:【プリロードしたいBGM】(音量ゼロ)
◆ループ
◆条件分岐:スクリプト: !!AudioManager._bgmBuffer._buffer
◆ループの中断
◆
:分岐終了
◆ウェイト:1フレーム
◆
:以上繰り返し
◆BGMの演奏:なし
このように処理を書けば、プリロードができます。
◆BGSの演奏:【プリロードしたいBGS】(音量ゼロ)
◆ループ
◆条件分岐:スクリプト:!!AudioManager._bgsBuffer._buffer
◆ループの中断 ^^^^^^^^^^^
◆
:分岐終了
◆ウェイト:1フレーム
◆
:以上繰り返し
◆BGSの演奏:なし
BGMと微妙に違います。間違えないように!
最初にプリロードしたいBGM/BGSを鳴らします。BGM/BGSの演奏コマンドが読み込まれると、BGM/BGSの「読み込み」が開始されます。
RPGツクールMVは、再生予定のBGM/BGSが完全に読み込まれて初めて再生が始まるので、通信速度やマシン性能により読み込みが遅ければ遅い分、ラグってしまうわけです。
BGM/BGSのデータはそれぞれAudioManagerの専用バッファ「_bgmBuffer」「_bgsBuffer」に送られます。何も再生予定が無い時はこれらのバッファはNULLで、BGM/BGSを読み込み中~再生になるとWebAudioのデータが入っています。
読み込みが完了するまでの間はこれらのバッファの中にある「_buffer」がNULLになっているので、読み込みが完了する(NULLでなくなる)までの間、ループとウェイトで待機します。ウェイトを挟むのは、負荷を軽減するためです。
読み込みの完了により「_buffer」がNULLでなくなることで、ループが中断されると、そのBGM/BGSのプリロードは完了です。
次のBGM/BGSをプリロードしたいなら、同じ事を繰り返せばOK。最後にBGM/BGSを停止しておくことをお勧めします。