ChannelMergerNode - 用于将不同的单声道输入重新组合为单个输出
ChannelMergerNode
接口用于将不同的单声道输入重新组合为单个输出,通常与其相反的 ChannelSplitterNode
接口结合使用。每个输入用于填充输出的一个通道。这对于分别访问每个通道是有用的,例如,在执行通道混合时,增益必须分别控制在每个通道上。
如果 ChannelMergerNode
只有一个输出,但是输入与要合并的通道一样多;输入的数量被定义为其构造函数的一个参数和对 AudioContext.createChannelMerger
的调用。在没有给出值的情况下,它将默认为 6
。
使用 ChannelMergerNode
可以创建比渲染硬件能够处理的通道更多的输出。在这种情况下,当信号发送到 AudioContext.listener
对象时,多余的通道将被忽略。
输入数量 | 变量; 默认为 6。 |
---|---|
输出数量 | 1 |
通道计数模式 | "max" |
通道数 | 2 (在默认计数模式下不使用) |
通道解释 | "speakers" |
构造函数
ChannelMergerNode()
创建一个新的 ChannelMergerNode
对象实例。
属性
没有特有的属性;从其父接口 AudioNode
继承了属性。
方法
没有特有的属性;从其父接口 AudioNode
继承了方法。
实例
下面的实例说明如何分离立体声轨道(例如一段音乐),并以不同的方式处理左右声道。要使用它们,您需要使用 AudioNode.connect(AudioNode)
方法的第二个和第三个参数,该参数可以同时指定要从其连接的通道的索引和要连接的频道。
var ac = new AudioContext();
ac.decodeAudioData(someStereoBuffer, function(data) {
var source = ac.createBufferSource();
source.buffer = data;
var splitter = ac.createChannelSplitter(2);
source.connect(splitter);
var merger = ac.createChannelMerger(2);
// 仅减小左声道的音量
var gainNode = ac.createGain();
gainNode.gain.setValueAtTime(0.5, ac.currentTime);
splitter.connect(gainNode, 0);
// 将分离器连接回合并的第二个输入:我们有效地交换通道,在这里,反转立体声图像。
gainNode.connect(merger, 0, 1);
splitter.connect(merger, 1, 0);
var dest = ac.createMediaStreamDestination();
// 因为我们使用了 `ChannelMergerNode`,所以现在有了立体声 `MediaStream`,
// 可以用来将 Web 音频图通过管道传输到 WebRTC,MediaRecorder 等。
merger.connect(dest);
});
规范
规范 | 状态 | 备注 |
---|---|---|
Web Audio API ChannelMergerNode 的定义 |
工作草案 | - |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 14 | ≤18 | 25 | 不支持 | 15 | 6 |
ChannelMergerNode() 构造函数 | 55 | ≤79 | 53 | 不支持 | 42 | 未知 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 支持 | 18 | 未知 | 26 | 未知 | 14 | 支持 |
ChannelMergerNode() 构造函数 | 55 | 55 | 未知 | 53 | 未知 | 42 | 未知 |