BaseAudioContext: createDynamicsCompressor() method
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
ThecreateDynamicsCompressor() method of theBaseAudioContext Interface is used to create aDynamicsCompressorNode, 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 volumeof the softest parts. Overall, a louder, richer, and fuller sound can be achieved. It isespecially important in games and musical applications where large numbers of individualsounds are played simultaneously, where you want to control the overall signal level andhelp avoid clipping (distorting) of the audio output.
Note:TheDynamicsCompressorNode()constructor is the recommended way to create aDynamicsCompressorNode; seeCreating an AudioNode.
In this article
Syntax
createDynamicsCompressor()Parameters
None.
Return value
Examples
The code below shows how to usecreateDynamicsCompressor()to add compression to an audio track. For a more complete example, have a look at ourbasic Compressor example (view the source code).
// Create a MediaElementAudioSourceNode// Feed the HTMLMediaElement into itconst source = audioCtx.createMediaElementSource(myAudio);// Create a compressor nodeconst 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 destinationsource.connect(audioCtx.destination);button.onclick = () => { const active = button.getAttribute("data-active"); if (active === "false") { button.setAttribute("data-active", "true"); button.textContent = "Remove compression"; source.disconnect(audioCtx.destination); source.connect(compressor); compressor.connect(audioCtx.destination); } else if (active === "true") { button.setAttribute("data-active", "false"); button.textContent = "Add compression"; source.disconnect(compressor); compressor.disconnect(audioCtx.destination); source.connect(audioCtx.destination); }};Specifications
| Specification |
|---|
| Web Audio API> # dom-baseaudiocontext-createdynamicscompressor> |