การเขียนโปรแกรม Vocoder


11

ฉันต้องการตั้งโปรแกรมตัวสังเคราะห์เสียงของฉันเองเช่น"Songify"แต่ฉันไม่สามารถหาอัลกอริธึมของตัวแปลได้อย่างง่าย บางทีคุณสามารถอธิบายหรือบอกตำแหน่งที่จะหาข้อมูลเกี่ยวกับวิธีการทำงานของ Vocoder


3
DAFXโดย Udo Zölzer et al มีตัวแปลงเฟสอย่างง่ายพร้อมรหัส MATLAB
Phonon

1
ตรวจสอบMelodify SDKทำสิ่งเดียวกันและทดลองใช้งานตัวอย่าง
Danijel

คำตอบ:


18

ฉันกลัวว่าคำตอบทั้งหมดที่นี่ไม่เกี่ยวข้องกับคำถาม สิ่งที่เรียกว่าvocoderในโลกการผลิตเพลงมีน้อยจะทำอย่างไรกับvocoder เฟสที่ใช้ในการประมวลผลสัญญาณ ในการทำให้เรื่องแย่ลงแอพSongify ที่อ้างอิงโดยโพสต์ดั้งเดิมไม่ใช่ตัวอย่างของ Vocoder ให้เราจัดการเรื่องนี้กันเถอะ!

1. เฟส vocoder

vocoder เฟสโดยอ้างอิงจากคำตอบอื่น ๆ เป็นเทคนิคการประมวลผลสัญญาณที่สามารถใช้ในการดำเนินการปรับเปลี่ยนเวลา / ระดับเสียงของสัญญาณ (เวลายืด, สนามขยับ) โดยการคำนวณการแสดงเวลาความถี่ของสัญญาณ (ระยะสั้นแปลงฟูเรีย หรือ STFT) จากนั้นแทรก / ลบเฟรมสัญญาณและจากนั้นรักษาความสอดคล้องของข้อมูลเฟส ความสัมพันธ์กับเสียงเป็นเรื่องในอดีตเท่านั้นและปัจจุบันใช้สำหรับการเปลี่ยนระดับเสียงและยืดเวลาในฮาร์ดแวร์ / ซอฟต์แวร์ระบบเสียงขั้นต่ำ RubberBandเป็นตัวอย่างของการเปลี่ยนแปลงโอเพ่นซอร์ส C ++ ไลบรารี่ที่ขึ้นอยู่กับ phase-vocoder

2. Vocoder

เมื่อผู้คนในแวดวงการผลิตเพลงอ้างถึง Vocoder พวกเขาอ้างถึงอุปกรณ์ที่แยกซองจดหมายสเปกตรัมของสัญญาณ (โดยปกติจะเรียกว่า modulator) และการกรองสัญญาณอื่น (โดยปกติจะเป็นเนื้อสังเคราะห์ที่อุดมไปด้วยเรียกว่าผู้ให้บริการ) ด้วยตัวกรองที่มีการตอบสนองเป็นซองสเปกตรัมสกัด สำหรับตัวอย่างของเสียงที่เกิดขึ้นให้ฟัง 0:23 ใน Kraftwerk Trans Europe Expressหรือโครงการของ Alan Parsons The Ravenจากสองสามวินาทีแรก ผลที่ได้คือเสียงต่ำที่ใช้กับทำนองหรือคอร์ดที่เล่นโดยสัญญาณพาหะทำให้รู้สึกว่าเสียงพูดผ่านซินธิไซเซอร์

Vocoder ซึ่งเดิมเป็นอุปกรณ์อะนาล็อกมันถูกนำมาใช้กับสองธนาคารของตัวกรอง bandpass โหลหรือมากกว่าที่มีสูง Q. สัญญาณโมดูเลเตอร์จะถูกส่งผ่านตัวกรองแรกของธนาคารและความกว้างของสัญญาณย่อยทั้งหมดจะถูกติดตามด้วย อาร์เรย์ของผู้ติดตามซองจดหมาย ในแบบคู่ขนานสัญญาณผู้ให้บริการจะถูกส่งผ่านตัวกรองธนาคารอื่น แต่ละวงย่อยจะถูกขยาย (ด้วย VCA) พร้อมกับกำไรที่ได้รับจากผู้ติดตามซองจดหมาย หากคุณอ่านอะนาล็อกคุณสามารถดูแผนผังของสถานีเสียงจากที่นี่ได้จากVocoderของ Jurgen Haible- ด้านบนตัวกรองสัญญาณมอดูเลเตอร์ที่ด้านล่างตัวกรองพาหะและ VCA การใช้งานซอฟต์แวร์ของตัวแปลงสัญญาณอยู่ใกล้กับสิ่งนี้เพียงเพราะผู้ผลิตเพลงคาดหวังว่าตัวเข้ารหัสจะให้เสียงเหมือนอุปกรณ์อะนาล็อกคลาสสิค แต่ถ้าคุณไม่ต้องการความจงรักภักดีกับอุปกรณ์ "เหล้าองุ่น" และต้องการบางสิ่งที่ถูกกว่า 40 biquads อีกวิธีหนึ่งเพื่อให้ได้ผลลัพธ์เดียวกันคือการประเมินตัวกรองทุกขั้ว (จาก 8 ถึง 20 ลำดับขึ้นอยู่กับว่าคุณต้องการใกล้แค่ไหน เพื่อรับเสียงต้นฉบับ) จากสัญญาณมอดูเลต (AR-modelling); แล้วใช้ตัวกรองนี้กับผู้ให้บริการ ปัญหาทั่วไปที่นี่คือคุณจะต้องอัปเดตค่าสัมประสิทธิ์ตัวกรองของคุณทุก ๆ 20 เฟรมหรือมากกว่านั้น ดังนั้นคุณต้องแสดงตัวกรอง all-pole ซึ่งจัดการค่าสัมประสิทธิ์การปรับปรุงอย่างฉับพลัน

3. ปรับอัตโนมัติและ pitch-remapping

สิ่งที่ Songify ทำนั้นมีดังต่อไปนี้: แยก prosody (pitch contour) ของเสียงที่บันทึกไว้และปรับเปลี่ยนเพื่อให้ contour pitch ที่เกิดนั้นตรงกับทำนองเพลงเป้าหมาย นี่เป็นสิ่งที่คล้ายกับการปรับจูนอัตโนมัติด้วยความแตกต่างที่การปรับอัตโนมัติ "รอบ" ระดับเสียงไปยังเซมิโคลนที่แม่นยำทางดนตรีที่ใกล้ที่สุดขณะที่ Songify เพิ่งผลักดันค่าเป้าหมาย

อัลกอริธึมในที่ทำงานที่นี่แตกต่างจากการยืดเวลาพิทช์แบบเดิมเนื่องจากสัญญาณเสียงเป็นโมโนโฟนิกและเหมาะกับรูปแบบตัวกรองซอร์ส แนวทางเช่น Time-Domain Pitch-Synchronous-Overlap-Add (TD-PSOLA) นั้นมีประสิทธิภาพมากกว่าทั้งการคำนวณและในแง่ของคุณภาพสำหรับการปรับเปลี่ยนระดับเสียงอย่างโปร่งใสมากกว่าอัลกอริธึมแบบขยายเวลาทั่วไป ) ตัวอย่างเหล่านี้ใช้ในการสังเคราะห์เสียงพูดเพื่อเปลี่ยนฉันทลักษณ์ของประโยคสังเคราะห์ - ไม่ต่างจาก Songify แน่นอน! การปรับอัตโนมัติจะขึ้นอยู่กับวิธีการดังกล่าวด้วยโดเมนเวลา (การตรวจจับวงจรสัญญาณอินพุทเต็มรูปแบบและทำการสุ่มใหม่)

ภาพประกอบ PSOLA



2

นี่คือลิงก์เดียวสำหรับหลอกรหัสที่ Mathworks

นี่คือลิงค์คำอธิบายของ algoritm ที่ DSP Dimensions

FFT bin มีความถี่กลาง ไซนัสใด ๆ ที่ความถี่ถังขยะที่แน่นอนนั้นจะมีเฟสเดียวกันโดยมีการอ้างอิงถึง 2 จุดอ้างอิงตรงข้ามกับ 1 เฟรม FFT แยกกันหรือมีเฟสเดลต้าที่สามารถคำนวณได้สำหรับ 2 จุดอ้างอิงหรือ 2 เฟรม FFT บางระยะห่างโดยพลการ . แนวคิดพื้นฐานของเฟสวัสดีนเตอร์คือการปรับความถี่ช่องสัญญาณ FFT แต่ละความถี่ให้ใกล้เคียงกันเล็กน้อยเพื่อให้สัญญาณไซน์ที่ความถี่นั้นตรงกับเฟสที่ตรวจพบที่จุดอ้างอิงของเฟรมอ้างอิง 2 เฟรม FFT ถ้าความถี่ศูนย์ช่อง FFT ไม่

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


2

บทความต่อไปนี้อธิบายถึงช่วงสั้น ๆ ของการแปลงฟูริเยร์ (STFT) จากนักร้องเฟสรวมถึงเทคนิคการซิงโครนัสแบบเหลื่อมซ้อนเพิ่ม (PSOLA) เพื่อแก้ไขปัญหาเวลาและระดับเสียงของสัญญาณ:

Moulines, E. & Laroche, J.
" เทคนิคที่ไม่ใช่พารามิเตอร์สำหรับการปรับเปลี่ยนระดับเสียงและระดับเวลาของการพูด ",
Speech Communication, 1995.
(รุ่น PDF บางส่วนมีอยู่ในลิงก์จากgoogle scholar )

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