2009-05-15 18 views
6

Czy jest możliwe, aby przy pomocy FFT wykryć wystąpienie małej próbki wav w dłuższym wav, jeśli wiadomo, że ta dokładna próbka istnieje gdzieś w wav (ale może być mieszana z innymi dźwiękami)?Znajdź wystąpienie próbki WAV w innym WAV?

edit

(po otrzymaniu dwóch wskazań): Co zrobić, jeśli mam bibliotekę wszystkich znanych dźwięków, które mogą być w większym formacie WAV i chcą znaleźć wystąpienia każdego z nich w tym WAV? Innymi słowy, wiem, jaki jest możliwy dźwięk, który może być zmieszany z dużym wav, i chciałbym znaleźć ich wystąpienia?

+0

(po otrzymaniu dwóch wskazań): Co zrobić, jeśli mam bibliotekę wszystkich znanych dźwięków, które mogą być w większym formacie WAV i chcą znaleźć wystąpienia każdego z nich w tym WAV? Innymi słowy, wiem * każdy * możliwy dźwięk, który można mieszać z wielkim wav, i chciałbym znaleźć ich wystąpienia? –

+0

@ZomCoder: Aplikacje WAV-to-MIDI są okropne, ponieważ jest to niezwykle trudna dziedzina problemu, nie dlatego, że programiści pracujący nad nią nie są dobrymi programistami. Nawet jeśli byłbyś najlepszym programistą na świecie (i nie mówię, że nie jesteś), zajęłoby ci dużo czasu i dużo wysiłku, aby uzyskać lepsze rezultaty niż to, co tam jest. – MusiGenesis

+0

Jeśli masz bibliotekę z każdym możliwym dźwiękiem i nie są one przesunięte w stosunku do widma, myślę, że korelacja krzyżowa byłaby najlepsza. – endolith

Odpowiedz

3

Zakładam, że nie oznacza to dokładnej wartości próbki. Gdyby była to dokładna wartość próbki, byłoby to proste poszukiwanie wartości przykładowych, która jest szybka i wydajna.

Jeśli szukasz fragmentów dźwięku, które przyczyniają się, najlepszym rozwiązaniem jest użycie procesu matematycznego zwanego "splotem". Zasadniczo, weź próbkę, którą próbujesz znaleźć w dużej próbce, skutecznie umieść ją obok dużej próbki i skoreluj. Zrób to dla każdej pozycji próbki. Z tego otrzymasz krzywą, która będzie miała wyraźne skoki w miejscu, w którym znajduje się próbka. Jest to dość intensywne obliczeniowo, ale komputery zdobyły dość szybko, więc jest to wykonalne.

Ale to przy założeniu, że próbka pochodzi z tego samego zapisu dla obu przypadków. Modyfikowanie dźwięku perkusji, nawet tego samego brzmienia bębna, z dwóch różnych lokalizacji, nie zapewni bardzo dobrej korelacji.

Nadzieję, że pomaga.

+0

To bardzo pomaga. Moim celem jest transkrybowanie starych nagrań WAV pianina cyfrowego, który zrobiłem w MIDI. Ten cyfrowy fortepian ma skończony zestaw próbek, które odtwarza. Gdybym mógł złapać każdą możliwą próbkę, którą mógłby zagrać i używać splotu ze starymi nagraniami, to brzmi jakbym mógł to zrobić. Moją przeszkodą jest to, że nagrałem w różnych tomach. Zastanawiam się, jak bardzo to wpłynęłoby na mnie? Właściwie to nie obchodzi mnie, czy jest to absolutnie doskonałe, o ile jest lepsze niż większość aplikacji "dźwiękowych do midi", które są STRASZNE. Dzięki. –

+0

Słabsza głośność spowoduje słabszą korelację. Wyostrzony dźwięk podobny do fortepianu będzie jednak generował wiele skoków, ponieważ nuta koreluje się z nią, a także offset o jedną długość fali. Więc będziesz musiał używać tylko piku, który jest lokalnym maksimum wśród innych szczytów. Będziesz musiał korelować z każdą nutą, którą mógłbyś zagrać, więc może być nieco powolna. –

+0

Do tego zadania użyłbyś korelacji krzyżowej, a nie splotu. Bardzo podobne, ale trochę inne. – tom10

0

Nie dokładnie tak, jak to zdefiniowałeś, jeśli jest on mieszany z innymi dźwiękami, a oto powód; rozważyć efekt fali wymieszanej dokładnie z jej odwrotnością; wynikiem jest płaska reakcja. Mieszanie fal może mieć funkcję monotoniczną, to jest skutecznie zamaskować jedną falę drugą w taki sposób, że pierwszy jest nie do odzyskania.

To powiedziawszy, istnieje prawdopodobnie sposób scharakteryzowania "sygnatury" fali tak, że prawdopodobnie będzie obecny w powstałym pliku fali złożonej, ale ten podpis będzie zależał od długości pliku falowego i w pewnym stopniu, jakiego rodzaju kombinacje miały być wykonane na nim.

Twoje pytanie prawdopodobnie ma coś wspólnego z ustaleniem, czy próbki jednej pracy istnieją w innym, złożonym, pracy. Ogólnie rzecz biorąc, tak, FFT są użyteczne do określenia "sygnatury" dla danej fali i są w stanie wydobyć ten "podpis" z innej fali; są dobre dla niektórych rzeczy (takich jak przesunięcie częstotliwości, to po prostu pokazuje się jako przesunięcie w FFT), ale nie tak wielkie dla innych rzeczy (zmienna modulacja częstotliwości, dla jednej, wysoka (lub nierówna) kompresja pasma oryginału sygnał). Innymi słowy: FFT są dobrym sposobem na wykrycie "naiwnego" użycia próbek, ale określony resampler może modyfikować oryginalną próbkę, aby utrudnić jej wykrycie za pomocą FFT, jeśli wie, że jest to technika wykrywania.

0

Jeśli znasz dokładną naturę próbki (długość w bitach itp.), Jest to bardzo możliwe. Jeśli zmieni się w jakikolwiek sposób, będziesz musiał najpierw dużo pracy.

Ze względu na sposób kodowania plików WAV (sekwencyjnie według ścieżek) - otrzymujesz pierwszą część bitów dla pierwszego utworu, następnie pierwszą partię bitów dla drugiej ścieżki, a następnie drugą część bitów z pierwszego ścieżka)

To może oczywiście powtórzyć tyle ścieżek. Jeśli wiesz, że szukany plik WAV jest zakodowany specjalnie na jednej z tych ścieżek, możesz wyizolować każdą ścieżkę i wykonywać na niej operacje.

Oczywiście, jeśli twoja próbka różni się szybkością, tempem, skokiem itp., To będzie miała inną sygnaturę bitową, więc będziesz musiał znormalizować ścieżki.

4

To zależy od tego, co dokładnie próbujesz znaleźć i co starasz się go znaleźć w.

  • Jeśli szukasz próbki, która jest dokładnie taka sama jak kawałek większy Plik WAV, bit-for-bit, możesz wyszukać wartości bezpośrednio.
  • Jeśli jest to dokładnie ten sam dźwięk, ale nie próbki z dokładnością (dopasowanie klip MP3 do WAV tego samego utworu, na przykład), można łatwo znaleźć go za pomocą cross-correlation. Korelację krzyżową można znacznie przyspieszyć, stosując metodę FFT zamiast "naiwnej", która wyraźnie mnoży i sumuje próbki.
  • Jeśli szukasz krótkiej próbki, która została zmiksowana z innymi dźwiękami, nadal możliwe jest zastosowanie korelacji krzyżowej, ale zależy to od tego, czy inne dźwięki mają wpływ na dopasowanie. W przypadku pianina cyfrowego z prostymi samplami i bez efektów, bezpośrednio do cyfrowego rejestratora, może to zadziałać.
  • Jeśli dźwięk przeszedł przez filtrowanie dowolnego typu, odwrócenie polaryzacji lub przesunięcie fazowe, nie będzie to jednak działać dobrze, ponieważ kształty fal zostaną zmienione. Więc jeśli fortepian był grany przez głośniki, a następnie nagrywany z mikrofonami, nie jest to opłacalne rozwiązanie.

Co może działać lepiej w tym przypadku jest stworzenie spectrogram nagrania przy użyciu short-time Fourier transform (STFT) i spektrogram rzeczą, której szukasz, a następnie zrobić przekrój korelację czasową mądry z dwóch obrazów. Spektrogram jest obrazem 2D amplitudy spektrum dźwięków w czasie, który można następnie dopasować. (Jest to prawdopodobnie okrężny sposób robienia czegoś, do czego są bardziej wyspecjalizowane algorytmy, ale nie wiem, jak by to nazwać.);)

Czy możesz gdzieś przesłać pliki dźwiękowe?