BaseAudioContext: createDynamicsCompressor() 方法

Baseline 已广泛支持

此特性已得到良好支持,可在多种设备和浏览器版本上使用。自 2021 年 4 月起,所有浏览器均已支持此特性。

BaseAudioContext 接口的 createDynamicsCompressor() 方法用于创建一个 DynamicsCompressorNode,该节点可以用来对音频信号应用压缩。

压缩会降低信号最响亮部分(响度)的音量,并提高最安静部分(响度)的音量。总体而言,可以获得更响亮、更丰富、更饱满的声音。这在同时播放大量独立声音的游戏和音乐应用中尤其重要,因为您希望控制整体信号电平,并帮助避免音频输出的削波(失真)。

注意: DynamicsCompressorNode() 构造函数是创建 DynamicsCompressorNode 的推荐方式;请参阅 创建 AudioNode

语法

js
createDynamicsCompressor()

参数

无。

返回值

一个 DynamicsCompressorNode

示例

下面的代码展示了如何使用 createDynamicsCompressor() 为音频轨道添加压缩。有关更完整的示例,请查看我们的 基础压缩器示例查看源代码)。

js
// Create a MediaElementAudioSourceNode
// Feed the HTMLMediaElement into it
const source = audioCtx.createMediaElementSource(myAudio);

// Create a compressor node
const 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 = () => {
  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);
  }
};

规范

规范
Web Audio API
# dom-baseaudiocontext-createdynamicscompressor

浏览器兼容性

另见