音频节点

基线 广泛可用

此功能已成熟,并在许多设备和浏览器版本中运行。它自 2021 年 4 月.

报告反馈

AudioNode 接口是表示音频处理模块的通用接口。

EventTarget AudioNode

音量控制(例如 GainNode

实例属性

注意:AudioNode 可以是事件的目标,因此它实现了 EventTarget 接口。

AudioNode.context 只读

返回关联的 BaseAudioContext,即表示节点参与的处理图的对象。

AudioNode.numberOfInputs 只读

返回馈送节点的输入数量。源节点被定义为具有值为 0numberOfInputs 属性的节点。

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 中,处理结果是单独访问的)。

图中的节点越多,延迟就越高。例如,如果你的图的延迟为 500 毫秒,那么当源节点播放声音时,声音将在半秒后才能在你的扬声器上听到(甚至更长,因为底层音频设备也存在延迟)。因此,如果你需要进行交互式音频,请尽可能保持图的大小,并将用户控制的音频节点放在图的末尾。例如,音量控制 (GainNode) 应该是最后一个节点,以便音量变化立即生效。

每个输入和输出都有给定的声道 数量。例如,单声道音频有一个声道,而立体声音频有两个声道。Web 音频 API 将根据需要上混或下混声道数量;有关详细信息,请查看 Web 音频规范。

有关所有音频节点的列表,请参见 Web 音频 API 主页。

创建 AudioNode

有两种方法可以创建 AudioNode:通过构造函数和通过工厂方法
// constructor
const analyserNode = new AnalyserNode(audioCtx, {
  fftSize: 2048,
  maxDecibels: -25,
  minDecibels: -60,
  smoothingTimeConstant: 0.5,
});
有两种方法可以创建 AudioNode:通过构造函数和通过工厂方法
// factory method
const analyserNode = audioCtx.createAnalyser();
analyserNode.fftSize = 2048;
analyserNode.maxDecibels = -25;
analyserNode.minDecibels = -60;
analyserNode.smoothingTimeConstant = 0.5;

js

  • 您可以随意使用构造函数或工厂方法,或将两者混合使用,但使用构造函数有一些优势。
  • 所有参数都可以在构造时设置,不需要单独设置。
  • 您可以 子类化音频节点。虽然实际处理是由浏览器在内部完成的,无法更改,但您可以编写一个音频节点的包装器,以提供自定义属性和方法。

性能略有提升:在 Chrome 和 Firefox 中,工厂方法在内部调用构造函数。

示例

简要历史:Web 音频规范的第一个版本只定义了工厂方法。在 2013 年 10 月的设计审查 之后,决定添加构造函数,因为它们比工厂方法有很多优势。构造函数从 2016 年 8 月到 10 月被添加到规范中。工厂方法继续包含在规范中,并没有被弃用。

有两种方法可以创建 AudioNode:通过构造函数和通过工厂方法
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;

规范

这段简单的代码片段展示了如何创建一些音频节点,以及如何使用 AudioNode 属性和方法。您可以在 Web 音频 API 着陆页上链接的任何示例中找到此类用法的示例(例如 暴力特雷门)。
Web 音频 API
# 音频节点

浏览器兼容性

规范

另请参阅