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);