จะแยกส่วนเสียงจากสัญญาณเสียงสเตอริโอได้อย่างไร?


15

ตอนนี้ฉันกำลังประมวลผลไฟล์ MP3 และพบปัญหานี้ MP3 ของฉันเข้ารหัสแบบสเตอริโอ สิ่งที่ฉันต้องการทำคือแยกส่วนที่เป็นเสียงร้องสำหรับการประมวลผลเพิ่มเติม (ไม่ว่าโหมดสัญญาณเอาท์พุตโมโนหรือสเตอริโอจะใช้ได้ทั้งคู่)

เท่าที่ฉันรู้เสียงจะถูกเข้ารหัสเป็นวงย่อยย่อยที่แตกต่างกันใน MP3 ฉันคิดว่าฉันสามารถ จำกัด สัญญาณไปยังช่วงเสียงผ่านตัวกรอง high-pass / low-pass พร้อมชุดความถี่ตัดที่เหมาะสม อย่างไรก็ตามผลลัพธ์จะต้องมีบางส่วนของสัญญาณเพลงบริสุทธิ์ในกรณีนี้ หรือหลังจาก googling ฉันคิดว่าฉันอาจคำนวณสัญญาณพื้นหลังก่อน (โดยการย้อนกลับหนึ่งช่องเพิ่มด้วยสัญญาณจากอีกช่องหนึ่งโดยสมมติว่าส่วนเสียงเป็นศูนย์กลางในเสียงสเตอริโอที่เรียกว่าการยกเลิกเฟส) หลังจากการเปลี่ยนแปลงนี้สัญญาณจะเป็นแบบโมโน จากนั้นฉันควรรวมสเตอริโอต้นฉบับเข้ากับโมโนซึ่งแยกสัญญาณพื้นหลัง

ให้ประสิทธิภาพซึ่งเป็นที่ต้องการ (หรือวิธีการแก้ปัญหาอื่น ๆ :)? หากช่องที่สองให้ช่องสัญญาณ A และ B สองช่อง (BA) หรือ (AB) จะใช้เมื่อคำนวณพื้นหลังหรือไม่ เช่นเดียวกับการรวมสองแชนเนลเลขคณิตมีความหมายเพียงพอหรือไม่ หรือฉันสามารถสุ่มตัวอย่างแต่ละช่องด้วยปัจจัยสองและแทรกสัญญาณ downsampled เป็นโมโนผลลัพธ์

ขอขอบคุณและขอแสดงความนับถือ.

คำตอบ:


21

ก่อนอื่นวิธีการเข้ารหัสข้อมูลในไฟล์ mp3 นั้นไม่เกี่ยวข้องกับคำถามเว้นแต่ว่าคุณจะทำการประมวลผลโดเมนแบบบีบอัด (ซึ่งจะค่อนข้างโง่) ดังนั้นคุณสามารถสมมติว่าอัลกอริทึมของคุณจะทำงานกับข้อมูลโดเมนเวลาที่คลายการบีบอัดได้

ผลรวม / ความแตกต่างเป็นกลอุบายพื้นฐานมากสำหรับการปราบปรามเสียงพูด (ไม่ใช่การแยก) มันขึ้นอยู่กับข้อสันนิษฐานว่าเสียงร้องผสมกันที่ศูนย์กลางของสนามสเตอริโอในขณะที่เครื่องมืออื่น ๆ ถูกแพนในแนวขวาง เรื่องนี้ไม่ค่อยเป็นความจริง LR และ RL จะให้เสียงที่เหมือนกัน (หูของมนุษย์นั้นไม่ไวต่อการเปลี่ยนแปลงเฟสทั่วโลก) และจะให้เสียงมิกซ์เดี่ยวที่ไม่มีเครื่องมือผสมอยู่ตรงกลาง ปัญหาคือเมื่อคุณกู้คืนพื้นหลังแล้วคุณจะทำอะไรกับมัน พยายามที่จะระงับมันจากสัญญาณกลาง (เฉลี่ย) หรือไม่ สิ่งนี้ใช้ไม่ได้ผลคุณจะทำ (L + R) / 2 - (L - R) มันไม่น่าสนใจมาก ... คุณสามารถลองผสมกันแบบเส้นตรง (เฉลี่ยและ "ลบกลาง") ไม่มีอะไร จะออกมาจากมัน!

เกี่ยวกับวิธีการกรอง: f0 ของเสียงไม่ค่อยเกิน 1,000 Hz แต่เสียงประสานสามารถไปได้ การลบความถี่สูงสุดจะทำให้พยัญชนะ (โดยเฉพาะ sss, chhh) ไม่เป็นที่พอใจ เสียงชายบางคนต่ำกว่า 100 เฮิร์ตซ์ คุณสามารถตัดสิ่งที่ต่ำกว่า 50 หรือ 60 เฮิร์ตซ์ (เบส, เตะ) ได้อย่างปลอดภัย

ความคืบหน้าล่าสุดในการแยกเสียงควรค่าสำรวจ:

  • โมเดลพื้นหลังของ Jean Louis Durrieu NMF + หวีผสม> ตัวกรอง รหัสหลามที่นี่
  • Rafii ของวิธีการสกัดพื้นหลัง รหัสที่ตรงไปตรงมาและทำงานได้ดีกับเพลงที่ผลิตโดยคอมพิวเตอร์ที่มีรูปแบบซ้ำ ๆ อย่าง Electro, Hip-hop ...
  • Hsu เข้าหาโดยอิงจากการตรวจจับ f0 การติดตามและการปิดบัง "อัลกอริทึมตีคู่สำหรับการแยกสนามและการแยกเสียงจากการบรรเลงดนตรี" (หา PDF ที่เข้าถึงไม่ได้)

4

ขอบคุณสำหรับการอ้างอิง! คุณลืมที่จะพูดถึงงานของคุณเกี่ยวกับการปรับปรุงกลองซึ่งอาจเป็นที่สนใจสำหรับแอปพลิเคชันของ Summer_More_More_Tea ทุกอย่างขึ้นอยู่กับสิ่งที่คุณต้องการจะทำกับมัน คุณมี "แอปพลิเคชันสิ้นสุด" ในใจหรือไม่

ฉันเห็นด้วยอย่างสมบูรณ์กับข้อความข้างต้นของ pichenettes ถึงจะเสร็จสมบูรณ์อย่างไรก็ตามฉันควรจะบอกว่าการเพิ่มประสิทธิภาพของเสียงพูดที่คุณพูดถึงนั้นถูกนำไปใช้ในงานบางชิ้นโดย Matti Ryynänenในการสร้างเพลงคาราโอเกะเพื่อเพิ่มผลลัพธ์

ในการตอบคำถามของคุณ:

ให้ประสิทธิภาพซึ่งเป็นที่ต้องการ (หรือวิธีการแก้ปัญหาอื่น ๆ :)?

ดังที่ pichenettes พูดว่าไม่เหมาะกับความต้องการของคุณ: การกรอง low-pass / high-pass ถูกผูกไว้ว่าล้มเหลวเนื่องจากโครงสร้างเสียงที่สอดคล้องกันของเสียงมนุษย์ )

หากช่องที่สองให้ช่องสัญญาณ A และ B สองช่อง (BA) หรือ (AB) จะใช้เมื่อคำนวณพื้นหลังหรือไม่ เช่นเดียวกับการรวมสองแชนเนลเลขคณิตมีความหมายเพียงพอหรือไม่

อีกครั้งวิธีที่สองที่คุณพูดถึงจะไม่ทำเพราะคุณสามารถลบสัญญาณที่อยู่ตรงกลางเท่านั้นไม่ดึงกลับมา กล่าวอีกนัยหนึ่งแม้แต่นักร้องอยู่ใน "ศูนย์กลาง" ไม่มีคณิตศาสตร์ง่าย ๆ ที่จะส่งสัญญาณเสียงร้องเท่านั้น

หรือฉันสามารถสุ่มตัวอย่างแต่ละช่องด้วยปัจจัยสองและแทรกสัญญาณ downsampled เป็นโมโนผลลัพธ์

เอ่อ ... หาค่าเฉลี่ยของช่องสัญญาณเพื่อรับสัญญาณโมโน - ช่องตามที่แนะนำข้างต้นสมเหตุสมผลและจะไม่ทำลายลักษณะสเปกตรัมของสัญญาณของคุณ (สมมติว่าสัญญาณสเตอริโอไม่ได้ลดลง) ดังนั้นคุณจะได้รับสัญญาณโมโนที่มีเนื้อหาดนตรีเหมือนเดิม

การสุ่มตัวอย่างแต่ละช่องอย่างถูกต้องหมายความว่าคุณใช้ตัวกรอง low-pass เป็นครั้งแรก (ที่มีความถี่การตัดของ sampling_rate / 4 ในกรณีของคุณ) จากนั้นคุณสามารถใช้ทุก ๆ 2 ตัวอย่างได้อย่างปลอดภัย มีไม่มากที่จะพูดเกี่ยวกับ interleaving ช่องทางที่ทำให้เสียตัวอย่าง: ในกรณีทั่วไปส่วนใหญ่นี่เป็นการทำลายลักษณะสเปกตรัมของสัญญาณของคุณ คุณอาจไม่ต้องการที่

อันที่จริงการทำงานของตัวกรองความถี่ต่ำตามด้วยการตั้งค่าเป็น 0 ทุกๆ 2 ตัวอย่างและการรักษาผู้นำของ 0 เหล่านี้ในโดเมนฟูริเยร์เพื่อ "สะท้อน" ส่วนประกอบความถี่ต่ำที่ถูกเก็บไว้บนความถี่สูง โปรดจำไว้ว่าคุณเรียนรู้การประมวลผลสัญญาณเกี่ยวกับทฤษฎีการสุ่มตัวอย่าง: การคูณด้วยลำดับของแรงกระตุ้น (หรือไดรัค) ส่งผลให้เกิดการสังสัยกับลำดับไดแรคอื่นในโดเมนฟูริเยร์เช่นในกรณีนั้นคลื่นความถี่ของสัญญาณซ้ำ ตามแกนความถี่โดยมีช่วงเวลาเท่ากับอัตราการสุ่มตัวอย่าง

โดยปกติเมื่อการสุ่มตัวอย่างคุณลบ 0 (เพราะคุณถือว่าอัตราการสุ่มตัวอย่างใหม่) แต่ที่นี่การทำให้พวกมันส่งผลให้มีส่วนประกอบความถี่สูงที่น่ารำคาญมากขึ้น การแทรกสัญญาณเหล่านี้จะไม่แก้ไขสิ่งนี้

ดีในทุกคำตอบสั้น ๆ : ไม่ทำอย่างนั้น :-)

ในที่สุดฉันอาจแนะนำให้คุณใช้ GUI ที่ฉันพัฒนาขึ้นสำหรับการประชุม LVAICA 2012: มีrepo gitสำหรับมัน ฉันยังคงแก้ไขข้อบกพร่องและปรับปรุงมันดังนั้นความคิดเห็นยินดีต้อนรับ: D

หวังว่าจะช่วย!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.