Spędziłem wiele lat badając wykrywanie wysokości dźwięku w muzyce polifonicznej - jak wykrywanie nut gitarowego solo w nagraniu mp3. Napisałem również sekcję na Wikipedii, która zawiera krótki opis tego procesu (spójrz na podsekcję „Wykrywanie podziałki” w linku poniżej).
Po naciśnięciu jednego klawisza na pianinie słyszymy nie tylko jedną częstotliwość wibracji dźwięku, ale kompozyt z wielu wibracji dźwiękowych występujących na różnych częstotliwościach związanych matematycznie. Elementy tego kompozytu wibracji o różnych częstotliwościach nazywane są harmonicznymi lub częściowymi. Na przykład, jeśli naciśniemy środkowy klawisz C na pianinie, poszczególne częstotliwości harmonicznych kompozytu zaczną się od 261,6 Hz jako częstotliwości podstawowej, 523 Hz to druga harmoniczna, 785 Hz to trzecia harmoniczna, 1046 Hz być czwartą harmoniczną itp. Późniejsze harmoniczne są całkowitymi wielokrotnościami częstotliwości podstawowej 261,6 Hz (np. 2 x 261,6 = 523, 3 x 261,6 = 785, 4 x 261,6 = 1046).
Używam zmodyfikowanej transformacji logarytmicznej DFT, aby najpierw wykryć możliwe harmoniczne, szukając częstotliwości o poziomach szczytowych (patrz schemat poniżej). Ze względu na sposób, w jaki zbieram dane dla mojego zmodyfikowanego dziennika DFT, NIE muszę stosować funkcji okienkowania do sygnału ani dodawać i nakładać się . Stworzyłem DFT, więc jego kanały częstotliwości są logarytmicznie rozmieszczone w celu bezpośredniego wyrównania z częstotliwościami, w których harmoniczne są tworzone przez nuty na gitarze, saksofonie itp.
Teraz, kiedy jestem na emeryturze, zdecydowałem się wydać kod źródłowy mojego silnika wykrywania wysokości dźwięku w bezpłatnej aplikacji demonstracyjnej o nazwie PitchScope Player . Program PitchScope Player jest dostępny w Internecie i można pobrać plik wykonywalny dla systemu Windows, aby zobaczyć, jak działa mój algorytm na wybranym pliku mp3. Poniższy link do GitHub.com doprowadzi cię do mojego pełnego kodu źródłowego, w którym możesz zobaczyć, jak wykrywam harmoniczne za pomocą niestandardowej transformacji logarytmicznej DFT, a następnie szukać cząsteczek (harmonicznych), których częstotliwości spełniają prawidłową relację całkowitą, która definiuje „ smoła'.
Mój algorytm wykrywania skoku jest w rzeczywistości procesem dwuetapowym: a) Najpierw wykrywany jest ScalePitch („ScalePitch” ma 12 możliwych wartości wysokości: {E, F, F #, G, G #, A, A #, B, C, C #, D , D #}) b) i po określeniu ScalePitch, wówczas oktawę oblicza się, badając wszystkie harmoniczne dla 4 możliwych nut oktawy-kandydata. Algorytm ma na celu wykrycie najbardziej dominującej wysokości (nuty) w dowolnym momencie w polifonicznym pliku MP3. Zwykle odpowiada to nutom solo instrumentalnego. Osoby zainteresowane kodem źródłowym C ++ dla mojego algorytmu 2-etapowego wykrywania wysokości mogą chcieć rozpocząć od funkcji Estimate_ScalePitch () w pliku SPitchCalc.cpp na GitHub.com.
https://github.com/CreativeDetectors/PitchScope_Player
https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection
Poniżej znajduje się obraz Logarytmicznego DFT (utworzonego przez moje oprogramowanie C ++) na 3 sekundy solo na gitarze na polifonicznym nagraniu mp3. Pokazuje, jak harmoniczne wyglądają dla poszczególnych nut na gitarze podczas gry solo. Dla każdej nuty na tym logarytmicznym DFT możemy zobaczyć, jak wiele harmonicznych rozciąga się pionowo, ponieważ każda harmoniczna będzie miała tę samą szerokość czasową. Po określeniu oktawy nuty znamy częstotliwość Fundamentu.
Poniższy schemat pokazuje algorytm wykrywania oktawy, który opracowałem, aby wybrać prawidłową notatkę oktawę-kandydata (to znaczy prawidłową podstawę), po ustaleniu Skalowania dla tej nuty. Ci, którzy chcą zobaczyć tę metodę w C ++, powinni przejść do funkcji Calc_Best_Octave_Candidate () w pliku o nazwie FundCandidCalcer.cpp, który jest zawarty w moim kodzie źródłowym na GitHub.