Web/API/BaseAudioContext/createDynamicsCompressor

From Get docs

The createDynamicsCompressor() method of the BaseAudioContext Interface is used to create a DynamicsCompressorNode, which can be used to apply compression to an audio signal.


Compression lowers the volume of the loudest parts of the signal and raises the volume of the softest parts. Overall, a louder, richer, and fuller sound can be achieved. It is especially important in games and musical applications where large numbers of individual sounds are played simultaneously, where you want to control the overall signal level and help avoid clipping (distorting) of the audio output.

Syntax

baseAudioCtx.createDynamicsCompressor();

Returns

A DynamicsCompressorNode.

Example

The below code demonstrates a simple usage of createDynamicsCompressor() to add compression to an audio track. For a more complete example, have a look at our [[../../../../../../../mdn.github.io/webaudio-examples/compressor-example/index|basic Compressor example]] (view the source code).

// Create a MediaElementAudioSourceNode
// Feed the HTMLMediaElement into it
var source = audioCtx.createMediaElementSource(myAudio);

// Create a compressor node
var compressor = audioCtx.createDynamicsCompressor();
compressor.threshold.setValueAtTime(-50, audioCtx.currentTime);
compressor.knee.setValueAtTime(40, audioCtx.currentTime);
compressor.ratio.setValueAtTime(12, audioCtx.currentTime);
compressor.attack.setValueAtTime(0, audioCtx.currentTime);
compressor.release.setValueAtTime(0.25, audioCtx.currentTime);

// connect the AudioBufferSourceNode to the destination
source.connect(audioCtx.destination);

button.onclick = function() {
  var active = button.getAttribute('data-active');
  if(active == 'false') {
    button.setAttribute('data-active', 'true');
    button.innerHTML = 'Remove compression';

    source.disconnect(audioCtx.destination);
    source.connect(compressor);
    compressor.connect(audioCtx.destination);
  } else if(active == 'true') {
    button.setAttribute('data-active', 'false');
    button.innerHTML = 'Add compression';

    source.disconnect(compressor);
    compressor.disconnect(audioCtx.destination);
    source.connect(audioCtx.destination);
  }
}

Specifications

Specification Status Comment
Web Audio APIThe definition of 'createDynamicsCompressor()' 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
createDynamicsCompressor

Chrome Full support 10

Prefixed'

Full support 10

Prefixed'

Prefixed' Implemented with the vendor prefix: webkit

Edge

Full support ≤18

Firefox Full support 53

Notes'

Full support 53

Notes'

Notes' Originally implemented on AudioContext in Firefox 25.

IE

No support No

Opera Full support 22


Full support 22


Full support 15

Prefixed'

Prefixed' Implemented with the vendor prefix: webkit

Safari Full support 6

Prefixed'

Full support 6

Prefixed'

Prefixed' Implemented with the vendor prefix: webkit

WebView Android

Full support Yes

Chrome Android

Full support 33

Firefox Android Full support 53

Notes'

Full support 53

Notes'

Notes' Originally implemented on AudioContext in Firefox Android 26.

Opera Android Full support 22


Full support 22


Full support 14

Prefixed'

Prefixed' Implemented with the vendor prefix: webkit

Safari iOS Full support 6

Prefixed'

Full support 6

Prefixed'

Prefixed' Implemented with the vendor prefix: webkit

Samsung Internet Android

Full support 2.0

Legend

Full support  
Full support
No support  
No support
See implementation notes.'
See implementation notes.
Requires a vendor prefix or different name for use.'
Requires a vendor prefix or different name for use.


See also