При вызове setFilters () waversurfer.js соединит все предоставленные узлы в простой цепочке. В вашем случае это означает, что он создаст дополнительные соединения, как это:
splitter.connect(leftGain);
leftGain.connect(rightGain);
rightGain.connect(merger);
Это, вероятно, не то, что вы хотите. Но возможно использовать это поведение. Я немного изменил ваш пример.
const input = wavesurfer.backend.ac.createGain();
const splitter = wavesurfer.backend.ac.createChannelSplitter(2);
const merger = wavesurfer.backend.ac.createChannelMerger(2);
const leftGain = wavesurfer.backend.ac.createGain();
const rightGain = wavesurfer.backend.ac.createGain();
// This will make sure that a mono signal gets upmixed to stereo.
// If you always have stereo sound you can remove it.
input.channelCountMode = 'explicit';
// It is only necessary to connect the right channel
// because this is the one which needs optional parameters.
splitter.connect(rightGain, 1);
rightGain.connect(merger);
rightGain.connect(merger, 0, 1);
// Only the one connection which needs an optional parameter
// needs to be done for the left channel
leftGain.connect(merger, 0, 1);
// wavesufer.js will connect everything else.
wavesurfer.backend.setFilters([ input, splitter, leftGain, merger ]);
Я также добавил еще один GainNode в качестве первого узла, чтобы убедиться, что сигнал микшируется в стерео, если он монофонический. И я удалил PannerNode, так как он не использовался в вашем примере.