The DynamicsCompressorNode interface provides a compression effect, which lowers the volume of the loudest parts of the signal in order to help prevent clipping and distortion that can occur when multiple sounds are played and multiplexed together at once. This is often used in musical production and game audio. DynamicsCompressorNode is an AudioNode that has exactly one input and one output; it is created using the AudioContext.createDynamicsCompressor() method.

Number of inputs 1
Number of outputs 1
Channel count mode "explicit"
Channel count 2
Channel interpretation "speakers"


Creates a new instance of an DynamicsCompressorNode object.


Inherits properties from its parent, AudioNode.

DynamicsCompressorNode.threshold Read only
Is a k-rate AudioParam representing the decibel value above which the compression will start taking effect.
DynamicsCompressorNode.knee Read only
Is a k-rate AudioParam containing a decibel value representing the range above the threshold where the curve smoothly transitions to the compressed portion.
DynamicsCompressorNode.ratio Read only
Is a k-rate AudioParam representing the amount of change, in dB, needed in the input for a 1 dB change in the output.
DynamicsCompressorNode.reduction Read only
Is a float representing the amount of gain reduction currently applied by the compressor to the signal.
DynamicsCompressorNode.attack Read only
Is a k-rate AudioParam representing the amount of time, in seconds, required to reduce the gain by 10 dB.
DynamicsCompressorNode.release Read only
Is a k-rate AudioParam representing the amount of time, in seconds, required to increase the gain by 10 dB.


No specific methods; inherits methods from its parent, AudioNode.


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 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

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

  } else if(active == 'true') {
    button.setAttribute('data-active', 'false');
    button.innerHTML = 'Add compression';



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

Browser compatibility

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support14 Yes25 No156
DynamicsCompressorNode() constructor551 ?53 No42 ?
attack14 Yes25 No156
knee14 Yes25 No156
ratio14 Yes25 No156
reduction142 Yes25 No156
release14 Yes25 No156
threshold14 Yes25 No156
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support1414 Yes2615 ? ?
DynamicsCompressorNode() constructor551551 ?5342 ? ?
attack Yes14 Yes2615 ? ?
knee Yes14 Yes2615 ? ?
ratio Yes14 Yes2615 ? ?
reduction Yes2142 Yes2615 ? ?
release Yes14 Yes2615 ? ?
threshold Yes14 Yes2615 ? ?

1. Before Chrome 59, the default values were not supported.

2. Before version 52, this was an AudioParam..

See also

Document Tags and Contributors

 Last updated by: SphinxKnight,