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(bgm1);
// systemId が music の音声アセットに紐づくプレイヤーをすべて停止
g.game.audio.music.stopAll();
詳細
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
は音声アセットとシーンのライフサイクルが同一になります。 従来の API はシーン遷移後も BGM が再生され続け、アセットが不要になっても破棄が遅延されました。 これはエンジン内部でのアセット管理を単純化した際に生じた挙動を反映したものです。
シーンを跨いで BGM を鳴らすには、対象の音声アセットをグローバルアセットにするか、遷移先のシーンでも同一のアセットを読み込むように指定しておく必要があります。 グローバルアセットについては 逆引きリファレンス » グローバルアセットを使う を参照してください。