讀完 O’Reilly Media 出版的 Web Audio API 第一章對基礎部分做了一些筆記和整理。 ...
Audio Context
音頻的工作環境。類比做化學實驗,Audio Context 就是為我們提供各種儀器和材料的實驗室(嚴格地來說製造這些儀器材料的方法和工具也一併提供了)。通常來說做實驗一間實驗室就夠啦。在 Web Audio API 中 Audio Context 體現為一個介面(interface),處理任何音頻工作前最基本的操作就是創建一個 AudioContext 的實例:
var context = new AudioContext();
考慮到相容性問題,通常採用以下寫法:
try {
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();
} catch(e) {
alert("啊哦,您的瀏覽器不支持 Web Audio API 哦!");
}
Audio Nodes
由 AudioContext 提供的方法創建,是音頻工作的基本單元。回到化學實驗的類比,就是用於組裝實驗器材的儀器,有很多種不同類型的儀器,每個儀器都有自己的用途。在 Web Audio API 中,根據 Audio Nodes 的作用大致可劃分為以下四種類型:
- Source nodes
源節點,通常作為音源。 - Modification nodes
對音頻進行處理的節點。 - Analysis nodes
對音頻數據進行分析的節點。 - Destination node
終節點,音頻經一系列操作後的終點,通常指連接著揚聲器的輸出端。在每個 AudioContext 的實例中,終節點都是唯一的,且作為其屬性destination
存在。
除了 Destination node 以外類型的節點在創建時都有更加具體的節點類型。
Modular Routing
不知道中文怎麼表達最合適,是 Web Audio API 里很重要的概念。同樣可以使用化學實驗的例子,在這裡就相當於各個儀器都是可連接的,從而形成完整的實驗裝置,不同的裝置和連接方式可以達到不同的實驗要求,最終的實驗結果取決於你對儀器的使用(化學材料包含在儀器內)。回到音頻工作上說,這是一條由節點單元連接而成的路線,路線必須有始有終,始即是 Source nodes,而終指的是唯一的 Destination node,中間的節點則可有可無,按需使用就行。
一般節點(AudioNode)都有用於建立連接的方法connect()
和用於連接的輸入、輸出口,其中源節點和終節點比較特殊,源節點作為起點則沒有輸入口,終節點作為終點則沒有輸出口。
根據以上內容,可以建立一個最簡單的 Modular Routing:
var source = context.createBufferSource();
source.buffer = RainDroppingBuffer; // 向源節點的緩存區存入數據
source.connect(context.destination);