Skip to content

オーディオプラグイン (SoundManager) ​

v1.2.1 の注意点: PlutoEngine は現在、最大限のパフォーマンスを引き出すために WebGPU、InstanceBufferArena、SoA、および Flyweight pattern (Zero-Allocation) を利用しています。

@pluto-engine/audio は、Web Audio API をフル活用した強力なサウンドシステムです。PlutoEngine v1.2.1 では、大量の敵が同時に爆発した際などに音が割れる(クリッピングする)のを防ぐマスターリミッターや、GC(ガベージコレクション)スパイクを防ぐオーディオノードの事前割り当てプーリング機構を内蔵しています。

インストールと登録 ​

typescript
import { SoundPlugin } from '@pluto-engine/audio';

export class MyScene extends Scene {
  public init() {
    // Scene にオーディオ機能を注入
    this.registerPlugin(new SoundPlugin());
  }

  public create() {
    // 事前割り当て済みプールから音を再生 (GCフリー)
    this.sound.play('explosion', { volume: 0.8 });
  }
}

主な機能 ​

1. ゼロアロケーション・プーリング ​

Web Audio APIの仕様上 AudioBufferSourceNode は使い捨てですが、PlutoEngine では空間オーディオ用の PannerNode や音量制御の GainNode を再利用可能な VoiceNode としてプールし、メモリ確保のオーバーヘッドを極限まで削っています。再生ループ内でのオブジェクトの確保は発生しません。

2. マスターリミッター ​

出力の最終段に DynamicsCompressorNode が接続されているため、100個のサウンドエフェクトが完全に同時に鳴っても、耳を劈くようなノイズが発生しません。

3. 空間オーディオ (Spatial Panning) ​

ステレオパンニングに対応しています。

typescript
this.sound.play('laser', { pan: -1.0 }); // 左から鳴る
this.sound.play('laser', { pan: 1.0 });  // 右から鳴る