Zwei Audiodateien vergleichen [duplizieren]

8

Grundsätzlich habe ich viele Audiodateien, die den gleichen Song repräsentieren. Einige von ihnen sind jedoch von schlechterer Qualität als das Original, und einige werden so bearbeitet, dass sie nicht mehr mit dem Originalsong übereinstimmen. Ich möchte diese Audiodateien programmatisch mit dem Original vergleichen und sehen, welche mit dem Lied übereinstimmen, unabhängig von der Qualität. Ein direkter Vergleich würde offensichtlich nicht funktionieren, da die Qualität der Dateien variiert.

Ich glaube, das könnte man tun, indem man die Struktur der Songs analysiert und mit dem Original vergleicht, aber ich weiß nichts über Tontechnik, das hilft mir nicht viel. Alle Songs haben das gleiche Format (MP3). Außerdem verwende ich Python, wenn also Bindungen dafür wären, wäre das fantastisch. Wenn nicht, wäre auch etwas für die JVM oder sogar eine native Bibliothek in Ordnung, solange es unter Linux läuft und ich herausfinden kann, wie ich es benutze.

    
Sasha Chedygov 03.07.2010, 21:18
quelle

3 Antworten

4

Kopieren von das antwortet:

Genau die gleiche Frage, an der die Leute beim alten AudioScrobbler und derzeit bei MusicBrainz schon lange gearbeitet haben. Zur Zeit ist das Python-Projekt, das bei deiner Suche helfen kann, Picard , das Audiodateien markieren wird (nicht nur MPEG1 Layer 3-Dateien) mit einer GUID (eigentlich mehrere), und von da an ist die Anpassung der Tags sehr einfach.

Wenn Sie dies lieber als eigenes Projekt tun möchten, kann libofa hilfreich sein. Die Dokumentation für den Python-Wrapper wird Ihnen vielleicht am meisten helfen.

    
tzot 04.07.2010, 23:26
quelle
16

Das ist eigentlich keine triviale Aufgabe. Ich denke nicht, dass es eine Standardbibliothek gibt. Hier ist ein möglicher Ansatz:

  1. MP3 in PCM decodieren.
  2. Stellen Sie sicher, dass die PCM-Daten eine bestimmte Abtastrate haben, die Sie vorher wählen (z. B. 16KHz). Sie müssen Songs mit unterschiedlicher Sample-Rate neu abtasten. Eine hohe Abtastrate ist nicht erforderlich, da Sie ohnehin einen unscharfen Vergleich benötigen, aber eine zu niedrige Abtastrate verliert zu viele Details.
  3. Normalisieren Sie die PCM-Daten (dh finden Sie den maximalen Sample-Wert und skalieren Sie alle Samples so, dass Sample mit der größten Amplitude den gesamten Dynamikbereich des Datenformats verwendet, zB wenn das Sampleformat mit 16 Bit vorzeichenbehaftet ist oder -32767).
  4. Teilen Sie Audiodaten in Frames mit einer festen Anzahl von Samples (z. B. 1000 Samples pro Frame).
  5. Konvertiere jedes Bild in die Spektrum-Domäne ( FFT ).
  6. Berechnen Sie die Korrelation zwischen Sequenzen von Frames, die zwei Songs repräsentieren. Wenn die Korrelation größer als ein bestimmter Schwellenwert ist, nehmen Sie an, dass die Songs identisch sind.

Python-Bibliotheken:

Eine zusätzliche Komplikation. Deine Lieder können am Anfang eine andere Länge der Stille haben. Um falsche Negative zu vermeiden, benötigen Sie möglicherweise einen zusätzlichen Schritt:

3.1. Scannen Sie PCM-Daten von Anfang an, bis die Schallenergie den vordefinierten Schwellenwert überschreitet. (Zum Beispiel berechnen Sie RMS mit einem gleitenden Fenster von 10 Proben und stoppen, wenn es 1% des dynamischen Bereichs übersteigt). Dann verwerfen Sie alle Daten bis zu diesem Punkt.

    
atzz 03.07.2010 22:42
quelle
6

Zunächst müssen Sie Ihre Vergleichsdomäne ändern. Wenn Sie Rohdaten aus den unkomprimierten Dateien analysieren, werden Sie nirgendwohin gelangen. Ihr Distanzmaß basiert auf einem oder mehreren Merkmalen, die Sie aus den Audio-Samples extrahieren. Wikipedia listet die folgenden Funktionen auf, die häufig für Akustische Fingerabdrücke verwendet werden:

  

Wahrnehmungsmerkmale, die oft von Audio-Fingerabdrücken ausgenutzt werden, sind die durchschnittliche Nulldurchgangsrate, das geschätzte Tempo, das durchschnittliche Spektrum, die spektrale Flachheit, hervorstechende Töne über eine Reihe von Bändern und die Bandbreite.

Ich habe keine programmatischen Lösungen für Sie, aber hier ist ein interessanter Versuch beim Reverse Engineering der YouTube Audio ID System. Es wird für die Erkennung von Urheberrechtsverletzungen verwendet, ein ähnliches Problem.

    
BenG 03.07.2010 21:44
quelle

Tags und Links