Apa cara yang tepat untuk menjumlahkan buffer audio multi saluran menjadi mono

Saya menggunakan pemisah dan penggabungan saluran untuk mencoba membagi file stereo menjadi dua saluran terpisah dan kemudian menyalurkannya kembali ke grafik simpul sebagai sumber input "mono" yang diputar di monitor kiri dan kanan. Saya menemukan cara untuk melakukannya tetapi menggunakan node stereoPanner yang disetel ke 0.5 , dan rasanya agak "hacky". Bagaimana saya melakukan ini tanpa menggunakan node 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);

person William    schedule 14.02.2016    source sumber


Jawaban (3)


Buat ChannelMerger hanya dengan satu saluran dan gunakan untuk memaksa downmixing?

person cwilso    schedule 14.02.2016
comment
Saya menjawab pertanyaan saya sendiri, tetapi saya setuju bahwa saya akan berpikir untuk menggunakan merger untuk ini. Saya hanya membutuhkan pemisah saluran. Saya ingin tahu apa pendapat Anda tentang jawaban yang saya posting. - person William; 14.02.2016

Ambil saja mean (rata-rata) sampel kiri dan kanan.

person Greg Valcourt    schedule 14.02.2016
comment
Saya tidak tahu bagaimana melakukan itu, mau menunjukkan beberapa kode? - person William; 14.02.2016

[strike] Sepertinya saya sudah terlalu memikirkan hal ini. Berikut ini tampaknya berhasil. Saya kira nama nodenya agak membingungkan. Saya akan melakukannya meskipun saya memerlukan simpul gabungan untuk ini

stereoInputSource.connect(splitter);

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

monoGain.connect(audioContext.destination);

EDIT

Cara yang "benar" adalah yang disebutkan Chris. Menyetel saluran keluaran secara eksplisit pada pemanggilan simpul gabungan itulah yang membuat saya bingung.

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

stereoInputSource.buffer = soundObj.soundToPlay;
stereoInputSource.connect(merger);
merger.connect(audioContext.destination)
person William    schedule 14.02.2016
comment
Satu-satunya masalah adalah Anda harus menyetel monogain ke 0,5, sehingga penjumlahannya tidak terpotong. (Omong-omong, ini sama dengan jawaban yang berarti di atas.) - person cwilso; 15.02.2016