2011-08-08 19 views
31

Chcę programowo porównać 2 pliki audio. Na przykład: Mam plik dźwiękowy w mojej aplikacji na iPhone'a, a następnie nagrywam kolejną. Chcę sprawdzić, czy istniejące brzmienie pasuje do nagranego dźwięku, czy nie (- podobnie jak w przypadku rozpoznawania głosu).Jak można programowo porównać 2 pliki audio?

Jak mogę to zrobić?

Odpowiedz

24

To się nazywa odcisków palców audio. Istnieją pewne projekty open source, z których można uzyskać pewne pomysły. Spójrz tutaj: Audio Fingerprint - MusicBrainz.

+0

dzięki za link miamk. Ale próbowałeś tego? nie jestem pewien, jak go zaimplementować. Jeszcze raz dziękuję – iscavengers

+14

Cóż, jeśli szukasz znaleźć gotowy, skopiować i wkleić kod lub bibliotekę celu do umieszczenia w projekcie iOS, możesz zatrzymać się teraz - jesteś nie znajdę czegoś takiego (przynajmniej w zakresie mojej wiedzy). Będziesz musiał sam to zakodować. – MiguelB

13

Niech serwer wykonuje obliczenia odcisków palców, które i tak nie są odpowiednie dla urządzeń mobilnych. Aplikacja mobilna przesyła pliki na serwer i pobiera wyniki analizy do wyświetlenia. Nie uważam więc, że język programowania, który je wdraża, ma duże znaczenie. Poniżej znajduje się kilka implementacji AF.

Java: http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/

VC++: http://code.google.com/p/musicip-libofa/

C#: http://www.codeproject.com/KB/WPF/duplicates.aspx

3

Brzmi jak Shazam może pomóc.

W internecie jest kilka artykułów na ten temat, w tym this, które czytałem jakiś czas temu.

Zastosowanie techniki Shazam do analizy zapewniłoby dobry punkt wyjścia do porównywania obok siebie.

+2

Eh? Co to za głosowanie na przejazd? – Hyperbole

2
  • Zastosować filtr pasmowo-przepustowy w celu zmniejszenia hałasu
  • normalizacji pod względem amplitudy
  • Oblicz korelacji krzyżowej

może być dość MHz intensywne.

szczegóły

DSP są w znanym tekście:

  • cyfrowego przetwarzania sygnału przez Alan V. Oppenheim Ronald W. Schafer
+0

To nie bierze pod uwagę różnic w akcentach i prędkości rozmowy –

1

myślę jak dobrze można spróbować wybrać kilka sekund próbki z obu ścieżek audio, zmormalizować je pod względem amplitudy i zmniejszyć szum z filtrem pasmowym i po próbie użycia korelatora.

na przykład możesz wziąć 5-sekundową próbkę jednej z dwóch próbek i przesunąć ją na drugą, obliczając krzyżową korelację dla dowolnego przesunięcia. (bądź ostrożny, że jeśli zażyjesz zbyt mały pachet, możesz mieć wysoką korelację, gdy się go nie spodziewasz, a zmniejszysz efekt uboczny z powodu przycięcia sygnału i korelacji krzyżowej). Po yo można zebrać tablicę z wynikami korelacji krzyżowej i uzyskać indeks maksymum.

Powinieneś wtedy ustawić eksperymentalnie w górę, aby zdecydować, kiedy przyjmiesz pachet do b tego samego. to się zmieni w zależności od jakości ścieżki audio, którą porównujesz.

Zaimplementowałem korektor do odbioru i rozróżniania preambuły w komunikacji bezprzewodowej. Mój skrypt jest rzeczywiście wykonywany w programie Matlab.jeśli jesteś zainteresowany mogę spróbować znaleźć część wspólną i wysłać ją do ciebie.

Byłby to zbyt długi kod do wklejenia na forum. jeśli chcesz, daj mi znać, a wyślę to do ciebie jak najszybciej.

okrzyki

4

Wiem, że pytanie zostało zadane już dawno temu, ale wyraźna odpowiedź może pomóc komuś innemu.

  1. W bibliotek z Echoprint (strona internetowa: echoprint.me/start) pomoże Ci rozwiązać następujące problemy:

    • De-powielić dużą kolekcję
    • zidentyfikowania (Track , Artist ...) utwór na dysku twardym lub serwerze
    • Uruchom serwer Echoprint z danymi
    • zidentyfikować utwór na urządzeniu z iOS

    PS: Aby uzyskać więcej funkcji muzycznych zorientowanych, można sprawdzić listę API here.

  2. Jeśli chcesz wdrożyć odcisk palca przez siebie, należy przeczytać dokumenty wymienione jako odniesienia here i prawdopodobnie spojrzeć na musicip-libofa na Google Code

nadzieję, że pomoc;)