The GainNode interface represents a change in volume. It is an AudioNode audio-processing module that causes a given gain to be applied to the input data before its propagation to the output. A GainNode always has exactly one input and one output, both with the same number of channels.
The gain is a unitless value, changing with time, that is multiplied to each corresponding sample of all input channels. If modified, the new gain is applied using a de-zippering algorithm in order to prevent unaesthetic 'clicks' from appearing in the resulting audio.

| Number of inputs | 1 | 
|---|---|
| Number of outputs | 1 | 
| Channel count mode | "max" | 
| Channel count | 2(not used in the default count mode) | 
| Channel interpretation | "speakers" | 
Constructor
- GainNode()
- Creates a new instance of an GainNodeobject. You shouldn't manually create a gain node; instead, use the methodAudioContext.createGain().
Properties
Inherits properties from its parent, AudioNode.
- GainNode.gainRead only
- Is an a-rate AudioParamrepresenting the amount of gain to apply.
Methods
No specific method; inherits methods from its parent, AudioNode.
Example
The following example shows basic usage of an AudioContext to create a GainNode, which is then used to mute and unmute the audio when a Mute button is clicked by changing the gain property value.
The below snippet wouldn't work as is — for a complete working example, check out our Voice-change-O-matic demo (view source.)
<div> <a class="mute">Mute button</a> </div>
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var gainNode = audioCtx.createGain();
var mute = document.querySelector('.mute');
var source;
if (navigator.mediaDevices.getUserMedia) {
 navigator.mediaDevices.getUserMedia (
   // constraints - only audio needed for this app
   {
     audio: true
   },
   // Success callback
   function(stream) {
     source = audioCtx.createMediaStreamSource(stream);
   },
   // Error callback
   function(err) {
     console.log('The following gUM error occured: ' + err);
   }
  );
} else {
   console.log('getUserMedia not supported on your browser!');
}
source.connect(gainNode);
gainNode.connect(audioCtx.destination);
  ...
mute.onclick = voiceMute;
function voiceMute() {
  if(mute.id == "") {
    gainNode.gain.value = 0;
    mute.id = "activated";
    mute.innerHTML = "Unmute";
  } else {
    gainNode.gain.value = 1;
    mute.id = "";
    mute.innerHTML = "Mute";
  }
}
Specifications
| Specification | Status | Comment | 
|---|---|---|
| Web Audio API The definition of 'GainNode' in that specification. | Working Draft | 
Browser compatibility
| Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) | 
|---|---|---|---|---|---|---|
| Basic support | 10.0webkit | (Yes) | 25.0 (25.0) | No support | 15webkit 22 | 6.0webkit | 
| constructor | 55.0 | (Yes) | ? | ? | 42 | ? | 
| Feature | Android | Android Webview | Edge | Firefox Mobile (Gecko) | Firefox OS | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android | 
|---|---|---|---|---|---|---|---|---|---|
| Basic support | No support | (Yes) | (Yes) | 26.0 | 1.2 | ? | (Yes) | ? | 33.0 | 
| constructor | No support | 55.0 | (Yes) | ? | ? | ? | 42 | ? | 55.0 |