AudioNode

Baseline 廣泛可用 *

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

* 此特性的某些部分可能存在不同級別的支援。

AudioNode 介面是一個表示音訊處理模組的通用介面。

示例包括

EventTarget AudioNode

注意: AudioNode 可以是事件的目標,因此它實現了 EventTarget 介面。

例項屬性

AudioNode.context 只讀

返回關聯的 BaseAudioContext,即表示該節點參與其中的處理圖的物件。

AudioNode.numberOfInputs 只讀

返回輸入到該節點的輸入數量。源節點被定義為 numberOfInputs 屬性值為 0 的節點。

AudioNode.numberOfOutputs 只讀

返回從該節點輸出的輸出數量。目的地節點(如 AudioDestinationNode)的此屬性值為 0

AudioNode.channelCount

表示一個整數,用於確定在對節點輸入的連線進行上混和下混時使用的通道數。它的使用和精確定義取決於 AudioNode.channelCountMode 的值。

AudioNode.channelCountMode

表示一個列舉值,描述了節點輸入和輸出之間通道的匹配方式。

AudioNode.channelInterpretation

表示一個列舉值,描述了通道的含義。這種解釋將定義音訊上混和下混將如何發生。可能的值為 "speakers""discrete"

例項方法

也實現了 EventTarget 介面的方法。

AudioNode.connect()

允許我們將此節點的輸出連線到另一個節點的輸入,無論是作為音訊資料還是作為 AudioParam 的值。

AudioNode.disconnect()

允許我們將當前節點與已連線的另一個節點斷開連線。

描述

音訊路由圖

AudioNodes participating in an AudioContext create an audio routing graph.

每個 AudioNode 都有輸入和輸出,多個音訊節點連線起來構建一個處理圖。該圖包含在一個 AudioContext 中,每個音訊節點只能屬於一個音訊上下文。

源節點沒有輸入但有一個或多個輸出,可用於生成聲音。另一方面,目的地節點沒有輸出;相反,它的所有輸入都直接播放到揚聲器(或音訊上下文使用的任何音訊輸出裝置)。此外,還有處理節點,它們有輸入和輸出。具體的處理因 AudioNode 而異,但總的來說,一個節點讀取其輸入,進行一些與音訊相關的處理,併為其輸出生成新值,或者讓音訊透過(例如在 AnalyserNode 中,處理結果會單獨訪問)。

圖中的節點越多,延遲就越高。例如,如果圖的延遲為 500ms,當源節點播放聲音時,需要半秒鐘才能在揚聲器上聽到該聲音(甚至更長,因為底層音訊裝置的延遲)。因此,如果需要互動式音訊,請儘量使圖儘可能小,並將使用者控制的音訊節點放在圖的末尾。例如,音量控制(GainNode)應該是最後一個節點,以便音量更改能夠立即生效。

每個輸入和輸出都有一定數量的通道。例如,單聲道音訊有一個通道,而立體聲音訊有兩個通道。Web Audio API 會根據需要上混或下混通道數量;有關詳細資訊,請參閱 Web Audio 規範。

有關所有音訊節點列表,請參閱 Web Audio API 主頁。

建立 AudioNode

有兩種方法可以建立 AudioNode:透過建構函式和透過工廠方法

js
// constructor
const analyserNode = new AnalyserNode(audioCtx, {
  fftSize: 2048,
  maxDecibels: -25,
  minDecibels: -60,
  smoothingTimeConstant: 0.5,
});
js
// factory method
const analyserNode = audioCtx.createAnalyser();
analyserNode.fftSize = 2048;
analyserNode.maxDecibels = -25;
analyserNode.minDecibels = -60;
analyserNode.smoothingTimeConstant = 0.5;

您可以自由使用建構函式或工廠方法,或者混合使用兩者,但是使用建構函式有一些優點

  • 所有引數都可以在構造時設定,無需單獨設定。
  • 您可以對音訊節點進行子類化。雖然實際處理由瀏覽器內部完成且無法更改,但您可以編寫一個音訊節點的包裝器來提供自定義屬性和方法。
  • 效能略好:在 Chrome 和 Firefox 中,工廠方法都會在內部呼叫建構函式。

簡史: Web Audio 規範的第一個版本僅定義了工廠方法。在 2013 年 10 月的設計評審之後,決定新增建構函式,因為它們比工廠方法有許多優點。建構函式已從 2016 年 8 月到 10 月新增到規範中。工廠方法仍包含在規範中,並未棄用。

示例

這段簡單的程式碼片段展示瞭如何建立一些音訊節點,以及如何使用 AudioNode 的屬性和方法。您可以在 Web Audio API 登入頁面的任何示例(例如 Violent Theremin)中找到此類用法的示例。

js
const audioCtx = new AudioContext();

const oscillator = new OscillatorNode(audioCtx);
const gainNode = new GainNode(audioCtx);

oscillator.connect(gainNode).connect(audioCtx.destination);

oscillator.context;
oscillator.numberOfInputs;
oscillator.numberOfOutputs;
oscillator.channelCount;

規範

規範
Web Audio API
# AudioNode

瀏覽器相容性

另見