Appearance
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'。autoplay—trueのとき、読み込み完了後に自動再生します。 デフォルトはfalse。loop—trueのとき、ループ再生します。デフォルトは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: 魔王魂)