Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>WebAudio example of compressor node</title>
</head>
<body>
  <h1>Example of use of a compressor node</h1>
  <p>Click the button to turn the compressor on/off. We set a huge gain on the signal in purpose, so that it clips and sounds saturated. Using a compressor with default property values will prevent clipping<p>
  <audio src="http://mainline.i3s.unice.fr/mooc/guitarRiff1.mp3" id="compressorExample" controls loop crossorigin="anonymous"></audio>
        <br>
        <label for="gainSlider1">Gain</label>
        <input type="range" min="0" max="10" step="0.01" value="8" id="gainSlider1" />
  <button id="compressorButton">Turn compressor On</button>
</body>
</html>
 
// This line is a trick to initialize the AudioContext
// that will work on all recent browsers
var ctx = window.AudioContext || window.webkitAudioContext;
var audioContext;
var compressorExemple, gainSlider1, gainNode1, compressorNode;
var compressorButton;
var compressorOn = false;
window.onload = function() {
  
   // get the AudioContext
   audioContext = new ctx();
   // the audio element
   compressorExemple = document.querySelector('#compressorExample');
   gainSlider1 = document.querySelector('#gainSlider1');
   // button for turning on/off the compressor
   compressorButton = document.querySelector('#compressorButton');
  
  buildAudioGraph();
  
  // input listener on the gain slider
  gainSlider1.oninput = function(evt) {
    gainNode1.gain.value = evt.target.value;
  }; 
  
  compressorButton.onclick = function(evt) {
      if(compressorOn) {
      // disconnect the compressor and make a 
      // direct route from gain to destination
      compressorNode.disconnect(audioContext.destination);
      gainNode1.disconnect(compressorNode);
      gainNode1.connect(audioContext.destination);
      compressorButton.innerHTML="Turn compressor: On";
    }  else {
      // compressor was off, we connect the gain to the compressor 
      // and the compressor to the destination
      gainNode1.disconnect(audioContext.destination);
      gainNode1.connect(compressorNode);
      compressorNode.connect(audioContext.destination);
      compressorButton.innerHTML="Turn compressor: Off";
    }
    compressorOn = !compressorOn;
  };    
};
function buildAudioGraph() {
    // create source and gain node
    var gainMediaElementSource = audioContext.createMediaElementSource(compressorExemple);
    gainNode1 = audioContext.createGain();
    gainNode1.gain.value = parseFloat(gainSlider1.value);
  
    // do not connect it yet
    compressorNode = audioContext.createDynamicsCompressor();
  
  
    // connect nodes together
    gainMediaElementSource.connect(gainNode1);
    gainNode1.connect(audioContext.destination);
}
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
MichelBuffapro
0viewers