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, a 32-bit floating point buffer, with each sample between -1.0 and 1.0. If the AudioBuffer has multiple channels, they are stored in separate buffers.
Constructor
AudioBuffer()-
Creates and returns a new
AudioBufferobject instance.
Properties
-
AudioBuffer.sampleRateRead only -
Returns a float representing the sample rate, in samples per second, of the PCM data stored in the buffer.
-
AudioBuffer.lengthRead only -
Returns an integer representing the length, in sample-frames, of the PCM data stored in the buffer.
-
AudioBuffer.durationRead only -
Returns a double representing the duration, in seconds, of the PCM data stored in the buffer.
-
AudioBuffer.numberOfChannelsRead 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
Float32Arraycontaining the PCM data associated with the channel, defined by thechannelparameter (with0representing the first channel). AudioBuffer.copyFromChannel()-
Copies the samples from the specified channel of the
AudioBufferto thedestinationarray. AudioBuffer.copyToChannel()-
Copies the samples to the specified channel of the
AudioBuffer, from thesourcearray.
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 |
|---|
| Web Audio API # AudioBuffer |
Browser compatibility
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
AudioBuffer |
14 |
12 |
25 |
No |
15 |
6 |
≤37 |
18 |
25 |
14 |
6 |
1.0 |
AudioBuffer |
55
The
context parameter was supported up until version 57, but has now been removed. |
79 |
53 |
No |
42
The
context parameter was supported up until version 44, but has now been removed. |
14.1 |
55
The
context parameter was supported up until version 57, but has now been removed. |
55
The
context parameter was supported up until version 57, but has now been removed. |
53 |
42
The
context parameter was supported up until version 44, but has now been removed. |
14.5 |
6.0
The
context parameter was supported up until Samsung Internet 7.0, but has now been removed. |
copyFromChannel |
43 |
13 |
25 |
No |
30 |
14.1 |
43 |
43 |
25 |
30 |
14.5 |
4.0 |
copyToChannel |
43 |
13 |
25 |
No |
30 |
14.1 |
43 |
43 |
25 |
30 |
14.5 |
4.0 |
duration |
14 |
12 |
25 |
No |
15 |
6 |
≤37 |
18 |
25 |
14 |
6 |
1.0 |
getChannelData |
14 |
12 |
25 |
No |
15 |
6 |
≤37 |
18 |
25 |
14 |
6 |
1.0 |
length |
14 |
12 |
25 |
No |
15 |
6 |
≤37 |
18 |
25 |
14 |
6 |
1.0 |
numberOfChannels |
14 |
12 |
25 |
No |
15 |
6 |
≤37 |
18 |
25 |
14 |
6 |
1.0 |
sampleRate |
14 |
12 |
25 |
No |
15 |
6 |
≤37 |
18 |
25 |
14 |
6 |
1.0 |
See also
© 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer