AudioNode
Baseline 廣泛可用 *
AudioNode 介面是一個表示音訊處理模組的通用介面。
示例包括
- 音訊源(例如,HTML
<audio>或<video>元素、OscillatorNode等), - 音訊目的地,
- 中間處理模組(例如,像
BiquadFilterNode或ConvolverNode這樣的濾波器),或 - 音量控制(如
GainNode)
注意: 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()-
允許我們將當前節點與已連線的另一個節點斷開連線。
描述
音訊路由圖

每個 AudioNode 都有輸入和輸出,多個音訊節點連線起來構建一個處理圖。該圖包含在一個 AudioContext 中,每個音訊節點只能屬於一個音訊上下文。
源節點沒有輸入但有一個或多個輸出,可用於生成聲音。另一方面,目的地節點沒有輸出;相反,它的所有輸入都直接播放到揚聲器(或音訊上下文使用的任何音訊輸出裝置)。此外,還有處理節點,它們有輸入和輸出。具體的處理因 AudioNode 而異,但總的來說,一個節點讀取其輸入,進行一些與音訊相關的處理,併為其輸出生成新值,或者讓音訊透過(例如在 AnalyserNode 中,處理結果會單獨訪問)。
圖中的節點越多,延遲就越高。例如,如果圖的延遲為 500ms,當源節點播放聲音時,需要半秒鐘才能在揚聲器上聽到該聲音(甚至更長,因為底層音訊裝置的延遲)。因此,如果需要互動式音訊,請儘量使圖儘可能小,並將使用者控制的音訊節點放在圖的末尾。例如,音量控制(GainNode)應該是最後一個節點,以便音量更改能夠立即生效。
每個輸入和輸出都有一定數量的通道。例如,單聲道音訊有一個通道,而立體聲音訊有兩個通道。Web Audio API 會根據需要上混或下混通道數量;有關詳細資訊,請參閱 Web Audio 規範。
有關所有音訊節點列表,請參閱 Web Audio API 主頁。
建立 AudioNode
有兩種方法可以建立 AudioNode:透過建構函式和透過工廠方法。
// constructor
const analyserNode = new AnalyserNode(audioCtx, {
fftSize: 2048,
maxDecibels: -25,
minDecibels: -60,
smoothingTimeConstant: 0.5,
});
// 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)中找到此類用法的示例。
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 |
瀏覽器相容性
載入中…