2016-02-14 2 views
1

Я использую сплиттер и слияние каналов, чтобы попытаться разделить стереофайл на два дискретных канала, а затем перевести их обратно в граф узлов как «моно «источник входного сигнала, который воспроизводится как на левом, так и на правом мониторах. Я понял способ сделать это, но он использует узел stereoPanner, установленный в 0.5, и он чувствует себя немного «взломанным». Как мне это сделать без использования узла stereoPanner?Что такое «правильный» способ суммирования многоканальных звуковых буферов для моно

//____________________________________________BEGIN Setup 

var merger = audioContext.createChannelMerger(); 
var stereoPanner = audioContext.createStereoPanner(); 
var stereoInputSource = audioContext.createBufferSource(); 
stereoInputSource.buffer = soundObj.soundToPlay; 

//____________________________________________END Setup 


stereoInputSource.connect(merger, 0, 0); 
merger.connect(stereoPanner); 

stereoPanner.pan.value = 0.5; 

stereoPanner.connect(audioContext.destination); 

ответ

1

Создайте ChannelMerger только с одним каналом и используйте для принудительного понижающего микширования?

+0

Я ответил на свой вопрос, но я согласен с тем, что подумал бы использовать слияние для этого. Мне нужен был только разветвитель канала. Мне любопытно, что вы думаете о ответе, который я написал. – William

0

Просто возьмите среднее (среднее) левого и правого образцов.

+0

Я не знаю, как это сделать, проявите заботу о том, чтобы показать код? – William

0

Я думаю, я был старше, думая об этом. Кажется, что работает. Я предполагаю, что имена узлов - это то, что немного запутывает. Я бы, хотя я должен был бы узел слияния для этого

stereoInputSource.connect(splitter); 

splitter.connect(monoGain, 0); // left output 
splitter.connect(monoGain, 1); // right output 

monoGain.connect(audioContext.destination); 

EDIT

"Правильный" способ является то, что упомянутый Крис. Явное определение выходного канала при вызове слияния - это то, что меня смутило.

var stereoInputSource = audioContext.createBufferSource(); 
var merger = audioContext.createChannelMerger(1); // Set number of channels 

stereoInputSource.buffer = soundObj.soundToPlay; 
stereoInputSource.connect(merger); 
merger.connect(audioContext.destination) 
+0

Единственная проблема заключается в том, что вы должны установить моногейн в .5, поэтому суммирование не выполняется. (Это то же самое, что и «принять средний ответ», кстати.) – cwilso

Смежные вопросы