AudioBuffer
AudioBuffer インターフェイスはメモリー上の短い音声を表すもので、 AudioContext.decodeAudioData() メソッドで音声ファイルから生成されたり、 AudioContext.createBuffer() を使って生のデータから生成されたりします。 AudioBuffer に入れた後、その音声は AudioBufferSourceNode に渡せば再生できます。
これらのオブジェクトは短い、一般的には 45 秒未満の、断片的な音声を保持するために設計されています。それよりも長い音声は、 MediaElementAudioSourceNode (en-US) のオブジェクトが適しています。バッファーには、ノンインターリーブ IEEE754 32bit リニア PCM で、 -1 から +1 の範囲に正規化された形式で格納されます。つまり、 32 ビット浮動小数点バッファーで、それぞれのサンプルは -1.0 から 1.0 の間です。 AudioBuffer に複数のチャンネルがある場合は、それぞれ分かれたバッファーに格納されます。
コンストラクター
AudioBuffer()-
新しい
AudioBufferオブジェクトのインスタンスを生成して返します。
プロパティ
AudioBuffer.sampleRate読取専用-
バッファーに格納された PCM データの 1 秒あたりのサンプル数であるサンプリングレートを表す float を返します。
AudioBuffer.length読取専用-
バッファーに格納された PCM データの秒数で長さを表す整数を返します。
AudioBuffer.duration読取専用-
バッファーに格納された PCM データの時間を秒単位で表す double 値を返します。
AudioBuffer.numberOfChannels読取専用-
バッファーに格納された PCM データによって記述されるディスクリート音声チャンネルの数を表す整数を返します。
メソッド
AudioBuffer.getChannelData()-
引数
channelで定義されたチャンネルに関連付けられた PCM データを含むFloat32Arrayを返します(0は最初のチャンネルを表します)。 AudioBuffer.copyFromChannel()-
AudioBufferの指定されたチャンネルから、サンプルを配列destinationにコピーします。 AudioBuffer.copyToChannel()-
音声バッファー
AudioBufferの指定されたチャンネルに、配列sourceからサンプルをコピーします。
例
次の簡単な例では、 AudioBuffer の生成し、バッファーにランダムなホワイトノイズを書き込む方法を示しています。 webaudio-examples リポジトリーには完全なソースコードと、ライブ実行版があります。
js
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
// AudioContextのサンプルレートで 3 秒間の空のステレオバッファーを生成する
var myArrayBuffer = audioCtx.createBuffer(2, audioCtx.sampleRate * 3, audioCtx.sampleRate);
// バッファにホワイトノイズを書き込む
// -1.0 から 1.0 の間の乱数の値で埋めるだけ
for (var channel = 0; channel < myArrayBuffer.numberOfChannels; channel++) {
// 実際のデータの配列を得る
var nowBuffering = myArrayBuffer.getChannelData(channel);
for (var i = 0; i < myArrayBuffer.length; i++) {
// Math.random() は [0; 1.0] である
// 音声は [-1.0; 1.0] である必要がある
nowBuffering[i] = Math.random() * 2 - 1;
}
}
// AudioBufferSourceNode を得る
// これは AudioBuffer を再生するときに使う AudioNode である
var source = audioCtx.createBufferSource();
// AudioBufferSourceNode にバッファーを設定する
source.buffer = myArrayBuffer;
// AudioBufferSourceNode を出力先に接続すると音声が聞こえるようになる
source.connect(audioCtx.destination);
// 音源の再生を始める
source.start();
仕様書
| Specification |
|---|
| Web Audio API # AudioBuffer |
ブラウザーの互換性
BCD tables only load in the browser