ツクールMVでBGM/BGSをプリロードする方法

ブラウザ版にデプロイした時などで、
なぜか音楽が遅れて聞こえてきたことはありませんか?
そういう時は大抵、音楽ファイルが事前に読みこまれていないのが原因です。

今回の記事では、そういったトラブルを予防するために、
事前にBGM/BGSをプリロードする方法を教えます。

イベントコマンド:BGMのプリロード

◆BGMの演奏:【プリロードしたいBGM】(音量ゼロ)
◆ループ
 ◆条件分岐:スクリプト:!!AudioManager._bgmBuffer._buffer
  ◆ループの中断
  ◆
 :分岐終了

 ◆ウェイト:1フレーム
 ◆
:以上繰り返し

◆BGMの演奏:なし

このように処理を書けば、プリロードができます。

イベントコマンド:BGSのプリロード

◆BGSの演奏:【プリロードしたいBGS】(音量ゼロ)
◆ループ
 ◆条件分岐:スクリプト:!!AudioManager._bgsBuffer._buffer
  ◆ループの中断
  ◆
 :分岐終了

 ◆ウェイト:1フレーム
 ◆
:以上繰り返し

◆BGSの演奏:なし

BGMと微妙に違います。間違えないように!

解説

まずBGM/BGSを無音で演奏

最初にプリロードしたいBGM/BGSを鳴らします。BGM/BGSの演奏コマンドが読み込まれると、BGM/BGSの「読み込み」が開始されます。
RPGツクールMVは、再生予定のBGM/BGSが完全に読み込まれて初めて再生が始まるので、通信速度やマシン性能により読み込みが遅ければ遅い分、ラグってしまうわけです。

バッファにBGM/BGSのデータが入るまで待機

BGM/BGSのデータはそれぞれAudioManagerの専用バッファ「_bgmBuffer」「_bgsBuffer」に送られます。何も再生予定が無い時はこれらのバッファはNULLで、BGM/BGSを読み込み中~再生になるとWebAudioのデータが入っています。
読み込みが完了するまでの間はこれらのバッファの中にある「_buffer」がNULLになっているので、読み込みが完了する(NULLでなくなる)までの間、ループとウェイトで待機します。ウェイトを挟むのは、負荷を軽減するためです。

ループを抜けたらプリロード完了

読み込みの完了により「_buffer」がNULLでなくなることで、ループが中断されると、そのBGM/BGSのプリロードは完了です。
次のBGM/BGSをプリロードしたいなら、同じ事を繰り返せばOK。最後にBGM/BGSを停止しておくことをお勧めします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*