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 |
浏览器兼容性
加载中…