Skip to content

AudioPlayContext に移行する

akashic-engine@3.9.0 で、 g.AudioPlayContext が追加されました。 フェードインやクロスフェード再生など新しい機能を利用するには、従来の API から g.AudioPlayContext に移行する必要があります。

凡例

g.AudioPlayContext を利用した再生/停止、音量変更

javascript
const bgm1 = scene.asset.getAudio("/assets/bgm1");
const bgm2 = scene.asset.getAudio("/assets/bgm2");

// bgm1 の AudioPlayContext を作成する
const ctx1 = g.game.audio.create(bgm1);

// bgm1 の音量を設定
ctx1.changeVolume(0.3);

// bgm1 の AudioPlayContext を鳴らす
ctx1.play();

// bgm1 の AudioPlayContext を止める
ctx1.stop();

// g.game.audio.create() と g.game.audio.play() のシンタックスシュガー
const ctx2 = g.game.audio.play(bgm2);

// systemId が music の音声アセットに紐づくプレイヤーをすべて停止
g.game.audio.music.stopAll();

従来の API での再生/停止、音量変更

javascript
const bgm1 = scene.asset.getAudio("/assets/bgm1");
const bgmPlayer = bgm1.play(); // bgm1 を鳴らす

bgmPlayer.changeVolume(0.5); // bgm1 の音量を設定
...
bgmPlayer.stop(); // bgm1 を止める

詳細

akashic-engine@3.9.0 以降、音声の再生に g.AudioPlayContext を利用することができます。

従来の API は BGM (systemId"music" の音声アセット) を再生していた際に別の BGM を再生すると元々再生していた方は停止されていました。 一方で g.AudioPlayContext は複数の BGM の同時再生が可能になります。 これによりクロスフェードなど既存の API では実現できなかった機能の提供を可能にします。

INFO

ただし厳密な同時再生数は各環境により変動します。各環境での動作を保証するために、最大の同時再生数は 2 以下にすることを推奨します。

また、 g.AudioPlayContext は音声の初期化と再生が分離したインタフェースになっています。 従来は個別の音声アセットを一度 play() してからでないと音量を調節することができませんでしたが、g.AudioPlayContext を使うと音を鳴らす前に音量の調整が可能になります。

もう一つの変更点として「g.AudioPlayContext は、音声アセットが破棄された時に停止する」という点があります。 従来の方法では、破棄される時に再生中だった音声アセットは、他の BGM を鳴らすまで再生が続くようになっていました。 動作の単純化のため g.AudioPlayContext はこの動作をしません。

そのため g.AudioPlayContext で「シーン遷移を跨いで音声アセットを再生し続ける」場合は注意が必要です。 シーン遷移 (によるシーン破棄) に伴ってアセットが破棄されないようにしてください。 具体的には、遷移先のシーンでも同じアセットを読み込むか、そのアセットをグローバルアセットにすることで、アセットの破棄を避けることができます。 グローバルアセットについては 逆引きリファレンス » グローバルアセットを使う を参照してください。

関連情報