AudioBufferSourceNode
=====================

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

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

EventTarget

AudioNode

AudioScheduledSourceNode

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

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

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

![AudioBufferSourceNodeは、AudioBufferの中身を受け取る](/ja/docs/Web/API/AudioBufferSourceNode/webaudioaudiobuffersourcenode.png)


|  |  |
| --- | --- |
| 入力数 | `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`

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

メソッド
----

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

`AudioBufferSourceNode.start()`

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

### イベントハンドラー

*親である `AudioScheduledSourceNode` のイベントハンドラーを継承しています。*

例
-

次の例は、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 with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* ウェブオーディオ API の使用
* ウェブオーディオ API