2011-11-27 15 views
6

Tworzę program wykrywania wysokości dźwięku, który pobiera częstotliwość podstawową z widma mocy uzyskanego z FFT ramki. Oto, co mam do tej pory:FFT Pitch Detection - Wyodrębnianie melodii

  • Podziel sygnał wejściowy audio na ramki.
  • wielokrotnie ramki z oknem Hamminga
  • obliczania FFT i wielkość sqrt ramki (real^2 + img^2)
  • znaleźć częstotliwości podstawowej (peak) przez spektrum produktów harmoniczną
  • konwersji częstotliwości wartości szczytowej (częstotliwość bin) (np. ~ 440 Hz to A4)

Teraz program generuje liczbę całkowitą o wartości od 0 do 87 dla każdej klatki. Każda liczba całkowita odpowiada nutie fortepianu według formuły I znalezionej here. Teraz próbuję naśladować melodie w sygnale wejściowym, syntetyzując dźwięki na podstawie obliczonych nut. Próbowałem po prostu wygenerować falę sinusoidalną o wielkości i częstotliwości odpowiadającej częstotliwości podstawowej, ale wynik nie brzmiał niczym oryginalny dźwięk (prawie brzmiał jak losowe dźwięki).

Ja naprawdę nie rozumiem muzyki opartej na tym, co mam, czy mogę wygenerować dźwięk z melodiami podobnymi do wejścia (instrument, głos, instrument + głos) w oparciu o informacje, które otrzymuję z częstotliwości podstawowej? Jeśli nie, jakie inne pomysły mogę wypróbować używając kodu, który mam obecnie.

Dzięki!

+0

Być może zainteresuje was fakt, że podstawowym procesem kodowania MP3 jest podstawowy proces polegający na "znalezieniu ważnej części dźwięku i zignorowaniu części, których nie można usłyszeć" (który modeluje się jako wykrywanie wartości szczytowej FFT +). Oczywiście jego idea "ważnej części" jest o wiele bardziej wyszukana. –

Odpowiedz

3

Twoja metoda może działać w przypadku muzyki syntetycznej za pomocą notatek zsynchronizowanych w celu dopasowania do czasu i długości ramki fft oraz używania tylko dźwięków nutowych, których pełne spektrum jest zgodne z estymatorem nachylenia HPS. Nic z tego nie jest prawdą dla zwykłej muzyki.

W bardziej ogólnym przypadku transkrypcja muzyki automatycznej nadal wydaje się być problemem badawczym, bez prostego rozwiązania 5 kroków. Pitch to zjawisko psychoakustyczne człowieka. Ludzie usłyszą dźwięki, które mogą, ale nie muszą występować w lokalnym spektrum. Algorytm szacowania wysokości dźwięku HPS jest dużo bardziej niezawodny niż przy użyciu najwyższego FFT, ale nadal może się nie udać dla wielu rodzajów dźwięków muzycznych. Również FFT każdej ramki, która przekracza granice obrysu lub transjenty, może nie zawierać wyraźnego pojedynczego skoku do oszacowania.

3

Prawdopodobnie nie chcesz wybierać pików z FFT, aby obliczyć wysokość tonu. Prawdopodobnie chcesz użyć autokorelacji. Napisałem długą odpowiedź na bardzo podobne pytanie tutaj: Cepstral Analysis for pitch detection

4

To zależy w dużej mierze od zawartości muzycznej, z którą chcesz pracować - wydobywanie wysokości monofonicznego nagrania (tj. Pojedynczy instrument lub głos) nie jest tym samym, co wyodrębnianie wysokości pojedynczego instrumentu z mieszaniny polifonicznej (np. wyodrębnienie wysokości melodii z zapisu polifonicznego).

Do ekstrakcji tonów monofonicznych można zastosować różne algorytmy, zarówno w dziedzinie czasu, jak iw dziedzinie częstotliwości. Kilka przykładów należą Yin (w dziedzinie czasu) i HPS (w dziedzinie częstotliwości), Link do dalszych szczegółów dotyczących zarówno podano w wikipedii:

Jednak nie będzie działać dobrze, jeśli chcesz wyodrębnić melodię z materiału polifonicznego.Ekstrakcja melodii z muzyki polifonicznej nadal stanowi problem badawczy i nie ma prostego zestawu kroków, które można wykonać. Istnieje kilka narzędzi tam świadczone przez środowisko badawcze, które można wypróbować (do użytku niekomercyjnego tylko choć), a mianowicie:

W końcowej nocie, gdy syntetyzowania twoje wyjście poleciłbym syntezę krzywej ciągłego tonu, którą wydobyłeś (najłatwiej to zrobić, aby oszacować wysokość dźwięku co X ms (np. 10) i zsyntetyzować falę sinusoidalną, która zmienia częstotliwość co 10 ms, zapewniając fazę ciągłą). To sprawi, że twój wynik będzie brzmieć bardziej naturalnie, a unikniesz dodatkowego błędu związanego z kwantowaniem ciągłej krzywej tonalnej w dyskretne nuty (co jest kolejnym problemem sam w sobie).

1

Twoje podejście nie będzie działać na każdym walnym przykład muzycznej, z następujących powodów:

  1. Muzyka ze swej natury ma charakter dynamiczny. Znaczy to, że każdy dźwięk obecny w muzyce jest modulowany przez różne okresy ciszy, ataku, podtrzymania, rozpadu, i znowu ciszy, znanej inaczej jako otoczka dźwięku.

  2. Notatki instrumentów muzycznych i ludzkie nuty wokalne nie mogą być prawidłowo zsyntetyzowane jednym tonu. Te nuty muszą być syntezowane przez podstawowy ton i wiele harmonicznych.

  3. Jednak nie wystarczy zsyntetyzować ton podstawowy i harmoniczne nut instrumentu muzycznego lub wokalu, należy również zsyntetyzować kopertę notatki, jak opisano w punkcie 1 powyżej.

  4. Ponadto do syntezy melodyjny fragment w muzyce, czy instrumentalny lub wokalny, trzeba syntezy elementów 1-3 powyżej, dla każdej nuty w przejściu, a trzeba też syntetyzować taktowanie każdej nuty w stosunku do początku przejścia.

  5. Analityczne wydobywanie poszczególnych instrumentów lub ludzkich głosów z końcowego nagrania miksu jest bardzo trudnym problemem, a twoje podejście nie rozwiązuje tego problemu, więc twoje podejście nie może właściwie rozwiązać problemów 1-4.

Krótko mówiąc, każde podejście, które usiłuje wydobyć niemal doskonałą transkrypcję muzyczną z końcowej mieszanki z nagrania muzycznego, stosując rygorystyczne metody analityczne, jest w najgorszym wypadku niemal na pewno skazane na niepowodzenie, a w najlepszym wypadku przypada sfera zaawansowanych badań.

Sposób postępowania z tym impasem zależy od tego, jaki jest cel pracy, o czym OP nie wspomniał.

Czy ta praca będzie wykorzystywana w komercyjnym produkcie, czy jest to projekt hobby?

Jeśli jest to praca komercyjna, uzasadnione są różne inne podejścia (kosztowne lub bardzo kosztowne), ale szczegóły tych podejść zależą od celów pracy.

Jako notatkę zamknięcia, Twój synteza brzmi jak przypadkowych dźwięków ze względu na następujące:

  1. Twój podstawowym detektor tonu jest związany z terminem swoich klatek toczenia FFT, co w efekcie generuje prawdopodobnie fałszywy podstawowym ton w czasie początkowym każdej toczącej się ramki FFT.

  2. Dlaczego wykryte dźwięki podstawowe prawdopodobnie są fałszywe? Ponieważ w sposób arbitralny przycinasz próbkę muzyczną do ramek (FFT), a zatem prawdopodobnie obcinamy wiele równoczesnie brzmiących nut w połowie nut, zniekształcając w ten sposób spektralne znaki nuty.

  3. Nie próbujesz zsyntetyzować kopert wykrytych notatek, ani nie możesz, ponieważ nie ma możliwości uzyskania informacji o kopercie na podstawie analizy.

  4. W związku z tym wynikiem syntezatora jest prawdopodobnie seria czystych sinusów sinusoidalnych, rozłożonych w czasie przez deltę t toczącej się ramki FFT. Każde ćwierkanie może mieć inną częstotliwość, inną wielkość koperty i koperty, które mają prawdopodobnie prostokątny kształt.

Aby zobaczyć złożoną naturę nut, spójrz na tych odnośnikach:

Musical instrument spectra to 102.4 KHz

Musical instrument note spectra and their time-domain envelopes

przestrzegać w szczególności wiele czystych tonów, które tworzą każdą nutę, i złożony kształt obwiedni w dziedzinie czasu każdej nuty. Zmienna synchronizacja wielu nut względem siebie jest dodatkowym istotnym aspektem muzyki, podobnie jak polifonia (wiele głosów jednocześnie) w typowej muzyce.

Wszystkie te elementy muzyki konspirują do ścisłego analitycznego podejścia do autonomicznej transkrypcji muzycznej, niezwykle trudnej.