Saya telah bereksperimen beberapa minggu untuk menemukan cara untuk mencocokkan / menemukan Lagu yang serupa di Perpustakaan yang berisi berbagai genre Musik.
Percobaan pertama saya adalah untuk Mendeteksi Fitur seperti Tempo atau berapa banyak Bass yang ada di Lagu untuk membentuk grup, tapi saya tidak jauh dengan pendekatan ini (Volume Change Berdasarkan Deteksi Ketukan) karena pada sekitar 20% dari Beat Lagu tidak perlu dihitung selalu, kadang-kadang 1/2 atau 1/3 dari mereka dan saya tidak bisa mengimplementasikannya.
Setelah beberapa minggu gagal mencoba saya mendapat ide baru yang akan dijelaskan nanti dalam posting ini. Sederhananya bekerja dengan mengambil Sampel Spectrum File, membuat sesuatu seperti "Spektrum Rata-rata" File untuk membandingkannya. Gagasan di belakang adalah bahwa misalnya Hardstyle memiliki Bass lebih banyak daripada Musik Rock rata-rata, saya juga memverifikasi ini dengan melihat beberapa Spectrum di Audacity.
- File 1: Ambil Spektrum FFT File lengkap (2048 Contoh Ukuran atm, Skala Amplitude).
- Jumlah semua Arrays Spectrum, ambil Rata-rata dari setiap Bin
- Lakukan hal yang sama pada beberapa File lain, simpan semua Hasil
- Buat Daftar Perbedaan Nilai FFT antara File 1 dan File lainnya
- Buat Rata-rata Perbedaan antara File 1 dan File X
- Sortir Naik dengan Rata-Rata ini
- Lagu dengan "Nilai Perbedaan" Terendah dianggap Serupa.
Dapatkah beberapa dari Anda yang memiliki pengetahuan yang baik memberi tahu saya apakah ini akan menjadi cara yang tepat / baik untuk mengimplementasikan Ide saya?
Jawaban:
Apa yang Anda coba lakukan telah dicoba berulang kali oleh ratusan peneliti dan ada cukup banyak pekerjaan tentang ini. Periksa proses konferensi ISMIR. Bahkan jika itu tidak mutakhir, bacalah tesis Elias Pampalk: http://www.ofai.at/ ~elias.pampalk/publications/pampalk06thesis.pdf
Untuk mengarahkan Anda dengan cepat di jalur yang benar:
Musik dapat serupa menurut banyak dimensi: a) timbre / tekstur / genre; b) pola ritmis; c) progresi melodi / akord ... dan banyak lagi! Dari pesan Anda, tidak jelas apa yang ingin Anda ukur!
Itu untuk fitur. Sekarang Anda harus memikirkan cara yang lebih baik untuk membandingkan lagu setelah direpresentasikan sebagai urutan fitur-fitur tersebut. Menghitung perbedaan berpasangan di antara urutan tidak terlalu pintar - misalnya: membandingkan lagu dan lagu yang sama diimbangi dengan keheningan akan menghasilkan perbedaan sementara itu persis sama! Anda lebih suka membandingkan distribusi fitur-fitur itu; misalnya menghitung deviasi rata-rata / standar dari fitur di atas lagu A dan deviasi rata-rata / standar dari fitur di atas lagu B dan kemudian mengambil jarak probabilistik (KL, Bhattacharyya atas mereka).
Poin terakhir, tetapi yang akan menjadi masalah nanti: menghitung jarak antara lagu dan seluruh korpus untuk menemukan pertandingan terdekat cukup tidak efisien. Ketika berhadapan dengan koleksi besar, teknik seperti LSH atau Ball tree memungkinkan pertanyaan tetangga terdekat dilakukan tanpa perbandingan eksplisit dengan seluruh corpus.
Selain itu, deteksi tempo adalah masalah yang sama sekali berbeda. Jika Anda ingin melihatnya, makalah kinerja / aksesibilitas terbaik untuk topik ini adalah Pelacakan Ketukan Ellis oleh Pemrograman Dinamis. http://www.ee.columbia.edu/~dpwe/pubs/Ellis07-beattrack.pdf . Ini sangat sederhana tetapi dekat dengan algoritma canggih.
sumber