เล่นเพลงช้าลงในขณะที่รักษาความถี่


10

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


1
นอกเหนือจากคำตอบที่ให้ไว้ด้านล่างโปรดดูลิงค์นี้สำหรับข้อมูลเพิ่มเติม
A_A

คำตอบ:


5

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

โดเมนเวลา:

ในโดเมนเวลาคุณสามารถลองใช้เทคนิคต่าง ๆ เช่น:

  • TDHS (โดเมนเวลา Harmonic Sacaling)
  • SOLA (เพิ่มแบบซิงโครนัสซ้อนทับ)
  • PSOLA (Pitch Synchronous Overlap Add)
  • WSOLA (เพิ่มความคล้ายคลึงกันของรูปคลื่นซ้อนทับ)

ข้อดี: รวดเร็วบางอัลกอริธึมเข้าใจง่ายคุณภาพดีในเสียงโมโนโฟนิค

ข้อด้อย: โดยทั่วไปคุณจะต้องมีพิชแทร็กที่ดีมากเพื่อประกบกันในตำแหน่งที่ถูกต้องมันเป็นเรื่องยากที่จะทำ :-( ดังนั้นหากแทร็กพิทช์ของคุณล้มเหลวหรือไม่ทำงานในเสียง Poliphonic อัลกอริทึมนี้จะให้ข้อบกพร่อง / สิ่งประดิษฐ์จำนวนมาก ในเสียงที่ส่งออก

โดเมนความถี่:

การยืดเวลาทั้งหมดที่ฉันรู้ในโดเมนความถี่นั้นขึ้นอยู่กับเทคนิคของนักร้องแบบเฟส

จุดเด่น: จะทำงานในเสียงโพลีโฟนิคหรือโมโนโฟนิค

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

ฉันสามารถพูดได้ว่าหน้าต่างและขนาด hop เป็นหนึ่งในกุญแจสำคัญสำหรับคุณภาพของเสียงเรียกร้องระยะโดยทั่วไปเราเลือก4xเหลื่อมกับการสังเคราะห์ใหม่หน้าต่างขนาดหนึ่ง hann 4096ก็เพียงพอสำหรับหูของฉัน (แน่นอนถ้าคุณมีพลังในการประมวลผลสำหรับขนาดนี้) , vocoder ขั้นตอนมาตรฐานสามารถเพิ่ม effetcts เสียงก้องบางอย่างเพื่อพยายามหลีกเลี่ยงปัญหาแบบนี้คุณอาจต้องล็อคเฟส

สำหรับ datailed ดูในกระดาษMiller PucketteและPortnoff


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

ฉันไม่เคยลองอะไรแบบนั้นมันอาจใช้งานได้ปัญหาที่เห็นได้ชัดคือสิ่งนี้อาจมีค่าใช้จ่ายสูงมันไม่ได้เป็นวิธีที่มีประสิทธิภาพอย่างแน่นอนลองจินตนาการว่าคุณมีชิ้นส่วนของเสียง (1 นาที) ตัวอย่างที่ 44100Hz ทำในสิ่งที่คุณจะนำเสนอคุณจะต้องใช้ฟูเรียร์ที่44100 * 60 = 2646000จุดในครั้งเดียวและกระบวนการเพื่อให้ลืมที่จะพยายามใด ๆ ที่เวลาจริงการประมวลผลเช่นนี้ ,
ederwander

1
ฉันไม่คิดว่าสิ่งที่ฉันแนะนำก่อนหน้านี้จะทำงานในด้านคณิตศาสตร์ที่บริสุทธิ์ (โดยไม่คำนึงถึงต้นทุนและความไวของข้อผิดพลาด)
ฮันส์

3

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

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


ขอบคุณมากสำหรับคำตอบ คุณมีการอ้างอิงเกี่ยวกับการใช้เวฟเล็ตกับปัญหานี้หรือไม่?
ฮันส์

โปรดดูความคิดเห็นของฉันด้านล่างคำตอบของ ederwander เช่นกัน ขอบคุณ
ฮันส์

2

ด้านล่างนี้เป็นลิงก์ไปยังฟังก์ชั่นการสอนที่ง่ายและมีค่าใน C ++ (smbPitchShift.cpp) โดย Stephan M. Bernsee ซึ่งสามารถชะลอความเร็วหรือเพิ่มความเร็วของเพลงได้โดยไม่ต้องเปลี่ยนระดับเสียง

เขาได้เปิดตัวรหัสนี้ภายใต้ The Wide Open License (WOL) ภายในแอปพลิเคชันของฉันฉันสามารถปรับฟังก์ชั่นของเขาให้เป็นเพลงช้าลงแบบเรียลไทม์นั่นคือขณะที่เล่นไฟล์ mp3 และทำการตรวจจับระดับเสียงบนสัญญาณ mp3 นั้นในเวลาเดียวกัน

ฉันได้รวมลิงก์ไปยังเว็บไซต์ของ Bernsee ซึ่งมีคำอธิบายโดยละเอียดของเขาเกี่ยวกับ Time-Stretching และ Pitch-Shifting ของสัญญาณเสียงเช่นเพลง

https://github.com/AndyA/BatPhone/blob/master/pitchshift.c

http://blogs.zynaptiq.com/bernsee/time-pitch-overview/


ไม่ใช้time stretchรหัสดั้งเดิมใช้รหัสดั้งเดิมPitch Shiftในกรณีนี้เพื่อใช้การปรับเปลี่ยนมาตราส่วนเวลาที่คุณจะต้องรวมPitch Shifit + Resample (interpolation)รหัสของ Bernsee ทำงานได้ดีโดยใช้หน้าต่างขนาดที่4096คุณจะสามารถเปลี่ยนระดับเสียงหนึ่งระดับแปดเสียง (ด้านบนหรือด้านล่าง) หมายความว่าคุณจะสามารถสร้างมาตราส่วนเวลาด้วยคุณภาพที่ดีโดยใช้ปัจจัยระหว่าง 2.0x-0.5x ตัวแปลงเฟสที่สร้างขึ้นอย่างดีสามารถบรรลุผลลัพธ์ที่ดีกว่าโดยใช้ขนาดหน้าต่างเดียวกันและคุณจะสามารถคาดการณ์สิ่งเหล่านี้ได้ ปัจจัยที่มีคุณภาพดีกว่า
ederwander

โอ๊ะตอนนี้จำได้ว่าฉันต้องใช้การสุ่มตัวอย่างซ้ำเพื่อทำให้การยืดเวลาเสร็จสมบูรณ์เพื่อไม่ให้มีการเปลี่ยนระดับเสียงเดิม ดูเหมือนว่า Bernsee ได้สร้างการเปลี่ยนแปลงบางอย่างกับรหัสของเขาตั้งแต่รุ่นที่เชื่อมโยงกับ GitHub รหัสใหม่ของเขานั้นสามารถดาวน์โหลดได้จากเว็บไซต์ของเขา - มันอาจเพิ่มช่วงการเปลี่ยนจากสเปคดั้งเดิมของเขา ฉันปรับแต่งรหัสดั้งเดิมของเขาเพื่อที่ฉันจะได้เลื่อนระดับขึ้น 8x
James Paul Millard

ไม่มีความแตกต่างระหว่างรหัสของคุณและหน้า Bernsee คณิตศาสตร์หลักยังคงเหมือนเดิมความแตกต่างที่แข็งแกร่งที่ฉันเห็นคือขนาดของหน้าต่าง = 8192ในรหัสจากหน้าดาวน์โหลดดังนั้นคุณต้องทำ 4 คะแนนเพื่อทำการประมวลผล ฉันกลับมาบอกว่าด้วยขนาดหน้าต่างครึ่งที่8192/2=4096คุณสามารถทำได้เช่นเดียวกันโดยใช้ความลับของเฟส vocoder จุดที่นี่คือคุณสามารถรักษาคุณภาพด้วยการประมวลผลที่น้อยลง
ederwander

แม้ว่าฉันจะให้ลิงค์ GitHub ไปยัง BatPhone มันไม่ใช่รหัสของฉัน ฉันเพิ่งดึงมันจากการค้นหาทางอินเทอร์เน็ตเพื่อให้ดู smbPitchShift () รหัสของฉันได้รับการแก้ไขมากมายจากเวอร์ชันของ Bernsee และอาศัยอยู่ในไฟล์นี้: github.com/CreativeDetectors/PitchScope_Player/blob/master/Src/ …
James Paul Millard

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