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

瀏覽器相容性

另見