AudioContext.destination 是只读的 AudioDestinationNode 实例,自动指向系统默认音频输出设备,不可手动重定向;所有音频节点链必须最终连接至此才能发声,其 channelCount 等属性反映当前输出设备能力。

AudioContext.destination 是只读属性,它自动指向系统默认音频输出设备,你不能手动“设置”或“指向”其他设备。它的作用是作为所有音频节点的最终输出汇点(类似物理音响系统的主输出接口),浏览器会自动将其连接到用户系统当前默认的播放设备(如扬声器、耳机或选定的输出设备)。
destination 的本质和行为
它是一个 AudioDestinationNode 实例,代表音频渲染的终点。你无法用代码把它“重定向”到另一个物理设备——这是由操作系统和浏览器共同管理的安全与策略限制。
- 创建 AudioContext 后,
context.destination就已就绪,无需额外初始化 - 所有音频图(Audio Graph)必须最终连接到它(或其下游节点),声音才会实际播放
- 它暴露了
maxChannelCount和channelCount等属性,反映当前输出设备的能力(如立体声 vs 5.1)
如何确认它正在使用系统默认输出设备
你不能直接查询“当前是哪个设备”,但可通过以下方式间接验证:
- 播放音频时,声音从系统设置中指定的默认输出设备(如 Windows 的“播放设备”首选项、macOS 的“声音→输出”)发出
- 调用
navigator.mediaDevices.enumerateDevices()可列出所有可用音频输出设备(需用户授权),但destination本身不提供切换接口 - 若用户在系统层面切换默认设备(例如拔掉耳机),后续新建的 AudioContext 会自动使用新默认设备;已有上下文一般仍维持原输出,除非被关闭重建
如需切换输出设备,需借助 setSinkId(有限支持)
对于 <audio> 元素,部分浏览器(Chrome、Edge ≥78)支持 setSinkId(deviceId) 指定输出设备。但 AudioContext.destination 不支持 setSinkId。
立即学习“前端免费学习笔记(深入)”;
- 若你用 AudioContext + MediaElementAudioSourceNode 驱动 <audio> 元素,可对该元素调用
setSinkId - 纯 Web Audio(如 OscillatorNode → destination)无法绕过 destination 的默认绑定,无标准 API 切换
- 实验性方案:某些浏览器支持
AudioContext构造时传入{outputDeviceId: 'xxx'}(非标准,未被规范采纳,不推荐依赖)
典型正确用法示例
只需确保音频节点链最终连到 destination 即可:
const ctx = new (window.AudioContext || window.webkitAudioContext)(); const osc = ctx.createOscillator(); const gain = ctx.createGain(); osc.connect(gain); gain.connect(ctx.destination); // ← 关键:连到这里,声音才出来 osc.frequency.value = 440; gain.gain.value = 0.2; osc.start();



















