Ich habe einige Wochen lang experimentiert, um einen Weg zu finden, ähnliche Songs in einer Bibliothek mit verschiedenen Musikrichtungen zu finden.
Mein erster Versuch war, Features wie Tempo oder wie viel Bass in Songs vorhanden sind, um Gruppen zu bilden, aber ich bin mit diesem Ansatz (Volume Changes Based Beat Detection) nicht weit gekommen, da ungefähr 20% der Songs Beat nicht gezählt werden müssen immer, manchmal 1/2 oder 1/3 von ihnen und ich konnte das nicht umsetzen.
Nach einigen Wochen fehlgeschlagenen Versuchs kam mir eine neue Idee, die später in diesem Beitrag beschrieben wird. Einfach ausgedrückt funktioniert es, indem Sie Spectrum Samples of Files nehmen und so etwas wie ein "Average Spectrum" von Files erstellen, um sie zu vergleichen. Die Idee dahinter war, dass Hardstyle zum Beispiel viel mehr Bass als durchschnittliche Rockmusik hat.
- Datei 1: Alle FFT-Spektren der Datei aufnehmen (2048 Sample Size atm, Amplituden-Log. Skaliert)
- Summiere alle Spektrum-Arrays und nimm Durchschnittswerte von jedem Bin
- Machen Sie dasselbe mit einigen anderen Dateien und speichern Sie alle Ergebnisse
- Liste der FFT-Wertunterschiede zwischen Datei 1 und anderen Dateien erstellen
- Ermitteln Sie den Durchschnitt der Unterschiede zwischen Datei 1 und Datei X.
- Nach diesen Durchschnittswerten aufsteigend sortieren
- Songs mit dem niedrigsten "Differenzwert" gelten als ähnlich.
Können mir einige von Ihnen, die über gute Kenntnisse verfügen, sagen, ob dies der richtige / gute Weg wäre, meine Idee umzusetzen?
Antworten:
Was Sie versuchen, wurde immer wieder von Hunderten von Forschern ausprobiert, und es gibt eine ziemlich große Menge an Arbeiten dazu. Überprüfen Sie die Protokolle der ISMIR-Konferenz. Auch wenn es nicht auf dem neuesten Stand ist, lesen Sie die These von Elias Pampalk: http://www.ofai.at/~elias.pampalk/publications/pampalk06thesis.pdf
Um Sie schnell auf dem richtigen Weg zu orientieren:
Musik kann in vielen Dimensionen ähnlich sein: a) Timbre / Textur / Genre; b) rhythmisches Muster; c) Melodie / Akkordfolge ... und mehr! Aus Ihrer Nachricht geht nicht hervor, was Sie messen möchten!
Das ist für die Funktionen. Jetzt müssen Sie sich einen besseren Weg ausdenken, um Ihre Songs zu vergleichen, sobald sie als Folge dieser Funktionen dargestellt wurden. Das Berechnen paarweiser Unterschiede zwischen Sequenzen ist nicht sehr intelligent - z. B. ergibt der Vergleich eines Songs mit demselben Song, der durch eine gewisse Stille versetzt ist, einen Unterschied, obwohl er genau gleich ist! Sie möchten lieber die Verteilung dieser Funktionen vergleichen. Berechnen Sie zum Beispiel den Mittelwert / die Standardabweichung der Merkmale über Lied A und den Mittelwert / die Standardabweichung der Merkmale über Lied B und nehmen Sie dann einen probabilistischen Abstand (KL, Bhattacharyya über diesen).
Letzter Punkt, der jedoch später von Bedeutung sein wird: Die Berechnung der Entfernung zwischen einem Lied und dem Rest des Korpus, um die nächsten Übereinstimmungen zu finden, ist recht ineffizient. Beim Umgang mit großen Sammlungen ermöglichen Techniken wie LSH oder Ball Trees, dass solche Abfragen des nächsten Nachbarn ohne expliziten Vergleich mit dem gesamten Korpus durchgeführt werden können.
Abgesehen davon ist die Tempoerkennung eine ganz andere Sache. Wenn Sie sich das ansehen möchten, ist Ellis 'Beat Tracking by Dynamic Programming das beste Papier zu Leistung und Barrierefreiheit. http://www.ee.columbia.edu/~dpwe/pubs/Ellis07-beattrack.pdf . Es ist unglaublich einfach, kommt aber den neuesten Algorithmen sehr nahe.
quelle