FFT Spectrums kullanarak benzer Müzik bul


16

Farklı Müzik Türleri içeren bir Kütüphanede benzer Şarkıları eşleştirmenin / bulmanın bir yolunu bulmak için birkaç haftadır deniyorum.

İlk denemem Tempo gibi özellikleri tespit etmek veya Gruplar oluşturmak için Şarkılar'da ne kadar Bass olduğunu tespit etmekti, ama bu yaklaşımı (Ses Değişikliklerine Dayalı Beat Algılama) çok fazla almadım çünkü Songs Beat'in yaklaşık% 20'sinde sayılmak zorunda değil her zaman, bazen 1/2 veya 1 / 3'ü ve bunu uygulayamadım.

Birkaç hafta başarısız denedikten sonra, bu gönderide daha sonra açıklanan yeni bir fikrim var. Basitçe söylemek gerekirse Spectrum Dosya Örnekleri alarak, onları karşılaştırmak için Dosyaların "Ortalama Spektrumu" gibi bir şey yaparak çalışır. Arkadaki fikir, örneğin Hardstyle'in ortalama Rock Müzik'ten çok daha fazla Bass'a sahip olmasıydı, Audacity'deki bazı Spektrumlara bakarak bunu doğruladım.

  • Dosya 1: Tam Dosya FFT Spektrumları Alın (2048 Örnek Boyutu atm, Genlik Günlüğü. Ölçekli)
  • Tüm Spektrum Dizilerini topla, her bir Bölmenin Ortalamalarını al
  • Aynı diğer bazı dosyaları yapın, tüm sonuçları saklayın
  • Dosya 1 ve diğer Dosyalar arasındaki FFT Değerleri Listesini Yapma
  • Dosya 1 ve Dosya X arasındaki Farkları Ortalayın
  • Bu Ortalamalara Göre Artan Şekilde Sırala
  • En Düşük "Fark Değeri" olan şarkılar Benzer kabul edilir.

İyi bilgiye sahip olan bazılarınız bunun Fikrimi uygulamanın doğru / iyi yolu olup olmadığını söyleyebilir mi?


1
Tempoyu algılamaya çalışıyorsanız, sinyali kareyi almayı ve ardından bir Fourier dönüşümü almayı deneyebilirsiniz. 1 Hz düzeyindeki frekanslar, filtrelenmiş oldukları için sıradan (niteliksiz) bir FFT spektrumunda bulunmayacaktır. Saha tespiti için kullanılan ilgili bir fikre "cepstrum" denir; googling ile bu konuda bilgi edinebilirsiniz. Pop ve caz'ı klasikten ayırt etmek için, bir bateri kitinin seslerini tespit etmeyi deneyebilirsiniz. Vibrato makine tarafından algılanabilir olmalıdır. Makine ile hesaplanabilecek uyumsuzluk önlemleri vardır.

1
Belki de moderatörlerden bunu dsp'ye taşımasını istemelisin.SE
Dilip Sarwate

Sorumu SE'nin DSP'sine taşıma isteği ile işaretledim. Yani Girdi'yi sınıflandırmak için bir Bateri Seti Var mı değil mi tespit edebilir miyim? Kareli sinyalin Tempo'ya nasıl yol açtığını açıklayabilir misiniz?

3
Müzik, özellikle bugünlerde spektral yayılmalarını en üst düzeye çıkaracak şekilde kaydedilir ve ustalaşır. Tam uzunluktaki spektrumların müziği sınıflandırmak için size iyi bir kriter vereceğini düşünmüyorum.
Phonon

2
Spektrumlar yerine, spektrogramlara bakmalısınız. Spektrumlar size bir kerede tüm şarkının frekans içeriğini gösterir. Spektrogramlar, frekans içeriğinin zaman içinde nasıl değiştiğini gösterir.
Mart'ta endolit

Yanıtlar:


17

Yapmaya çalıştığınız şey yüzlerce araştırmacı tarafından tekrar tekrar denendi ve bu konuda oldukça büyük bir çalışma var. ISMIR konferansının bildirilerini kontrol edin. Güncel olmasa bile Elias Pampalk'ın tezini okuyun: http://www.ofai.at/~elias.pampalk/publications/pampalk06thesis.pdf

Sizi hızla doğru yola yönlendirmek için:

Müzik birçok boyuta göre benzer olabilir: a) tını / doku / tür; b) ritmik model; c) melodi / akor ilerlemesi ... ve daha fazlası! Mesajınızdan neyi ölçmek istediğiniz açık değil!

  • A) Bakmak isteyebileceğiniz özellikler MFCC'dir (Mel Frekans Cepstrum Katsayıları), çünkü bir şekilde insan işitme şeklini (frekans çözgü, log ölçeği) yakalarlar, çünkü dekorla ilişkilidirler (modellemeyi kolaylaştırırlar) ve daha düşük boyutsallığa sahip oldukları için (13 katsayı 2048'e karşı).
  • Eğer b) ile ilgileniyorsanız, "Dalgalanma Paternleri" (Pampalk, birkaç bant üzerinde 0.1 .. 10 Hz aralığında sinyalin kısa otokorelasyonu); veya Whitman'ın "Penny" özellikleri (zaman ekseni boyunca MFCC'nin FFT'si).
  • C) ile ilgileniyorsanız, kromagramlara bakın. Ellis'in chromagram koduyla başlayın (http://labrosa.ee.columbia.edu/matlab/chroma-ansyn/) ve daha sağlam bir şeye ihtiyacınız varsa Mauch uygulamasına geçin (http://isophonics.net/nnls-chroma ).

Bu özellikler için. Şimdi şarkılarınızı bu özelliklerin bir sırası olarak gösterildikten sonra karşılaştırmanın daha iyi bir yolunu düşünmeniz gerekecek. Diziler arasındaki ikili farkları hesaplamak çok akıllı değildir - örneğin: bir şarkıyı ve aynı şarkıyı bir sessizlikle karşılaştırmak, tam olarak aynı olsa bir fark yaratır! Bu özelliklerin dağılımını karşılaştırmayı tercih edersiniz; örneğin, A şarkısı üzerindeki özelliklerin ortalama / standart sapmasını ve B şarkısı üzerindeki özelliklerin ortalama / standart sapmasını hesaplayın ve sonra olasılıksal bir mesafe alın (KL, bunlara göre Bhattacharyya).

Son nokta, ama daha sonra önemli olacak: en yakın eşleşmeleri bulmak için bir şarkı ile korpusun geri kalanı arasındaki mesafeyi hesaplamak oldukça verimsiz. Büyük koleksiyonlarla uğraşırken, LSH veya Top ağaçları gibi teknikler, en yakın komşu sorgularının tüm corpus ile açıkça karşılaştırılmadan gerçekleştirilmesine izin verir.

Bir yana, tempo tespiti tamamen farklı bir konudur. Bu konuya bakmak isterseniz, konuyla ilgili en iyi performans / erişilebilirlik belgesi Ellis'in Dinamik Programlama ile Beat Tracking'dir. http://www.ee.columbia.edu/~dpwe/pubs/Ellis07-beattrack.pdf . İnanılmaz derecede basit ama son teknoloji algoritmalara yakın.


Ayrıntılı Cevabınız için teşekkürler, MFCC'yi bu bağlamda birçok kez duydum ve çıplak FFT Sonuçlarının kullanılmaması makul görünüyor. Mevcut "bilgi durumu" ve geliştirme ortamı (C #, Bass Library'nin FFT Sonuçları) ile uygulamak oldukça karmaşık görünüyor ama deneyeceğim.
gfg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.