ブラウザゲームのBGMメモ

ファイルをプラグイン外に置く時

用途推奨形式理由
BGMMP3 (+ OGG を fallback)圧縮率が高く、ループ再生に向いている
SEWebM/OGG (+ MP3 を fallback)遅延が少なく、短音の再生に最適

BGM には MP3 が最適

  • 全ブラウザ対応で安心
  • ファイルサイズを小さく抑えられる(サーバー負荷・読み込み速度)
  • ループ再生(audio.loop = true)も問題なく動作
  • ビットレートは 128kbps 程度で十分(192kbpsでも可)

SE には OGG / WebM が最適

  • MP3より再生遅延(レイテンシ)が少ない
  • ゲームのSEは「タイミングが命」なので遅延は致命的
  • ただしSafariがOGGを非対応なので MP3をfallbackに用意するのがベスト

実装例(Web Audio API推奨)

WordPress特有の注意点

MIMEタイプの許可

WordPressはデフォルトでOGG/WebMをメディアライブラリにアップロードできない場合があります。functions.php に追加:

ファイルの置き場所

メディアライブラリより、テーマフォルダや専用ディレクトリに置く方が管理しやすいです:

まとめ

プラグインフォルダからMP3を呼び出す方法

フォルダ構成(推奨)

PHPでURLを取得する

plugins_url() を使うのがWordPress公式の正しいやり方です。

ショートコードへの組み込み例

MIMEタイプの許可も忘れずに

OGGを使う場合、プラグインの your-plugin.php に追記:

ポイントまとめ

やること関数・方法
プラグイン内ファイルのURL取得plugins_url('パス', __FILE__)
JavaScriptへのURL受け渡しPHPをscriptタグ内に直接埋め込む
OGGのアップロード許可upload_mimes フィルター

Web Audio APIで事前読み込みする方法

new Audio() を毎回作るのではなく、ゲーム開始前に一括でバッファに読み込んでおくやり方です。

基本的な仕組み

ゲーム開始時の使い方

new Audio() との比較

new Audio()Web Audio API(バッファ)
読み込みタイミング毎回起動時に1回だけ
再生の遅延あり(数十〜数百ms)ほぼゼロ
連打・重複再生不安定安定して対応できる
音量・エフェクト制御限定的細かく制御可能
コード量少ないやや多い

注意点

AudioContextはユーザー操作後に作ることが重要です。ページ読み込み直後に new AudioContext() を作るとブラウザに止められる場合があります。「ゲームスタートボタンを押した時」に作るのがベストです。

AudioContextは有限

audioCtx と seBuffers のリセットについて

audioCtx は null にしない方が良いです

AudioContext はブラウザがユーザー操作ごとに作れる数に制限があります(概ね6〜8個)。nullにして毎回 new AudioContext() を作り直すと、ゲームを繰り返すうちに上限に達して警告や不具合が出ることがあります。

推奨:一度作ったら使い回す

seBuffers はゲームをまたいで同じSEを使うなら不要です

同じSEを次のゲームでも使うなら、nullにせず持ち続けた方が効率的です。

推奨理由
audioCtx使い回す作れる数に上限がある
seBuffers使い回す毎回fetchが不要になり速い
BGMのAudio()オブジェクト毎回null化してOK軽いので問題なし

SEとaudioCtxはゲームをまたいで持ち続け、BGMだけ都度作り直すのが一番シンプルです!

ページリロード時のaudioCtxについて

結論:リロードで自動的に破棄されます

ページがリロードされるとJavaScriptの実行環境ごとリセットされるので、audioCtx を含む全ての変数は消えます。

リロード時に起きること

ブラウザが持つAudioContextの個数制限もリロードでリセットされるので、何も心配しなくて大丈夫です。

つまりこういうことです

タイミングaudioCtx
同一ページ内でゲームを繰り返す使い回す(nullにしない)
ページリロード自動で破棄・解放される

コメント

タイトルとURLをコピーしました