easy-three

create.positionalAudio

create.positionalAudio(soundFile : String, target : Object, props : Object) : PositionalAudio

soundFile - 音声ファイルのパス。
target - 音声を再生するオブジェクト。
props - 設定オブジェクト。
  • refDistance (Number) : 音声の参照距離 (デフォルト : 1)。
  • maxDistance (Number) : 音声の最大距離 (デフォルト : 100)
  • loop (Boolean) : 音声のループ再生 (デフォルト : true)
  • volume (Number) : 音量 (デフォルト : 0.5)
  • distanceModel (String) : 距離モデル (デフォルト : 'exponential')
  • rolloffFactor (Number) : 減衰係数 (デフォルト : 1)
  • innerAngle (Number) : 指向性コーンの内角度 (デフォルト : 360)
  • outerAngle (Number) : 指向性コーンの外角度 (デフォルト : 360)
  • outerGain (Number) : 指向性コーンの外側の音量 (デフォルト : 0)
  • helper (Boolean) : ヘルパーを表示するかどうか (デフォルト : false)
指定したオーディオファイルから点音源を作成します。
点音源は、3D空間内で位置に基づいて音声を再生するためのオブジェクトです。
音源の位置に応じて音量やパンニングが変化します。

refDistance は、音源からの距離がこの値に達するまで音量が減衰しない距離を指定します。
maxDistance は、音源からの距離がこの値を超えると音量が減衰しなくなる距離を指定します。
innerAngle と outerAngle は、指向性コーンの内角度と外角度を指定します。
outerGain は、指向性コーンの外側の音量を指定します。
指向性コーンの内角度内において、音量は向きによる減衰をしません。
指向性コーンの内角度を超え、外角度内においては音量が徐々に減衰します。
外角度を超えた場合、音量は outerGain に設定された値になります。

helper を true に設定すると、点音源の位置と指向性コーンを視覚的に確認できるヘルパーが表示されます。

戻り値である音源は、Meshに持たせることができます。

コードの例

点音源

const { camera, controls, create, animate } = init()
controls.connect();
camera.position.set(0, 1, 0);
controls.target.set(0, 0, 1);

create.ambientLight({ intensity: 0.2 });
create.directionalLight({ intensity: 1, position: [5, 5, -7] });

// 音源をもたせるオブジェクトの作成
const cube = create.cube({ size: 0.2 });

// 点音源の作成
soundRef.current = create.positionalAudio(
  "/easy-three/sound/chill_gravity.mp3",
  camera,
  {
    refDistance: 1,
    maxDistance: 100,
  }
)

// cubeに音源を持たせる
cube.add(soundRef.current);

animate(({ time }) => {
  cube.position.z = 10*Math.abs(Math.sin(time));
});

指向性コーン

innerAngle、outerAngle、outerGainを設定することで、指向性コーンを持つ点音源を作成できます。
指向性コーンは、音源が特定の方向に向かって音を放射するように設定するために使用されます。

const { camera, create, animate } = init()
controls.connect();
camera.position.set(0, 1, 1);

create.ambientLight({ intensity: 0.2 });
create.directionalLight({ intensity: 1, position: [5, 5, -7] });

// 音源をもたせるオブジェクトの作成
const cube = create.cube({ size: 0.5 });

// 点音源の作成
soundRef.current = create.positionalAudio(
  "/easy-three/sound/chill_gravity.mp3",
  camera,
  {
    refDistance: 1,
    maxDistance: 100,
    innerAngle: 60,
    outerAngle: 180,
    outerGain: 0,
  }
)

// cubeに音源を持たせる
cube.add(soundRef.current);
// 指向性コーンの向きを設定
cube.lookAt(0, 0, 0);

animate(({ time }) => {
  cube.rotation.y += 0.01;
});