Skip to content

Soundクラス

a3.Soundは音声ファイルを読み込んで再生するクラスです。 ObjectA3を継承しているので、シーンや他のオブジェクトに add()して3D空間内に配置します。

読み込みは非同期なのでawait sound.readyで完了を待ってから play()を呼び出します。再生前にa3.initSound()による初期化が 必要です(サウンドについてを参照)。

js
const bgm = new a3.Sound('bgm.mp3', { loop: true });
await bgm.ready;
view.scene.add(bgm);
bgm.play();

再生はplay()(再生中なら最初から再生し直します)、停止は stop()です。

生成オプション

new a3.Sound(file, options)のオプションには以下のものがあります。

  • type — サウンドの種類。'audio'または'positional'。 デフォルトは'audio'
  • autoplaytrueのとき、読み込み完了後に自動再生します。 デフォルトはfalse
  • looptrueのとき、ループ再生します。デフォルトはfalse
  • volume — 音量。0.0〜1.0の範囲。デフォルトは1.0
  • positional'positional'タイプのときの詳細オプション (後述)。

positionalタイプのサンプル

type: 'positional'にすると、3D空間内の音源の位置とカメラ (リスナー)の位置関係で音量や左右の定位が変化します。音源を オブジェクトにadd()すると、オブジェクトと一緒に音源も動きます。

js
import * as a3 from 'a3js';

const view = new a3.Window(600,300);
await view.alert('ボタンを押すとスタートします', a3.initSound);
a3.Sound.listener.setMasterVolume(0.5); // 全体のボリューム設定

const obj = new a3.SampleObject(); // 音源の位置がわかるように表示
view.scene.add(obj);

const opt = { type: 'positional', loop: true };
const sound = await new a3.Sound('/a3js/assets/maou_bgm_8bit29.ogg',opt).ready;
obj.add(sound);
sound.play();

// 音源がカメラの周りを回る。ステレオで聞けば左右に音が動く。
let t = 0;
while (true) {
  t += await view.waitForRender();
  obj.setPosition(10*Math.cos(-t),0,10*Math.sin(-t)+3);
}

positionalオプションで距離による減衰を調整できます。

  • refDistance — 音量が基準値になる距離。これより近いと最大音量。 デフォルトは1
  • maxDistance — 音が聞こえなくなる最大距離。デフォルトは1000
  • rolloffFactor — 距離による音量の減衰率。デフォルトは1

指向性コーン(音の出る方向の限定)

positional.directionalオプションで、音が出る方向を円錐(コーン) 状に限定できます。スピーカーやキャラクターの声のように、向いている 方向にだけ音を出したい場合に使います。

js
const directional = { coneInnerAngle:30, coneOuterAngle: 90, coneOuterGain: 0.1 };
const opt = { type: 'positional', loop: true, positional: { directional } };
const sound = await new a3.Sound('/a3js/assets/maou_bgm_8bit29.ogg',opt).ready;
  • coneInnerAngle — 内側コーン角度(度)。この範囲内では最大音量。 デフォルトは360(全方向)。
  • coneOuterAngle — 外側コーン角度(度)。デフォルトは360
  • coneOuterGain — 外側コーンの外での音量係数(0で無音)。 デフォルトは0

詳細はAPIドキュメントを 参照してください。

(このページのサンプルのBGM: 魔王魂