Skip to content

サウンドについて

初期化が必要な理由

ウェブブラウザには「ユーザーの操作なしに音を鳴らしてはいけない」 という自動再生のポリシーがあります。ページを開いた瞬間に勝手に 音が鳴るのを防ぐためのしくみで、音声の再生機能(AudioContext)は クリックなどのユーザー操作をきっかけにしないと有効化できません。

そのためa3jsでも、音を使う前にユーザーの操作をきっかけとした 初期化が必要です。この初期化が完了しないと音声は再生されません。

初期化の方法

初期化はa3.initSound()で行います。必ずクリックなどの ユーザー操作のコールバック内で呼び出してください。

Viewのalert()の第2引数に渡すのが簡単な方法です。OKボタンの クリックをきっかけに初期化が実行されます。

js
await view.alert('音声が再生されます。', a3.initSound);

ボタンなど自分で用意したUIから初期化することもできます。

js
button.addEventListener('click', async () => {
  await a3.initSound();
});

全体の音量はa3.Sound.listener.setMasterVolume(0.5);のように 設定できます。

サウンドの種類

a3jsで音を鳴らす方法は大きく2つあります。

1つ目はSoundクラスを使う方法です。音声ファイルを 読み込んで再生します。種類(type)が2つあります。

  • audio — 距離に関係なく一定音量で再生されます。BGMなどに 適しています(デフォルト)。
  • positional — 3D空間内の位置に基づいて音量や左右の定位が 変化するポジショナルオーディオです。効果音などに適しています。

2つ目はAcerola3D(.a3)ファイルに含まれるサウンドです。 アクションの再生に合わせて自動的に音が鳴ります。

Acerola3D内蔵サウンドのサンプル

足音のサウンドが含まれたAcerola3Dのモデルを再生するサンプルです。 walkrunのアクションに合わせて足音が鳴ります。

js
import * as a3 from 'a3js';

const view = new a3.Window(600,300);
await view.alert('音声が再生されます。', a3.initSound);
a3.Sound.listener.setMasterVolume(0.3);
const obj = await new a3.Acerola3D('/a3js/assets/footfalls.a3').ready;
obj.setState('walk');
view.scene.add(obj);
await a3.asyncSleep(2000);
obj.setState('run');

Soundクラス

Soundクラスの詳しい使い方はSoundクラスのページを 参照してください。