W3cubDocs

/DOM

AudioBuffer

The AudioBuffer interface represents a short audio asset residing in memory, created from an audio file using the AudioContext.decodeAudioData() method, or from raw data using AudioContext.createBuffer(). Once put into an AudioBuffer, the audio can then be played by being passed into an AudioBufferSourceNode.

Objects of these types are designed to hold small audio snippets, typically less than 45 s. For longer sounds, objects implementing the MediaElementAudioSourceNode are more suitable. The buffer contains data in the following format: non-interleaved IEEE754 32-bit linear PCM with a nominal range between -1 and +1, that is, 32bits floating point buffer, with each samples between -1.0 and 1.0. If the AudioBuffer has multiple channels, they are stored in separate buffer.

Constructor

AudioBuffer()
Creates and returns a new AudioBuffer object instance.

Properties

AudioBuffer.sampleRate Read only
Returns a float representing the sample rate, in samples per second, of the PCM data stored in the buffer.
AudioBuffer.length Read only
Returns an integer representing the length, in sample-frames, of the PCM data stored in the buffer.
AudioBuffer.duration Read only
Returns a double representing the duration, in seconds, of the PCM data stored in the buffer.
AudioBuffer.numberOfChannels Read only
Returns an integer representing the number of discrete audio channels described by the PCM data stored in the buffer.

Methods

AudioBuffer.getChannelData()
Returns a Float32Array containing the PCM data associated with the channel, defined by the channel parameter (with 0 representing the first channel).
AudioBuffer.copyFromChannel()
Copies the samples from the specified channel of the AudioBuffer to the destination array.
AudioBuffer.copyToChannel()
Copies the samples to the specified channel of the AudioBuffer, from the source array.

Example

The following simple example shows how to create an AudioBuffer and fill it with random white noise. You can find the full source code at our webaudio-examples repository; a running live version is also available.

var audioCtx = new (window.AudioContext || window.webkitAudioContext)();

// Create an empty three-second stereo buffer at the sample rate of the AudioContext
var myArrayBuffer = audioCtx.createBuffer(2, audioCtx.sampleRate * 3, audioCtx.sampleRate);

// Fill the buffer with white noise;
// just random values between -1.0 and 1.0
for (var channel = 0; channel < myArrayBuffer.numberOfChannels; channel++) {
  // This gives us the actual array that contains the data
  var nowBuffering = myArrayBuffer.getChannelData(channel);
  for (var i = 0; i < myArrayBuffer.length; i++) {
    // Math.random() is in [0; 1.0]
    // audio needs to be in [-1.0; 1.0]
    nowBuffering[i] = Math.random() * 2 - 1;
  }
}

// Get an AudioBufferSourceNode.
// This is the AudioNode to use when we want to play an AudioBuffer
var source = audioCtx.createBufferSource();

// set the buffer in the AudioBufferSourceNode
source.buffer = myArrayBuffer;

// connect the AudioBufferSourceNode to the
// destination so we can hear the sound
source.connect(audioCtx.destination);

// start the source playing
source.start();

Specifications

Specification Status Comment
Web Audio API
The definition of 'AudioBuffer' in that specification.
Working Draft Initial definition.

Browser compatibilityUpdate compatibility data on GitHub

Desktop
Chrome Edge Firefox Internet Explorer Opera Safari
Basic support 14 Yes 25 No 15 6
AudioBuffer() constructor 55
55
The context parameter was supported up until version 57, but has now been removed.
? 53 No 42
42
The context parameter was supported up until version 44, but has now been removed.
?
duration 14 12 25 No 15 6
length 14 12 25 No 15 6
numberOfChannels 14 12 25 No 15 6
sampleRate 14 12 25 No 15 6
copyFromChannel 14 13 25 No 15 6
copyToChannel 14 13 25 No 15 6
getChannelData 14 12 25 No 15 6
Mobile
Android webview Chrome for Android Edge Mobile Firefox for Android Opera for Android iOS Safari Samsung Internet
Basic support Yes 18 Yes 26 15 ? Yes
AudioBuffer() constructor 55
55
The context parameter was supported up until version 57, but has now been removed.
55
55
The context parameter was supported up until version 57, but has now been removed.
? 53 42
42
The context parameter was supported up until version 44, but has now been removed.
? 6.0
duration Yes 18 Yes 26 15 ? Yes
length Yes 18 Yes 26 15 ? Yes
numberOfChannels Yes 18 Yes 26 15 ? Yes
sampleRate Yes 18 Yes 26 15 ? Yes
copyFromChannel Yes 18 Yes 26 15 ? Yes
copyToChannel Yes 18 Yes 26 15 ? Yes
getChannelData Yes 18 Yes 26 15 ? Yes

See also

© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer