ChannelSplitterNode 将多声道音频分离为独立单声道输出,需按序号连接对应输出端口(如0为左声道);创建时输出数须≥源声道数,再通过 ChannelMergerNode 合并或 AudioWorklet 处理单声道。

使用 ChannelSplitterNode 提取特定声道音频,核心是将多声道音频流“拆开”,让每个声道变成独立的音频通道,再分别处理或输出。它本身不提取某一声道,而是把所有声道分离成多个单声道输出,你需要连接对应输出端口来获取目标声道(如左声道、右声道、中置声道等)。
创建并连接 ChannelSplitterNode
先通过 AudioContext 创建 splitter 节点,并指定期望的输出数量(必须 ≥ 音频源的声道数)。例如,处理立体声(2 声道)时设为 2;5.1 环绕声则设为 6:
const audioCtx = new (window.AudioContext || window.webkitAudioContext)(); const splitter = audioCtx.createChannelSplitter(6); // 支持最多 6 声道
然后将音频源(如 AudioBufferSourceNode 或 MediaElementAudioSourceNode)连接到 splitter 的输入:
source.connect(splitter);
获取指定声道的输出(关键步骤)
splitter 的每个输出端口对应一个声道,按顺序编号:0 表示第 1 声道(通常是左),1 表示第 2 声道(通常是右),依此类推。声道映射取决于原始音频的布局(如 Web Audio 默认 stereo 是 L/R,5.1 是 L/R/C/LFE/SL/SR):
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
立即学习“前端免费学习笔记(深入)”;
- 要获取左声道 → 连接
splitter.connect(..., 0) - 要获取右声道 → 连接
splitter.connect(..., 1) - 要获取中置声道(5.1 第三声道)→ 连接
splitter.connect(..., 2)
注意:不能直接读取数据,必须连接到后续节点(如 GainNode、ScriptProcessorNode(已弃用)、或现代的 AudioWorklet)才能进一步处理或分析。
实际提取并使用单一声道(例如只播放左声道)
最常见需求是“只听左声道”或“把左声道导出为单声道音频”。做法是:将目标输出连到 ChannelMergerNode(合并回单声道)或直接连到 Destination(但需确保声道匹配):
const merger = audioCtx.createChannelMerger(1); // 合并为 1 声道 splitter.connect(merger, 0); // 取 splitter 的第 0 输出(左) merger.connect(audioCtx.destination);
这样就实现了仅播放左声道的效果。若需进一步处理(如分析波形、FFT),可把 splitter 的某个输出连到自定义 AudioWorklet 进行采样级访问。
注意事项与常见问题
- 声道数必须匹配:如果音频源只有 2 声道,却创建了 6 输出的 splitter,多余输出会输出静音
-
默认布局不可靠:浏览器对多声道布局(如 5.1)支持有限,建议用
audioBuffer.numberOfChannels动态判断实际声道数,并据此创建 splitter -
无法直接获取 PCM 数据:splitter 不提供
getChannelData();如需原始样本,必须用AudioWorklet+processor在音频渲染线程中读取输入缓冲区 - 避免断连重连抖动:动态切换声道时,建议复用节点并调整连接,而非频繁创建销毁


















