DynamicsCompressorNode

DynamicsCompressorNode 接口提供了一个压缩效果器,用以降低信号中最响部分的音量,来协助避免在多个声音同时播放并叠加在一起的时候产生的削波失真。通常用于音乐创作和游戏音效中。DynamicsCompressorNode 是一个 AudioNode ,只有一路输入和一路输出,使用 AudioContext.createDynamicsCompressor() (en-US) 方法创建。

Number of inputs 1
Number of outputs 1
Channel count mode "explicit"
Channel count 2
Channel interpretation "speakers"

构造方法

DynamicsCompressorNode() (en-US)
创建一个新的 DynamicsCompressorNode 对象实例。

属性

由父类 AudioNode 派生

DynamicsCompressorNode.threshold (en-US) 只读
比例系数 AudioParam 型。分贝高于此值时,将会进行压缩。
DynamicsCompressorNode.knee (en-US) 只读
比例系数 AudioParam 型。当超出 threshold 设置的值之后,曲线在哪个点开始朝着 ratio 设置的部分平滑变换。
DynamicsCompressorNode.ratio (en-US) 只读
比例系数 AudioParam 型。输入增益变化多少来产生 1 dB 的输出。
DynamicsCompressorNode.reduction (en-US) 只读
float 型。表示当前压缩器使用的增益压缩值。
DynamicsCompressorNode.attack (en-US) 只读
比例系数 AudioParam 型。降低增益 10 dB 的时间(单位为秒)。
DynamicsCompressorNode.release (en-US) 只读
比例系数 AudioParam 型。提升增益 10 dB 的时间(单位为秒)。

方法

没有自定义的方法,继承父类 AudioNode 中的方法。

示例

The code below 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.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 destination
source.connect(audioCtx.destination);

button.onclick = function() {
  var 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 Status Comment
Web Audio API
DynamicsCompressorNode
Recommendation  

浏览器兼容性

BCD tables only load in the browser

参见