不能混合或合并,我需要交叉通道,例如:L-R
我可以使用createScriptProcessor做到这一点:
let processor = context.createScriptProcessor(512, 2, 1)
processor.onaudioprocess = e => {
let inputL = e.inputBuffer.getChannelData(0),
inputR = e.inputBuffer.getChannelData(1),
output = e.outputBuffer.getChannelData(0),
len = inputL.length,
i = 0;
for (; i < len; i++) {
output[i] = inputL[i] - inputR[i];
}
}
这是我想要的,但是...没有 createScriptProcessor ,例如通过createChannelMerger / createChannelSplitter,有没有办法做到这一点?我正在寻找一种更有效的方法。
答案 0 :(得分:2)
找到了解决方案!
这是
inputLeft - inputRight
与
相同inputLeft + inputRightInvert
其中 inputRightInvert 是右声道的反相。
结果:
splitter = context.createChannelSplitter(2)
merger = context.createChannelMerger(1)
invertRightChannel = context.createGain()
invertRightChannel.gain.value = -1
input.connect(splitter)
// left channel
splitter.connect(merger, 0, 0)
// right invert channel
splitter.connect(invertRightChannel, 1)
invertRightChannel.connect(merger, 0, 0)
merger.connect(output)
什么优势?