TOP | ブログ一覧へ

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

thumb

0000/01/01
カテゴリ: ツクールMV | タグ: 古い記事 プリロード


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

今回の記事では、そういったトラブルを予防するために、 事前に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を停止しておくことをお勧めします。



TOP | ブログ一覧へ