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" |
DynamicsCompressorNode()
DynamicsCompressorNode
object.Inherits properties from its parent, AudioNode
.
DynamicsCompressorNode.threshold
Read only
AudioParam
representing the decibel value above which the compression will start taking effect.DynamicsCompressorNode.knee
Read only
AudioParam
containing a decibel value representing the range above the threshold where the curve smoothly transitions to the compressed portion.DynamicsCompressorNode.ratio
Read only
AudioParam
representing the amount of change, in dB, needed in the input for a 1 dB change in the output.DynamicsCompressorNode.reduction
Read only
float
representing the amount of gain reduction currently applied by the compressor to the signal.DynamicsCompressorNode.attack
Read only
AudioParam
representing the amount of time, in seconds, required to reduce the gain by 10 dB.DynamicsCompressorNode.release
Read only
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.value = -50; compressor.knee.value = 40; compressor.ratio.value = 12; compressor.attack.value = 0; compressor.release.value = 0.25; // 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); } }
Specification | Status | Comment |
---|---|---|
Web Audio API The definition of 'DynamicsCompressorNode' in that specification. | Working Draft |
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | 14 | Yes | 25 | No | 15 | 6 |
DynamicsCompressorNode() constructor |
551 | ? | 53 | No | 42 | ? |
attack |
14 | Yes | 25 | No | 15 | 6 |
knee |
14 | Yes | 25 | No | 15 | 6 |
ratio |
14 | Yes | 25 | No | 15 | 6 |
reduction |
142 | Yes | 25 | No | 15 | 6 |
release |
14 | Yes | 25 | No | 15 | 6 |
threshold |
14 | Yes | 25 | No | 15 | 6 |
Feature | Android webview | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic support | 14 | 14 | Yes | 26 | No | 15 | ? |
DynamicsCompressorNode() constructor |
551 | 551 | ? | 53 | No | 42 | ? |
attack |
Yes | 14 | Yes | 26 | No | 15 | ? |
knee |
Yes | 14 | Yes | 26 | No | 15 | ? |
ratio |
Yes | 14 | Yes | 26 | No | 15 | ? |
reduction |
Yes2 | 142 | Yes | 26 | No | 15 | ? |
release |
Yes | 14 | Yes | 26 | No | 15 | ? |
threshold |
Yes | 14 | Yes | 26 | No | 15 | ? |
1. Before Chrome 59, the default values were not supported.
2. Before version 52, this was an AudioParam.
.
© 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/DynamicsCompressorNode