Skip to content

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(bgm1);

 // systemId が music の音声アセットに紐づくプレイヤーをすべて停止
g.game.audio.music.stopAll();
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 を鳴らすには、対象の音声アセットをグローバルアセットにするか、遷移先のシーンでも同一のアセットを読み込むように指定しておく必要があります。 グローバルアセットについては 逆引きリファレンス » グローバルアセットを使う を参照してください。

関連情報