วิธีที่เหมาะสมในการรวมบัฟเฟอร์เสียงหลายช่องสัญญาณเป็นโมโนคืออะไร

ฉันใช้ตัวแยกช่องสัญญาณและการควบรวมกิจการเพื่อพยายามแยกไฟล์สเตอริโอออกเป็นสองช่องสัญญาณแยกกัน แล้วส่งกลับเข้าไปในกราฟโหนดเป็นแหล่งอินพุต "โมโน" ที่เล่นได้ทั้งบนจอภาพด้านซ้ายและขวา ฉันคิดหาวิธีได้แล้ว แต่ใช้โหนด 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);

person William    schedule 14.02.2016    source แหล่งที่มา


คำตอบ (3)


สร้าง ChannelMerger ด้วยช่องเดียวและใช้เพื่อบังคับดาวน์มิกซ์หรือไม่

person cwilso    schedule 14.02.2016
comment
ฉันตอบคำถามของตัวเอง แต่ฉันยอมรับว่าฉันจะคิดที่จะใช้การควบรวมกิจการเพื่อสิ่งนี้ ฉันต้องการเพียงตัวแยกช่องเท่านั้น ฉันอยากรู้ว่าคุณคิดอย่างไรกับคำตอบที่ฉันโพสต์ - person William; 14.02.2016

แค่หาค่าเฉลี่ย (เฉลี่ย) ของกลุ่มตัวอย่างด้านซ้ายและขวา

person Greg Valcourt    schedule 14.02.2016
comment
ฉันไม่รู้ว่าต้องทำอย่างไร ต้องการแสดงรหัสบ้างไหม - person William; 14.02.2016

<สไตรค์> ฉันเดาว่าฉันคิดเรื่องนี้มากเกินไปแล้ว ต่อไปนี้ดูเหมือนว่าจะได้ผล ฉันเดาว่าชื่อของโหนดเป็นสิ่งที่ทำให้สับสนเล็กน้อย ฉันจะมีแม้ว่าฉันจะต้องมีโหนดผสานสำหรับสิ่งนี้

stereoInputSource.connect(splitter);

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

monoGain.connect(audioContext.destination);

แก้ไข

วิธีที่ "ถูกต้อง" คือสิ่งที่คริสพูดถึง การตั้งค่าช่องสัญญาณออกอย่างชัดเจนในการเรียกใช้โหนดผสานคือสิ่งที่ฉันสับสน

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
ปัญหาเดียวคือคุณควรตั้งค่าโมโนเกนเป็น .5 เพื่อให้ผลรวมไม่คลิป (นี่เป็นเช่นเดียวกับคำตอบเฉลี่ยด้านบน) - person cwilso; 15.02.2016