The createDynamicsCompressor()
method of the AudioContext
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
var audioCtx = new AudioContext(); var compressor = audioCtx.createDynamicsCompressor();
Returns
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 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.reduction.value = -20; 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); } }
Specifications
Specification | Status | Comment |
---|---|---|
Web Audio API The definition of 'createDynamicsCompressor()' in that specification. |
Working Draft |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Basic support | 10.0webkit | 25.0 (25.0) | Not supported | 15.0webkit 22 (unprefixed) |
6.0webkit |
Feature | Android | Firefox Mobile (Gecko) | Firefox OS | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | ? | 26.0 | 1.2 | ? | ? | ? | 33.0 |