Audio Decomposition – โอเพนซอร์สสำหรับแยกเพลงออกเป็นเครื่องดนตรีที่ประกอบกัน
(matthew-bird.com)-
ภาพรวมของโปรเจกต์
- โปรเจกต์นี้มีเป้าหมายเพื่อสร้างโปรแกรมที่แปลงเพลงเป็นโน้ตดนตรี
- เป็นโปรเจกต์โอเพนซอร์สที่แยกเพลงออกเป็นเครื่องดนตรีที่ประกอบกัน โดยไม่ใช้ไลบรารีแยกเครื่องดนตรีจากภายนอก
- แรงจูงใจของโปรเจกต์มาจากความต้องการส่วนตัวและการขาดแคลนอัลกอริทึมโอเพนซอร์สแบบเรียบง่าย
-
กระบวนการเตรียมการ
- ข้อมูลเครื่องดนตรีนำมาจากฐานข้อมูลของ University of Iowa Electronic Music Studios
- จากข้อมูลนี้ ได้คำนวณฟูเรียร์ทรานส์ฟอร์มของคลื่นทั้งหมดและ envelope ของรูปคลื่น
-
หลักการทำงาน
- รูปคลื่นเสียงของเครื่องดนตรีมีลักษณะเด่นหลักจากฟูเรียร์ทรานส์ฟอร์มและ envelope
- จากสิ่งนี้สามารถระบุได้ว่าเครื่องดนตรีใดกำลังเล่นโน้ตใดอยู่
-
ฟูเรียร์ทรานส์ฟอร์ม
- ทำฟูเรียร์ทรานส์ฟอร์มของไฟล์เพลงทุก ๆ 0.1 วินาทีเพื่อสร้าง spectrogram
- นำฟูเรียร์ทรานส์ฟอร์มที่บันทึกไว้ของเครื่องดนตรีแต่ละชนิดมารวมกันเพื่อสร้างฟูเรียร์ทรานส์ฟอร์มของหน้าต่างเวลา 0.1 วินาทีขึ้นใหม่
- ขนาดของแต่ละเครื่องดนตรีคำนวณจาก partial derivative ของฟังก์ชันต้นทุน MSE ตามความถี่
-
Envelope
- envelope คือเส้นขอบบนของรูปคลื่น และต้องใช้วิธีที่ทนทานต่อ noise และรูปคลื่นบางประเภท
- หา envelope โดยแบ่งรูปคลื่นออกเป็น chunk แล้วนำค่าสูงสุดของแต่ละ chunk มาใช้
- วิเคราะห์ envelope โดยแบ่งเป็น attack, sustain และ release
- รูปคลื่นของเครื่องดนตรีอาจมีการลดทอนแบบคงที่หรือแบบไดนามิก และแยกความต่างนี้ด้วยการวิเคราะห์ปัจจัยการลดทอนและอัตราการเปลี่ยนแปลง
-
รูปคลื่นหลากหลายประเภท
- เพื่อประมวลผลไฟล์เพลง จะใช้ band-pass filter กับความถี่ของแต่ละโน้ต
- สำหรับเครื่องดนตรีแต่ละชนิด จะหาจุดเริ่มและจุดสิ้นสุดของแต่ละโน้ตผ่าน cross-correlation ของ attack และ release แล้วคำนวณ MSE เพื่อหาต้นทุน
- นำขนาดที่ได้จากขั้นตอนฟูเรียร์ทรานส์ฟอร์มมาคูณกับค่าผกผันของต้นทุนเพื่อหาขนาดสุดท้าย
-
ผลลัพธ์และการแสดงผล
- ใช้ scatter plot ของ matplotlib เพื่อแสดงโน้ตดนตรี
- เดิมทีพยายามสร้างเสียงกลับมาจากค่าขนาด แต่เกิดปัญหาหลายอย่างจึงล้มเลิกไป
- มีประโยชน์ต่อการสร้างโน้ตดนตรีขึ้นใหม่ และช่วยได้มากเป็นพิเศษเมื่อมีปัญหาในการหา pitch หรือ chord
1 ความคิดเห็น
ความเห็นจาก Hacker News