AudioPlayContext に移行する
akashic-engine@3.9.0
で、 g.AudioPlayContext
が追加されました。 フェードインやクロスフェード再生など新しい機能を利用するには、従来の API から g.AudioPlayContext
に移行する必要があります。
凡例
g.AudioPlayContext
を利用した再生/停止、音量変更
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 での再生/停止、音量変更
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
で「シーン遷移を跨いで音声アセットを再生し続ける」場合は注意が必要です。 シーン遷移 (によるシーン破棄) に伴ってアセットが破棄されないようにしてください。 具体的には、遷移先のシーンでも同じアセットを読み込むか、そのアセットをグローバルアセットにすることで、アセットの破棄を避けることができます。 グローバルアセットについては 逆引きリファレンス » グローバルアセットを使う を参照してください。