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.
AudioBufferSourceNode
は AudioScheduledSourceNode
を継承するインターフェイスで、 AudioBuffer
に保存されたメモリー内の音声データからなる音声ソースを表します。
このインターフェイスは、再生するタイミングに高い正確性が求められる音声を繰り返し再生する場合特に有益です。例えば、特定のリズムに合わせて、ディスクやネットワークからではなくメモリーから読み出した音声を再生するといった場合です。正確なタイミングで音声を再生したいものの、音声データをディスクやネットワークから読み込む必要がある場合は AudioWorkletNode
を使用してください。
AudioBufferSourceNode
は入力がなく、その出力は 1 つで、出力されるチャンネル数は AudioBuffer
の buffer
プロパティで示します。バッファーが設定されていない場合、すなわち、 buffer
が null
である場合、出力は無音(すべてのサンプルが 0)の単一のチャンネルとなります。
AudioBufferSourceNode
は一度しか再生できません。つまり、同じ音を再び再生したいのであれば、 start()
を呼び出すたびに新しいノードを作成する必要があります。幸いなことに、これらのノードはとても安価に作成でき、実際の AudioBuffer
は複数回のサウンド再生に再利用することができます。実際、これらのノードは「使い捨て」で使用することができます。ノードを作成し、 start()
を呼び出して音の再生を始め、わざわざそのノードの参照を保持する必要はないでしょう。このノードは適切なタイミングで自動的にガベージコレクションされますが、それはサウンドの再生が完了した後しばらくしてからになります。
stop()
は何度も呼び出すことができます。 AudioBufferSourceNode
がバッファーのー最後に達していないならば、最後の呼び出しがその前の呼び出しを上書きします。
入力数 | 0 |
---|---|
出力数 | 1 |
チャンネル数 | 関連付けられた AudioBuffer によって定義される |
コンストラクター
AudioBufferSourceNode()
-
新しい
AudioBufferSourceNode
オブジェクトを作成して返します。代替手段として、BaseAudioContext.createBufferSource()
を使用することもできます。詳しくは AudioNode の作成を参照してください。
プロパティ
親である AudioScheduledSourceNode
のプロパティを継承しています。
AudioBufferSourceNode.buffer
-
再生する音声資産を定義する
AudioBuffer
で、この値をnull
に設定すると、 1 つの無音チャンネル(すべてのサンプルが 0.0 になる)を定義します。 AudioBufferSourceNode.detune
-
k-rate の
AudioParam
再生時の離調をセント単位で表します。この値はplaybackRate
と合成され、音を再生する速度を決定します。既定値で0
(離調なし)、公称範囲は -∞ から ∞ です。 AudioBufferSourceNode.loop
-
論理値で、
AudioBuffer
の終わりに達したとき、音声資産を再生しなければならないかどうかを示します。既定値はfalse
です。 AudioBufferSourceNode.loopStart
省略可-
浮動小数点数で、
loop
がtrue
のときにAudioBuffer
の再生を開始しなければならない時刻を秒単位で表します。既定値では0
です(各ループの開始時に、音声バッファーの先頭から再生が始まることを意味します)。 AudioBufferSourceNode.loopEnd
省略可-
浮動小数点数で、
loop
がtrue
の場合にAudioBuffer
の再生が停止してloopStart
で示した時刻に戻る時刻を、秒単位で表します。既定値は0
です。 AudioBufferSourceNode.playbackRate
-
k-rate の
AudioParam
音声資産を再生する際の速度係数を定義したもので、値 1.0 は音声の自然サンプリングレートとなります。出力にはピッチ補正が適用されないので、サンプルのピッチを変更するために使用することができます。この値はdetune
と合成され、最終的な再生レートを決定します。
メソッド
親である AudioScheduledSourceNode
のメソッドを継承しています。
AudioBufferSourceNode.start()
-
バッファーに格納された音声データの再生予約を行うか、または直ちに再生を開始します。また、開始オフセットと再生時間を設定することができます。
例
次の例は、2 秒間のバッファーをー生成し、ホワイトノイズを書き込み、 AudioBufferSourceNode
で再生します。コメントは何をしているかを簡単に説明しています。
メモ: コードをライブで実行したり、ソースコードを閲覧したりすることもできます。
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