ค้นหาเพลงที่คล้ายกันโดยใช้ FFT Spectrums


16

ฉันได้ทดลองหลายสัปดาห์เพื่อหาวิธีจับคู่ / ค้นหาเพลงที่คล้ายกันในห้องสมุดที่มีแนวดนตรีที่แตกต่างกัน

ความพยายามครั้งแรกของฉันคือการตรวจสอบคุณสมบัติเช่น Tempo หรือเสียงเบสที่มีในเพลงที่รวมตัวกันเป็นกลุ่ม แต่ฉันไม่ได้ไปไกลกับวิธีนี้ (การตรวจจับจังหวะการเปลี่ยนแปลงตามปริมาณ) ตั้งแต่ประมาณ 20% ของเพลง Beat เสมอบางครั้ง 1/2 หรือ 1/3 ของพวกเขาและฉันไม่สามารถใช้มันได้

หลังจากพยายามล้มเหลวหลายสัปดาห์ฉันก็มีความคิดใหม่ซึ่งจะอธิบายต่อไปในโพสต์นี้ เพียงแค่ทำให้มันใช้งานได้โดยใช้ Spectrum Samples of Files ทำให้เป็นเหมือน "Average Spectrum" ของไฟล์เพื่อเปรียบเทียบ แนวคิดที่อยู่เบื้องหลังคือตัวอย่างเช่น Hardstyle มีเบสมากกว่าเพลงร็อคโดยเฉลี่ยฉันยังตรวจสอบเรื่องนี้ด้วยการดู Spectrums ใน Audacity

  • ไฟล์ 1: นำไฟล์เต็ม FFT Spectrums (2048 ตัวอย่างขนาด ATM, สัดส่วนการบันทึก Amplitudes)
  • รวมอาร์เรย์สเปกตรัมทั้งหมดใช้ค่าเฉลี่ยของแต่ละ Bin
  • ทำเช่นเดียวกันกับไฟล์อื่นบางไฟล์จัดเก็บผลลัพธ์ทั้งหมด
  • ทำรายการค่า FFT ความแตกต่างระหว่างไฟล์ 1 และไฟล์อื่น ๆ
  • ทำค่าเฉลี่ยของความแตกต่างระหว่างไฟล์ 1 และไฟล์ X
  • เรียงลำดับจากน้อยไปมากตามค่าเฉลี่ยเหล่านี้
  • เพลงที่มี "ค่าความแตกต่างต่ำที่สุด" ถือว่ามีความคล้ายคลึงกัน

คุณบางคนที่มีความรู้ดีสามารถบอกฉันได้หรือไม่ว่านี่จะเป็นวิธีที่ถูกต้อง / ดีในการนำแนวคิดของฉันไปใช้?


1
หากคุณพยายามตรวจจับจังหวะคุณอาจต้องการลองยกกำลังสองสัญญาณแล้วทำการแปลงฟูริเยร์ ความถี่ของคำสั่ง 1 Hz จะไม่ปรากฏในสเปกตรัม FFT สามัญ (ไม่ผ่านการรับรอง) เนื่องจากมีการกรองออกมา แนวคิดที่เกี่ยวข้องซึ่งใช้สำหรับการตรวจจับระดับเสียงเรียกว่า "cepstrum;" คุณสามารถค้นหาเกี่ยวกับมันโดย googling เพื่อแยกความแตกต่างของป๊อปและแจ๊สจากคลาสสิกคุณสามารถลองตรวจสอบเสียงของกลองชุดซึ่งไม่ได้มีการทำเครื่องหมาย Vibrato ควรตรวจจับเครื่องได้ มีมาตรการของความไม่สอดคล้องกันที่สามารถคำนวณได้จากเครื่อง

1
บางทีคุณควรขอให้ผู้ดูแลย้ายสิ่งนี้ไปยัง dsp.SE
Dilip Sarwate

ฉันตั้งค่าสถานะคำถามของฉันพร้อมคำขอให้ย้ายไปยัง DSP ของ SE คุณหมายถึงฉันสามารถตรวจจับได้ว่ามี Drumkit Present หรือไม่ที่จะจำแนก Input หรือไม่? คุณช่วยอธิบายว่าสัญญาณกำลังสองนำไปสู่ ​​Tempo ได้อย่างไร?

3
เพลงได้รับการบันทึกและควบคุมด้วยวิธีการดังกล่าวเพื่อเพิ่มการแพร่กระจายคลื่นความถี่โดยเฉพาะอย่างยิ่งในปัจจุบัน ฉันไม่คิดว่า spectra เต็มความยาวจะให้เกณฑ์ที่ดีสำหรับการจำแนกเพลง
Phonon

2
แทนที่จะเป็นสเปคตรัมคุณควรดูสเปคตรัม Spectrums จะแสดงเนื้อหาความถี่ของเพลงทั้งหมดในครั้งเดียวเท่านั้น Spectrograms แสดงให้เห็นว่าเนื้อหาความถี่เปลี่ยนแปลงตลอดเวลาอย่างไร
endolith

คำตอบ:


17

สิ่งที่คุณพยายามทำนั้นได้รับการทดลองซ้ำแล้วซ้ำอีกโดยนักวิจัยหลายร้อยคนและมีงานขนาดใหญ่เกี่ยวกับเรื่องนี้ ตรวจสอบการดำเนินการของการประชุม ISMIR แม้ว่ามันจะไม่เป็นปัจจุบันอ่านวิทยานิพนธ์ของ Elias Pampalk: http://www.ofai.at/~elias.pampalk/publications/pampalk06thesis.pdf

ในการปรับทิศทางคุณอย่างรวดเร็วในเส้นทางที่ถูกต้อง:

เพลงสามารถคล้ายกันตามหลายมิติ: ก) เสียงต่ำ / พื้นผิว / ประเภท; b) รูปแบบเป็นจังหวะ; c) ท่วงทำนอง / คอร์ด ... และอีกมากมาย! จากข้อความของคุณยังไม่ชัดเจนว่าคุณต้องการวัดอะไร!

  • หากคุณมีความสนใจใน) คุณสมบัติที่คุณอาจต้องการดูคือ MFCC (Mel Frequency Cepstrum Coefficients) เนื่องจากพวกเขาจะจับภาพการทำงานของการได้ยินของมนุษย์ (การแปรปรวนความถี่และระดับการบันทึก) เพราะพวกมันเกี่ยวข้องกัน และเนื่องจากมีมิติต่ำกว่า (13 สัมประสิทธิ์กับ 2048)
  • หากคุณมีความสนใจใน b) ดูที่คุณสมบัติที่เรียกว่า "รูปแบบความผันผวน" (Pampalk) ในช่วงสั้น ๆ ของสัญญาณอัตโนมัติในช่วง 0.1 .. 10 Hz ในช่วงสองสามวง); หรือฟีเจอร์ "เพนนี" ของ Whitman (FFT ของ MFCC ตามแกนเวลา)
  • หากคุณสนใจใน c) ให้ดูที่ chromagrams เริ่มต้นด้วยรหัส Chromagram ของ Ellis (http://labrosa.ee.columbia.edu/matlab/chroma-ansyn/) จากนั้นเลื่อนไปสู่การใช้งานของ Mauch หากคุณต้องการสิ่งที่แข็งแกร่งกว่า (http://isophonics.net/nnls-chroma )

นั่นคือสำหรับคุณสมบัติ ตอนนี้คุณจะต้องคิดถึงวิธีที่ดีกว่าในการเปรียบเทียบเพลงของคุณเมื่อพวกเขาแสดงเป็นลำดับของคุณสมบัติเหล่านั้น การคำนวณความแตกต่างระหว่างคู่ลำดับไม่ฉลาดมากเช่นการเปรียบเทียบเพลงและเพลงเดียวกันที่ถูกชดเชยด้วยความเงียบจะทำให้เกิดความแตกต่างในขณะที่มันเหมือนกัน! คุณควรเปรียบเทียบการกระจายของคุณลักษณะเหล่านั้น ตัวอย่างเช่นคำนวณค่าเบี่ยงเบนมาตรฐาน / ค่าเบี่ยงเบนมาตรฐานของคุณสมบัติเหนือเพลง A และค่าเบี่ยงเบนมาตรฐาน / ค่าเบี่ยงเบนมาตรฐานของคุณสมบัติเหนือเพลง B จากนั้นใช้ระยะทางน่าจะเป็น (KL, Bhattacharyya เหนือสิ่งเหล่านั้น)

จุดสุดท้าย แต่จะมีความสำคัญในภายหลัง: การคำนวณระยะห่างระหว่างเพลงและส่วนที่เหลือของคลังข้อมูลเพื่อค้นหาการจับคู่ที่ใกล้ที่สุดนั้นค่อนข้างไม่มีประสิทธิภาพ เมื่อจัดการกับคอลเลกชันขนาดใหญ่เทคนิคเช่น LSH หรือบอลทรีอนุญาตให้ทำเคียวรีเพื่อนบ้านที่ใกล้ที่สุดดังกล่าวโดยไม่ต้องเปรียบเทียบอย่างชัดเจนกับคลังข้อมูลทั้งหมด

นอกเหนือจากนั้นการตรวจจับจังหวะก็เป็นสิ่งที่แตกต่างอย่างสิ้นเชิง หากคุณต้องการตรวจสอบกระดาษประสิทธิภาพที่ดีที่สุด / การเข้าถึงได้ในหัวข้อคือ Ellis 'Beat Tracking โดย Dynamic Programming http://www.ee.columbia.edu/~dpwe/pubs/Ellis07-beattrack.pdf มันง่ายอย่างไม่น่าเชื่อ แต่ใกล้กับอัลกอริธึมที่ทันสมัย


ขอบคุณสำหรับคำตอบโดยละเอียดของคุณฉันได้ยินเกี่ยวกับ MFCC หลายครั้งในบริบทนี้และดูเหมือนสมเหตุสมผลที่จะไม่ใช้ผลลัพธ์ FFT เปล่า ดูเหมือนจะค่อนข้างซับซ้อนที่จะใช้กับ "สถานะของความรู้" และสภาพแวดล้อมการพัฒนาปัจจุบันของฉัน (C #, ผลลัพธ์ FFT ของ Bass Library) แต่ฉันจะลอง
gfg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.