BaseAudioContext:createDynamicsCompressor() 方法

基线 广泛可用

此功能已完善,可在许多设备和浏览器版本中使用。它自以下时间起在所有浏览器中均可用 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

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅