HTML 标签不支持左右声道切换,需用 Web Audio API;volume 和 muted 作用于整体音频流;ChannelSplitterNode 可分离左右声道,StereoPannerNode 实现声像平移;移动端须在用户手势中调用 context.resume()。

HTML 标签本身不支持左右声道切换——它只负责解码和播放,没有暴露声道级控制能力。真要切换左/右、静音某一边、或做声像平移,必须用 Web Audio API 接管音频流。
为什么 的 volume 和 muted 不能切声道
这两个属性作用于整个音频流:设 volume = 0.5 是把左右声道都压到一半;muted = true 是同时静音双路。它们不区分通道,也无法单独干预左或右。
- 浏览器不会把
的输出自动转成可拆分的立体声节点(除非你手动桥接) - 直接监听
timeupdate或修改currentTime也拿不到原始 PCM 数据 - 想“只听左声道”,不是调个参数就行,而是得把右声道信号干掉或绕过
用 ChannelSplitterNode 拆开左右声道
这是最直接、低延迟的实时分离方案,适合监听、分别加效果、或动态路由。
- 创建
context.createChannelSplitter(2),它会把输入的立体声流拆成两个独立输出口 -
splitter.output[0]是左声道(L),splitter.output[1]是右声道(R) - 你可以只连
output[0]到destination实现“纯左”;或者把output[1]连到GainNode再设gain.value = 0实现右耳静音 - 注意:必须确保输入确实是立体声(
numberOfChannels === 2),单声道源会被自动复制,拆不出有效左右
用 StereoPannerNode 做声像平移(非真正“切换”)
它不分离也不丢弃声道,只是重分配能量比例:-1 是全左,+1 是全右,0 是居中。适合模拟声源移动,但左右总能量守恒。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 必须先将
输出桥接到 Web Audio:用context.createMediaElementSource(audioEl) - 连接顺序是:
mediaSource → panner → destination,不能跳过panner直连 - 瞬时设置
panner.pan.value = -1会有咔哒声,要用setValueAtTime()+linearRampToValueAtTime()平滑过渡 - 如果输入是单声道,
StereoPannerNode会自动复制到左右再做平移,此时“全左”实际是左右同信号,不是真正左声道独占
移动端必须先触发 audioContext.resume()
所有 Web Audio 操作在 iOS Safari 和多数 Android 浏览器里默认被暂停,即使你已用按钮点击触发了 play(),AudioContext 仍可能处于 suspended 状态。
- 务必在用户手势(如按钮 click)回调里第一时间调用
context.resume() - 不要等
canplaythrough或loadeddata事件后再 resume —— 那时可能已错过时机 - 检查状态:打印
context.state,只有"running"才能正常连接节点和播放
真正“切换声道”的难点不在 API 调用,而在信号路径设计:你要决定是丢弃一路(用 Splitter + Gain)、还是重映射能量(用 Panner)、还是提取原始数据后重建(用 getChannelData())。选错路径,轻则无效,重则无声或爆音。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










