2 คะแนน โดย GN⁺ 2024-11-11 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ภาพรวมของโปรเจกต์

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

    • ข้อมูลเครื่องดนตรีนำมาจากฐานข้อมูลของ 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 ความคิดเห็น

 
GN⁺ 2024-11-11
ความเห็นจาก Hacker News
  • ชื่ออาจทำให้สับสนได้ โปรเจกต์นี้ไม่ใช่การแยกเสียงต้นฉบับ แต่เป็นอัลกอริทึมตรวจจับระดับเสียง และยังมีความสามารถในการจำแนกเครื่องดนตรีด้วย
    • อาจใช้เวลามากขึ้นในการแก้ไขผลลัพธ์
  • การถอดเสียงดนตรีอัตโนมัติ (audio->MIDI) เป็นสาขาย่อยสำคัญของดีปเลิร์นนิงและ music information retrieval
    • โปรเจกต์ MT3 ของ Google ถูกยกเป็นตัวอย่างของโมเดลที่ประสบความสำเร็จ
    • สำหรับการถอดเสียงเปียโนนั้น แสดงความแม่นยำได้แทบสมบูรณ์แบบแม้กับเสียงคุณภาพต่ำ
  • หากสนใจการแยกเสียง แนะนำให้ดู RipX
    • สามารถส่งออกแทร็กที่แยกแล้วเป็นไฟล์ MIDI ได้
    • ยังมีปัญหาอยู่บ้าง แต่ทำงานได้ดี
    • การแยก stem กลายเป็นมาตรฐานของซอฟต์แวร์ดนตรีแล้ว และ DAW แทบทั้งหมดก็รองรับ
  • ฟิสิกส์ของเครื่องดนตรีจริงอาจไม่สามารถอธิบายได้ด้วยเทมเพลตฟูเรียร์แบบง่าย
    • ทรัมเป็ตอาจมีสเปกตรัมฮาร์มอนิกต่างกันเมื่อเล่นเบากับเมื่อเล่นดัง
    • เนื้อหาฮาร์มอนิกอาจเปลี่ยนไปอย่างมากตามความดังของเครื่องดนตรี
    • สามารถเพิ่มเทมเพลตฟูเรียร์ที่ขึ้นกับความดังสำหรับเครื่องดนตรีแต่ละชนิดเพื่อปรับปรุงความแม่นยำได้
  • ทำให้นึกถึงตอนเล่น Audiosurf เมื่อ 15 ปีก่อน
  • เดโมวิดีโอบน YouTube ดูเหมือนจะไม่ได้แสดงการแยกซอร์ส
  • ไม่มีใครพูดถึงเลยว่าเขียน "separation" ผิดอยู่สี่ครั้ง
  • วิดีโอบางอันดูเหมือนจะไม่มีเสียง
  • โปรเจกต์นี้อาจเป็นผลงานของน้องชายของ Joshua Bird
    • Joshua Bird เองก็เคยทำโปรเจกต์ที่น่าประทับใจมาแล้ว
  • หาซอร์สโค้ดไม่เจอ แต่โปรเจกต์ดูน่าสนใจ