Web/API/AudioBufferSourceNode

From Get docs

The AudioBufferSourceNode' ' interface is an AudioScheduledSourceNode which represents an audio source consisting of in-memory audio data, stored in an AudioBuffer. It's especially useful for playing back audio which has particularly stringent timing accuracy requirements, such as for sounds that must match a specific rhythm and can be kept in memory rather than being played from disk or the network. To play sounds which require accurate timing but must be streamed from the network or played from disk, use a AudioWorkletNode to implement its playback.

An AudioBufferSourceNode has no inputs and exactly one output, which has the same number of channels as the AudioBuffer indicated by its buffer property. If there's no buffer set—that is, if buffer is null—the output contains a single channel of silence (every sample is 0).

An AudioBufferSourceNode can only be played once; after each call to start(), you have to create a new node if you want to play the same sound again. Fortunately, these nodes are very inexpensive to create, and the actual AudioBuffers can be reused for multiple plays of the sound. Indeed, you can use these nodes in a "fire and forget" manner: create the node, call start() to begin playing the sound, and don't even bother to hold a reference to it. It will automatically be garbage-collected at an appropriate time, which won't be until sometime after the sound has finished playing.

Multiple calls to stop() are allowed. The most recent call replaces the previous one, if the AudioBufferSourceNode has not already reached the end of the buffer.

[[File:../../../../../media.prod.mdn.mozit.cloud/attachments/2014/12/07/9717/abc239c54684343bc8110d742667cdef/WebAudioAudioBufferSourceNode.png|The AudioBufferSourceNode takes the content of an AudioBuffer and m]]

Number of inputs 0
Number of outputs 1
Channel count defined by the associated AudioBuffer

Constructor

AudioBufferSourceNode()
Creates and returns a new AudioBufferSourceNode object. An AudioBufferSourceNode can be instantiated using the AudioContext.createBufferSource() method.

Properties

Inherits properties from its parent, AudioScheduledSourceNode.

AudioBufferSourceNode.buffer
An AudioBuffer that defines the audio asset to be played, or when set to the value null, defines a single channel of silence (in which every sample is 0.0).
AudioBufferSourceNode.detune
Is a k-rate AudioParam representing detuning of playback in cents. This value is compounded with playbackRate to determine the speed at which the sound is played. Its default value is 0 (meaning no detuning), and its nominal range is -∞ to ∞.
AudioBufferSourceNode.loop
A Boolean attribute indicating if the audio asset must be replayed when the end of the AudioBuffer is reached. Its default value is false.
AudioBufferSourceNode.loopStart Optional
A floating-point value indicating the time, in seconds, at which playback of the AudioBuffer must begin when loop is true. Its default value is 0 (meaning that at the beginning of each loop, playback begins at the start of the audio buffer).
AudioBufferSourceNode.loopEnd Optional
A floating-point number indicating the time, in seconds, at which playback of the AudioBuffer stops and loops back to the time indicated by loopStart, if loop is true. The default value is 0.
AudioBufferSourceNode.playbackRate
An a-rate AudioParam that defines the speed factor at which the audio asset will be played, where a value of 1.0 is the sound's natural sampling rate. Since no pitch correction is applied on the output, this can be used to change the pitch of the sample. This value is compounded with detune to determine the final playback rate.

Event handlers

Inherits event handlers from its parent, AudioScheduledSourceNode.

Methods

Inherits methods from its parent, AudioScheduledSourceNode.

Examples

In this example, we create a two-second buffer, fill it with white noise, and then play it using an AudioBufferSourceNode. The comments should clearly explain what is going on.

You can also [[../../../../../../mdn.github.io/webaudio-examples/audio-buffer/index|run the code live]], or view the source.


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 ArrayBuffer 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();

For a decodeAudioData() example, see the AudioContext.decodeAudioData() page.


Specifications

Specification Status Comment
Web Audio APIThe definition of 'AudioBufferSourceNode' in that specification. Working Draft

Browser compatibility

Update compatibility data on GitHub

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet
AudioBufferSourceNode Chrome

Full support 14

Edge

Full support 12

Firefox

Full support 25

IE

No support No

Opera

Full support 15

Safari

Full support 6

WebView Android

Full support Yes

Chrome Android

Full support 18

Firefox Android

Full support 26

Opera Android

Full support 14

Safari iOS

Full support 6

Samsung Internet Android

Full support 1.0

AudioBufferSourceNode() constructor

Chrome Full support 55

Notes'

Full support 55

Notes'

Notes' Before version 59, the default values were not supported.

Edge

Full support 79

Firefox

Full support 53

IE

No support No

Opera

Full support 42

Safari

No support No

WebView Android Full support 55

Notes'

Full support 55

Notes'

Notes' Before version 59, the default values were not supported.

Chrome Android Full support 55

Notes'

Full support 55

Notes'

Notes' Before version 59, the default values were not supported.

Firefox Android

Full support 53

Opera Android

Full support 42

Safari iOS

No support No

Samsung Internet Android Full support 6.0

Notes'

Full support 6.0

Notes'

Notes' Before Samsung Internet 7.0, the default values were not supported.

buffer Chrome

Full support 14

Edge

Full support 12

Firefox Full support 25

Notes'

Full support 25

Notes'

Notes' Firefox currently handles the value null incorrectly. Instead of producing a node that generates a single channel of silence, the node becomes unusable and will be ignored if you attempt to connect it to anything.

IE

No support No

Opera

Full support 15

Safari

Full support 6

WebView Android

Full support Yes

Chrome Android

Full support 18

Firefox Android Full support 26

Notes'

Full support 26

Notes'

Notes' Firefox currently handles the value null incorrectly. Instead of producing a node that generates a single channel of silence, the node becomes unusable and will be ignored if you attempt to connect it to anything.

Opera Android

Full support 14

Safari iOS

Full support 6

Samsung Internet Android

Full support 1.0

detune Chrome

Full support 44

Edge

Full support 13

Firefox

Full support 40

IE

No support No

Opera

Full support 31

Safari

No support No

WebView Android

Full support 44

Chrome Android

Full support 44

Firefox Android

Full support 40

Opera Android

Full support 32

Safari iOS

No support No

Samsung Internet Android

Full support 4.0

loop Chrome

Full support 15

Edge

Full support 12

Firefox

Full support 25

IE

No support No

Opera

Full support 15

Safari

Full support 6

WebView Android

Full support Yes

Chrome Android

Full support 18

Firefox Android

Full support 26

Opera Android

Full support 14

Safari iOS

Full support 6

Samsung Internet Android

Full support 1.0

loopEnd Chrome

Full support 24

Edge

Full support 12

Firefox

Full support 25

IE

No support No

Opera

Full support 15

Safari

Full support 6

WebView Android

Full support ≤37

Chrome Android

Full support 25

Firefox Android

Full support 26

Opera Android

Full support 14

Safari iOS

Full support 6

Samsung Internet Android

Full support 1.5

loopStart Chrome

Full support 24

Edge

Full support 12

Firefox

Full support 25

IE

No support No

Opera

Full support 15

Safari

Full support 6

WebView Android

Full support Yes

Chrome Android

Full support 25

Firefox Android

Full support 26

Opera Android

Full support 14

Safari iOS

Full support 6

Samsung Internet Android

Full support 1.5

onended Chrome

Full support 30

Edge

Full support 12

Firefox

Full support Yes

IE

No support No

Opera

Full support 17

Safari

Full support 6.1

WebView Android

Full support 4.4

Chrome Android

Full support 30

Firefox Android

?

Opera Android

Full support 18

Safari iOS

Full support 7

Samsung Internet Android

Full support 2.0

playbackRate Chrome

Full support 14

Edge

Full support 12

Firefox

Full support 25

IE

No support No

Opera

Full support 15

Safari

Full support 6

WebView Android

Full support Yes

Chrome Android

Full support 18

Firefox Android

Full support 26

Opera Android

Full support 14

Safari iOS

Full support 6

Samsung Internet Android

Full support 1.0

start Chrome

Full support 24

Edge

Full support 12

Firefox

Full support 25

IE

No support No

Opera

Full support 15

Safari

Full support 6

WebView Android

Full support ≤37

Chrome Android

Full support 25

Firefox Android

Full support 26

Opera Android

Full support 14

Safari iOS

Full support 6

Samsung Internet Android

Full support 1.5

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
See implementation notes.'
See implementation notes.


See also