AudioBufferSourceNode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.

AudioBufferSourceNodeAudioScheduledSourceNode を継承するインターフェイスで、 AudioBuffer に保存されたメモリー内の音声データからなる音声ソースを表します。

このインターフェイスは、再生するタイミングに高い正確性が求められる音声を繰り返し再生する場合特に有益です。例えば、特定のリズムに合わせて、ディスクやネットワークからではなくメモリーから読み出した音声を再生するといった場合です。正確なタイミングで音声を再生したいものの、音声データをディスクやネットワークから読み込む必要がある場合は AudioWorkletNode を使用してください。

EventTarget AudioNode AudioScheduledSourceNode AudioBufferSourceNode

AudioBufferSourceNode は入力がなく、その出力は 1 つで、出力されるチャンネル数は AudioBufferbuffer プロパティで示します。バッファーが設定されていない場合、すなわち、 buffernull である場合、出力は無音(すべてのサンプルが 0)の単一のチャンネルとなります。

AudioBufferSourceNode は一度しか再生できません。つまり、同じ音を再び再生したいのであれば、 start() を呼び出すたびに新しいノードを作成する必要があります。幸いなことに、これらのノードはとても安価に作成でき、実際の AudioBuffer は複数回のサウンド再生に再利用することができます。実際、これらのノードは「使い捨て」で使用することができます。ノードを作成し、 start() を呼び出して音の再生を始め、わざわざそのノードの参照を保持する必要はないでしょう。このノードは適切なタイミングで自動的にガベージコレクションされますが、それはサウンドの再生が完了した後しばらくしてからになります。

stop() は何度も呼び出すことができます。 AudioBufferSourceNode がバッファーのー最後に達していないならば、最後の呼び出しがその前の呼び出しを上書きします。

AudioBufferSourceNodeは、AudioBufferの中身を受け取る

入力数 0
出力数 1
チャンネル数 関連付けられた AudioBuffer によって定義される

コンストラクター

AudioBufferSourceNode()

新しい AudioBufferSourceNode オブジェクトを作成して返します。代替手段として、 BaseAudioContext.createBufferSource() を使用することもできます。詳しくは AudioNode の作成を参照してください。

プロパティ

親である AudioScheduledSourceNode のプロパティを継承しています。

AudioBufferSourceNode.buffer

再生する音声資産を定義する AudioBuffer で、この値を null に設定すると、 1 つの無音チャンネル(すべてのサンプルが 0.0 になる)を定義します。

AudioBufferSourceNode.detune

k-rateAudioParam 再生時の離調をセント単位で表します。この値は playbackRate と合成され、音を再生する速度を決定します。既定値で 0 (離調なし)、公称範囲は -∞ から ∞ です。

AudioBufferSourceNode.loop

論理値で、 AudioBuffer の終わりに達したとき、音声資産を再生しなければならないかどうかを示します。既定値は false です。

AudioBufferSourceNode.loopStart 省略可

浮動小数点数で、 looptrue のときに AudioBuffer の再生を開始しなければならない時刻を秒単位で表します。既定値では 0 です(各ループの開始時に、音声バッファーの先頭から再生が始まることを意味します)。

AudioBufferSourceNode.loopEnd 省略可

浮動小数点数で、 looptrue の場合に AudioBuffer の再生が停止して loopStart で示した時刻に戻る時刻を、秒単位で表します。既定値は 0 です。

AudioBufferSourceNode.playbackRate

k-rateAudioParam 音声資産を再生する際の速度係数を定義したもので、値 1.0 は音声の自然サンプリングレートとなります。出力にはピッチ補正が適用されないので、サンプルのピッチを変更するために使用することができます。この値は detune と合成され、最終的な再生レートを決定します。

メソッド

親である AudioScheduledSourceNode のメソッドを継承しています。

AudioBufferSourceNode.start()

バッファーに格納された音声データの再生予約を行うか、または直ちに再生を開始します。また、開始オフセットと再生時間を設定することができます。

次の例は、2 秒間のバッファーをー生成し、ホワイトノイズを書き込み、 AudioBufferSourceNode で再生します。コメントは何をしているかを簡単に説明しています。

メモ: コードをライブで実行したり、ソースコードを閲覧したりすることもできます。

js
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();

// AudioContext のサンプリングレートで空の 3 秒のステレオバッファーを作成
const myArrayBuffer = audioCtx.createBuffer(
  2,
  audioCtx.sampleRate * 3,
  audioCtx.sampleRate,
);

// バッファーにホワイトノイズを書き込む
// 単なる -1.0 から 1.0 の間の乱数の値である
for (let channel = 0; channel < myArrayBuffer.numberOfChannels; channel++) {
  // 実際のデータの配列を得る
  const nowBuffering = myArrayBuffer.getChannelData(channel);
  for (let i = 0; i < myArrayBuffer.length; i++) {
    // Math.random() は [0; 1.0] である
    // 音声は [-1.0; 1.0] である必要がある
    nowBuffering[i] = Math.random() * 2 - 1;
  }
}

// AudioBufferSourceNode を得る
// これは AudioBuffer を再生するときに使う AudioNode である
const source = audioCtx.createBufferSource();
// AudioBufferSourceNode にバッファーを設定する
source.buffer = myArrayBuffer;
// AudioBufferSourceNode を出力先に接続すると
// 音声が聞こえるようになる
source.connect(audioCtx.destination);
// 音源の再生を始める
source.start();

メモ: decodeAudioData() の例は、AudioContext.decodeAudioData() のページを参照してください。

仕様書

Specification
Web Audio API
# AudioBufferSourceNode

ブラウザーの互換性

BCD tables only load in the browser

関連情報