2009-01-12 14 views
18

Jest to festiwal technologiczny w IIT-Bombay w Indiach, gdzie organizowane jest wydarzenie o nazwie "Artbots", w którym mamy projektować artboty o artystycznych zdolnościach. Miałem pojęcie o muzycznym robocie, który bierze piosenkę jako wejście, wykrywa notatki w utworze i odtwarza je na pianinie. Potrzebuję jakiejś metody, która pomoże mi obliczyć wysokość nut piosenki. Każdy pomysł/sugestia, jak to zrobić?Wykrywanie podstawowej częstotliwości

Odpowiedz

1

Czy próbowałeś Wikipedia's article on pitch detection? Zawiera kilka referencji, które mogą być interesujące dla Ciebie.

Ponadto, jest tutaj list of DSP applications and libraries, gdzie można poke obejść. Na liście wymieniono jedynie pakiety oprogramowania dla systemu Linux, ale wiele z nich jest wieloplatformowych i można znaleźć wiele kodu źródłowego.

Tylko FYI, wykrywanie wysokości nut w monofonicznym nagraniu jest w zasięgu większości osób znających DSP. Wykrywanie wysokości wszystkich dźwięków, w tym akordów i innych rzeczy, jest o wiele trudniejsze.

0

Zasadniczo potrzebujesz analizatora widma. Możesz być w stanie wykonać FFT na zapisie wejścia analogowego, ale wiele zależy od rozdzielczości nagrania.

0

co od razu przychodzi mi na myśl:

  • odfiltrować bardzo niskich częstotliwościach (perkusja, bas-linia),
  • filtr na wysokie częstotliwości (harmoniczne)
  • FFT,
  • wygląd szczyty w wyjściu FFT dla melodii

Nie jestem pewien, czy to działa dla bardzo polifonicznych dźwięków - może google dla "FFT, analysi s, melodia itp. " zwróci więcej informacji o możliwych problemach.

pozdrowienia

13

To jest dokładnie to, co robię tutaj jako mojego ostatniego projektu lat :) z wyjątkiem jednej rzeczy, że mój projekt jest o śledzenie tonu głosu ludzkiego śpiewu (i nie mam robota do zagraj melodię)

Najszybszym sposobem, jaki mogę wymyślić, jest użycie BASS library. Zawiera gotową do użycia funkcję, która może dostarczyć dane FFT z domyślnego urządzenia nagrywającego. Spójrz na przykład kodu "livespec", który pochodzi z BASS.

Nawiasem mówiąc, surowe dane FFT nie wystarczą do określenia częstotliwości podstawowej. Aby uzyskać F0, potrzebujesz algorytmu, takiego jak Harmonic Product Spectrum.

Kolejnym czynnikiem jest źródło dźwięku. Jeśli zamierzasz zrobić FFT i zastosować na nim Harmonic Product Spectrum. Musisz upewnić się, że wejście ma tylko jedno źródło dźwięku. Jeśli zawiera wiele źródeł, takich jak w nowoczesnych utworach, będzie wiele częstotliwości do rozważenia.

harmoniczne Widmo produktu Teoria

Jeżeli sygnał wejściowy jest uwaga porównanie, następnie jego spektrum powinna składać się z szeregu piki, odpowiadające częstotliwości podstawowej z harmonicznymi składników w całkowitej wielokrotności podstawowej częstotliwości . Stąd, gdy kompresujemy widmo w liczbie razy (próbkowanie w dół) i porównujemy je z pierwotnym widmem, widzimy , że najsilniejsza linia szczytów harmonicznych jest większa. . Pierwszy pik w oryginalnym widmie pokrywa się z drugim pikiem w spektrum ściśniętym przez współczynnik 2: , który pokrywa się z trzecim szczytem w widmie , skompresowanym przez współczynnik trzykrotności. W związku z tym, gdy różne spektrum są pomnożone razem, , wynik będzie utworzyć wyraźny szczyt na podstawowej częstotliwości .

Metoda

Najpierw dzielimy sygnał wejściowy na segmentach poprzez zastosowanie okna Hanninga, gdzie rozmiar okna i rozmiar hop są podane jako wejście. Dla każdego okna, , wykorzystujemy transformatę Fourier Short-Time do konwersji sygnału wejściowego z dziedziny czasu na domenę o częstotliwości . Po wprowadzeniu danych w domenie częstotliwości stosujemy technikę spektrum harmonicznych produktu do każdego okna.

HPS obejmuje dwa etapy: próbkowanie i mnożenie w dół: . Do w dół, spakowaliśmy spektrum dwa razy w każdym oknie, próbując ponownie: po raz pierwszy kompresujemy pierwotne spektrum przez dwa i po raz drugi, o trzy. Po wykonaniu tej czynności pomnóżmy trzy spektrum i znajdź częstotliwość , która odpowiada wartości szczytowej (wartość maksymalna). Ta konkretna częstotliwość reprezentuje podstawową częstotliwość tego konkretnego okna.

Ograniczenia metody HPS

kilka ciekawych funkcji tej metody obejmują: Jest obliczeniowo tani, dość odporna na dodatku i multiplikatywnego hałasu i regulowane do różnego rodzaju wejść. Na przykład możemy zmienić liczbę spakowanych widm na na , a my możemy zastąpić mnożenie spektralne dodatkiem spektralnym . Jednakże, ponieważ ludzki skok percepcja jest w zasadzie logarytmiczny, oznacza to, że niskie skoky mogą być śledzone mniej dokładnie niż wysokie nachylenia .

Innym ciężkie niedobór sposobu HPS jest to jego rozdzielczość wynosi tak dobra, jak długość FFT do obliczenia widma. Jeśli wykonamy krótki i szybki FFT, jesteśmy ograniczona liczba dyskretnych częstotliwości możemy rozważyć. Aby uzyskać , aby uzyskać wyższą rozdzielczość na naszym wyjściu (a przez to zobaczyć mniejszą ziarnistość ), musimy wykonać dłuższą próbę FFT, która wymaga więcej czasu.

od: http://cnx.org/content/m11714/latest/

+3

W jaki sposób radzi sobie z nieharmonijnością prawdziwych instrumentów? Harmoniczne są coraz bardziej ostre od idealnych wielokrotności, im wyżej idziesz. – endolith

4

Wystarczy Komentarz: harmonicznej podstawowej może brakować od A (harmonicznych) dźwięk jak dobrze, to nie zmienia postrzeganą boiska. Jako przypadek graniczny, jeśli weźmiesz falę prostokątną (powiedzmy, nutę C#) i całkowicie stłumisz pierwszą harmoniczną, postrzegana nuta jest nadal C#, w tej samej oktawie. W pewnym sensie nasz mózg jest w stanie zrekompensować brak niektórych harmonicznych, nawet tych pierwszych, kiedy odgaduje nutę. Dlatego, aby wykryć tonację z technikami w dziedzinie częstotliwości, należy wziąć pod uwagę harmoniczne (lokalne maksima w wielkości transformaty Fouriera) i wyodrębnić pewien rodzaj "największego wspólnego dzielnika" ich częstotliwości. Wykrywanie wykopu nie jest wcale łatwym problemem ...

DAFX ma około 30 stron poświęconych wykrywaniu wysokości tonu, z przykładami i kodem Matlaba.

1

Po prostu myśl - ale czy musisz przetwarzać cyfrowy strumień audio jako wejście?

Jeśli nie, rozważ użycie symbolicznej reprezentacji muzyki (np. MIDI). Dźwięki nut zostaną wtedy wyraźnie określone i można bardzo łatwo syntetyzować dźwięki (i ruchy) odpowiadające tonowi, rytmowi i wielu innym parametrom muzycznym.

Jeśli chcesz przeanalizować cyfrowy strumień audio (mp3, wav, wejście na żywo itp.), Pamiętaj, że chociaż wykrywanie wysokości prostych monofonicznych dźwięków jest dość zaawansowane, wykrywanie polifonicznego tonu jest nierozwiązanym problemem. W takim przypadku pomocna może okazać się moja odpowiedź na this question.

1

do ekstrakcji częstotliwości podstawowej melodii z muzyki wielogłosowej można spróbować Melodia plug-in: http://mtg.upf.edu/technologies/melodia

Wyodrębnianie F0 dotyczącą wszystkich instrumentów w piosence (multi-F0 śledzenie) lub przepisywanie ich na notatki jest jeszcze trudniejszym zadaniem. Zarówno wydobywanie melodii, jak i transkrypcja muzyki są nadal otwartymi problemami badawczymi, więc niezależnie od zastosowanego algorytmu/narzędzia nie oczekujemy uzyskania doskonałych wyników.

1

Jeśli próbujesz wykryć notatki z nagrania polifonicznego (wiele notatek jednocześnie), powodzenia. To bardzo trudny problem. Nie znam żadnego sposobu słuchania, powiedzmy, nagrania kwartetu smyczkowego i algorytmu oddzielającego cztery głosy. (Może Wavelets?) Jeśli jest to tylko jedna nuta na raz, istnieje kilka algorytmów śledzenia tonu, wiele z nich jest wspomnianych w innych komentarzach.

Algorytm, którego chcesz użyć, zależy od rodzaju muzyki, której słuchasz. Jeśli chcesz, aby odbierał ludzi śpiewających, istnieje wiele dobrych algorytmów zaprojektowanych specjalnie dla głosu. (Tutaj jest większość badań.) Jeśli próbujesz wybrać konkretne instrumenty, musisz być nieco bardziej kreatywny. Algorytmy głosowe mogą być proste, ponieważ zasięg ludzkiego głosu jest zwykle ograniczony do około 100-2000 Hz. (Zakres mówienia jest o wiele bardziej wąski). Jednak podstawowe częstotliwości fortepianu wynoszą od około 27 Hz. do 4200 Hz., więc masz do czynienia z szerszym zakresem zwykle ignorowanym przez algorytmy wykrywania wysokości głosu.

Przebieg większości instrumentów będzie dość złożony, z dużą ilością harmonicznych, więc proste podejście, takie jak zera zerujące lub samo wzięcie autokorelacji, nie będzie działać. Gdybyście wiedzieli z grubsza, w jakim zakresie częstotliwości szukaliście, możecie filtr dolnoprzepustowy, a następnie zliczać zero. Sądzę, że lepiej byłoby, gdybyś miał bardziej złożony algorytm, taki jak Harmonic Product Spectrum, wymieniony przez innego użytkownika, lub YAAPT ("Jeszcze inny algorytm śledzenia ścieżki") lub coś podobnego.

Ostatni problem: niektóre instrumenty, szczególnie fortepian, będą miały problem z brakującymi podstawami i nieharmonijnością. Brakujące podstawy mogą być rozwiązane przez algorytmy śledzenia wysokości dźwięku ... w rzeczywistości muszą być, ponieważ podstawy są często wycinane w transmisji elektronicznej ... chociaż prawdopodobnie nadal będziesz otrzymywać oktawy. Jednak nieharmonijność sprawi ci problemy, jeśli ktoś zagra nutę w dolnej oktawie fortepianu. Normalne algorytmy śledzenia wysokości nie są zaprojektowane do radzenia sobie z dysharmonią, ponieważ ludzki głos nie jest znacząco nieharmoniczny.

Powiązane problemy