Uzun yıllar polifonik müzikte ses perdesi tespiti araştırdım - bir mp3 kaydında bir gitar solo notalarını tespit etmek gibi. Ayrıca Wikipedia'da sürecin kısa bir açıklamasını veren bir bölüm yazdım (aşağıdaki bağlantıdaki "Pitch algılama" alt bölümüne bakın).
Bir piyanoya tek bir tuşa basıldığında, duyduğumuz şey sadece bir ses titreşimi frekansı değil, aynı zamanda matematiksel olarak farklı frekanslarda meydana gelen çoklu ses titreşimlerinin bir bileşiğidir . Farklı frekanslardaki titreşimlerin bu bileşiğinin elemanlarına harmonik veya kısmi denir. Örneğin, piyanoda Orta C tuşuna basarsak, kompozitin harmoniklerinin bireysel frekansları temel frekans olarak 261.6 Hz'de başlar, 523 Hz 2. Harmonik, 785 Hz 3. Harmonik, 1046 Hz Daha sonraki harmonikler, temel frekansın, 261.6 Hz'nin tam katlarıdır (örn: 2 x 261.6 = 523, 3 x 261.6 = 785, 4 x 261.6 = 1046).
Öncelikle tepe seviyeleri olan frekansları arayarak olası harmonikleri tespit etmek için değiştirilmiş bir DFT Logaritmik Dönüşümü kullanıyorum (aşağıdaki şemaya bakın). Değiştirilmiş Log DFT'im için veri toplama şeklimden dolayı, sinyale bir Pencereleme İşlevi uygulamak veya ekleme ve üst üste binme GEREKMEZ . Ve DFT'yi oluşturdum, böylece frekans kanalları logaritmik olarak yerleştirildi, böylece harmoniklerin gitar, saksafon vb.
Şimdi emekli olmak, PitchScope Player adlı ücretsiz bir gösteri uygulaması içinde saha algılama motorumun kaynak kodunu yayınlamaya karar verdim . PitchScope Player web üzerinde mevcuttur ve seçtiğiniz bir mp3 dosyasında iş algoritmamı görmek için Windows için yürütülebilir dosyayı indirebilirsiniz. GitHub.com'a aşağıdaki bağlantı, özel bir Logaritmik DFT dönüşümü ile harmonikleri nasıl tespit ettiğimi görebileceğiniz ve daha sonra frekanslarını doğru tamsayı ilişkisini sağlayan kısmi (harmonikler) arayabileceğiniz tam kaynak koduma yönlendirecektir. Saha'.
Pitch Detection Algorithm aslında iki aşamalı bir işlemdir: a) İlk olarak ScalePitch algılanır ('ScalePitch' 12 olası adım değerine sahiptir: {E, F, F #, G, G #, A, A #, B, C, C #, D , D #}) b) ve ScalePitch belirlendikten sonra, Octave 4 olası Octave-Candidate notunun tüm harmonikleri incelenerek hesaplanır. Algoritma, bir polifonik MP3 dosyasında herhangi bir zamanda en baskın perdeyi (müzik notası) tespit etmek için tasarlanmıştır. Bu genellikle bir enstrümantal solo notalarına karşılık gelir. 2 Aşamalı Hatve Algılama algoritmam için C ++ kaynak koduyla ilgilenenler GitHub.com'daki SPitchCalc.cpp dosyasındaki Estimate_ScalePitch () işlevinde başlamak isteyebilir.
https://github.com/CreativeDetectors/PitchScope_Player
https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection
Aşağıda, bir polifonik mp3 kaydında bir gitar solo 3 saniye boyunca bir Logaritmik DFT (benim C ++ yazılımı tarafından oluşturulan) görüntüsü yer almaktadır. Bir solo çalarken harmoniklerin gitardaki bireysel notalar için nasıl göründüğünü gösterir. Bu Logaritmik DFT'deki her nota için, çoklu harmoniklerinin dikey olarak uzandığını görebiliriz, çünkü her harmonik aynı zaman genişliğine sahip olacaktır. Notun Oktavı belirlendikten sonra, Temelin sıklığını biliyoruz.
Aşağıdaki şemada, bu not için ScalePitch belirlendikten sonra doğru Oktav-Aday notunu (yani doğru Temel) seçmek için geliştirdiğim Oktav Algılama algoritması gösterilmektedir. C ++ 'da bu yöntemi görmek isteyenler, GitHub'daki kaynak kodumda bulunan FundCandidCalcer.cpp adlı dosyanın içindeki Calc_Best_Octave_Candidate () işlevine gitmelidir.