[C++]Sound Files miteinander vergleichen?



  • Guten Morgen/Guten Abend,
    Ist es möglich zwei MP3/WAV Files miteinander zu vergleichen und zu überprüfen ob es das gleiche Lied ist?

    Beispielweise will ich das man das lied Tetris.mp3 und Tetristheme.mp3 miteinander vergleicht und überprüft ob es sich ähnlich anhört oder ob es vielleicht sogar das gleiche Lied ist.

    Hat jemand eine Idee hat wie ich das bewerkstelligen könnte? Oder wie ich zumindest die Frequenzen der Lieder analysieren kann?

    Danke im Voraus!
    Mit freundlichen Grüßen,
    vedel



  • vedel schrieb:

    Oder wie ich zumindest die Frequenzen der Lieder analysieren kann?

    Stichwort: FFT



  • Ist es möglich zwei MP3/WAV Files miteinander zu vergleichen und zu überprüfen ob es das gleiche Lied ist?

    Ja, man könnte SHA-1 oder MD5 Keys von jeder Datei generieren und diese dann vergleichen. Sind die Keys gleich so sind es auch die beiden Dateien.

    Diese lib sieht vielversprechend aus:
    http://hashlib2plus.sourceforge.net/

    Das Problem ist aber, dass man damit nur herausfinden kann ob die Dateien identisch sind oder nicht (d.h. "Ähnlichkeitschecks" oder so sind nicht möglich).



  • Danke für die schnellen Antworten.
    Ich bin immer noch dabei FFT zu suchen und habe schon zahlreiche Artikel und Beispiele gesehen. Sehr interessant.

    Zu den SHA-1 und MD5:
    Ich verstehe noch nicht was ich damit anstellen könnte.
    Die Files kann man schließlich kommet umbenennen etc.
    Wahrscheinlich habe ich das auch nicht ganz verstanden was du damit meinst. Könntest du dies genauer erläutern?

    Mit freundlichen Grüßen,
    vedel



  • Mit diverse Hashcodes (SHA, MD5, ...) kannst du nur rausbekommen ob zwei Files exakt gleich sind, Byte für Byte.
    Da du ja glaube ich wissen willst ob zwei Audio-Files gleich bzw. sehr ähnlich klingen, bringt dir das nix.



  • hustbaer schrieb:

    vedel schrieb:

    Oder wie ich zumindest die Frequenzen der Lieder analysieren kann?

    Stichwort: FFT

    Ich hab noch nie was mit FFT gemacht, aber bring das so viel bzw. beginnt die eigentliche Arbeit nicht danach? Ist die Fourier-Transformierte ähnlicher und einfacher zu vergleichen, als einfach nur die Amplitude zu einem bestimmten Zeitpunk mit etwas Toleranz zu vergleichen? Sehen etwas unterschiedliche Lieder als Fourier-Transformierte ähnlicher aus, als die Amplitude?



  • https://en.wikipedia.org/wiki/Acoustic_fingerprint
    Das hier eventuell? Ich kenne das nur von MusicBranz.



  • Kann man nicht einfach beide Dateien binär einlesen und dann vergleichen (memcmp)?



  • beim dateien vergleichen am besten die ersten 2000 byte miteinander vergleichen. sollte das geklappt haben dann nen md5 erstellen.



  • Leute, lest doch nochmal den ersten Beitrag.

    Er will wissen ob zwei Songs sich "ähnlich anhören oder sogar das gleiche Lied sind". Nicht ob das File exakt den selben Inhalt hat.

    Exakt gleicher Inhalt = easy.
    Ähnlich klingen = leider recht kompliziert.



  • Gut hustbaer, ich bin sicher, man kann jede einzelne Frequenz auslesen und dann einen Bereich erstellen (z.B. +/- 10), und anhand diesem Frequenzpaare des jeweiligen Zeitpunktes vergleichen. 🙄


  • Mod

    Hacker schrieb:

    Gut hustbaer, ich bin sicher, man kann jede einzelne Frequenz auslesen und dann einen Bereich erstellen (z.B. +/- 10), und anhand diesem Frequenzpaare des jeweiligen Zeitpunktes vergleichen. 🙄

    So einfach wie du dir das vorstellst ist das ganz bestimmt nicht. Praktisch brauchbare Musikerkennung gibt es erst seit ein paar 5-15 Jahren, dabei ist die Technik der Fourieranalyse uralt und technisch lange im Griff.



  • SeppJ schrieb:

    Hacker schrieb:

    Gut hustbaer, ich bin sicher, man kann jede einzelne Frequenz auslesen und dann einen Bereich erstellen (z.B. +/- 10), und anhand diesem Frequenzpaare des jeweiligen Zeitpunktes vergleichen. 🙄

    So einfach wie du dir das vorstellst ist das ganz bestimmt nicht.

    So einfach wie du denkst das ich denke ist es ganz bestimmt nicht! Ich weiß, dass sehr komplexe Algorithmen dahinterstecken, da sich Lieder auf zig verschiedene Arten ähneln können.



  • Hacker schrieb:

    Gut hustbaer, ich bin sicher, man kann jede einzelne Frequenz auslesen und dann einen Bereich erstellen (z.B. +/- 10), und anhand diesem Frequenzpaare des jeweiligen Zeitpunktes vergleichen. 🙄

    Was willst du mir damit sagen?
    Verstehe nicht ganz womit ich mir deiner erhabenen Meinung nach diesen 🙄 verdient haben soll.



  • Hä? Nein, man! Ich find dich cool. 😃



  • SeppJ schrieb:

    So einfach wie du dir das vorstellst ist das ganz bestimmt nicht. Praktisch brauchbare Musikerkennung gibt es erst seit ein paar 5-15 Jahren, dabei ist die Technik der Fourieranalyse uralt und technisch lange im Griff.

    Wobei das Vergleichen zweier Files noch vergleichsweise (*g*) einfach ist.

    Echt wild wird es vermutlich dann, wenn man wirklich Musikerkennung machen will. Also nicht nur zwei Files vergleichen, sondern ein File mit millionen anderen vergleichen. Bzw. deren abgespeichertem "Fingerprint".

    Würde mich auch interessieren wie das so geht.



  • 5ünf schrieb:

    hustbaer schrieb:

    vedel schrieb:

    Oder wie ich zumindest die Frequenzen der Lieder analysieren kann?

    Stichwort: FFT

    Ich hab noch nie was mit FFT gemacht, aber bring das so viel bzw. beginnt die eigentliche Arbeit nicht danach? Ist die Fourier-Transformierte ähnlicher und einfacher zu vergleichen, als einfach nur die Amplitude zu einem bestimmten Zeitpunk mit etwas Toleranz zu vergleichen? Sehen etwas unterschiedliche Lieder als Fourier-Transformierte ähnlicher aus, als die Amplitude?

    Sorry, den Beitrag hatte ich irgendwie übersehen.
    Ja, klar, wenn du zwei unterschiedliche Aufnahmen des gleichen Tracks in Stücke schneidest, und über jedes Stück ne FFT rechnest, dann sieht das was dabei rauskommt sich sehr sehr viel ähnlicher, als wenn du den Vergleich im "Zeit-Raum" machst (also mit den PCM Daten - ich vermute dass du das mit "Amplitude" meinst).

    Bei einem Vergleich im Zeit-Raum bist du schon bei den einfachsten linearen Verzerrungen aufgeschmissen. Ein Phasendreher im Bass- oder Mitteltonbereich reicht aus, damit im Zeitraum kaum noch zu erkennen ist dass es hier Gemeinsamkeiten gibt.
    Im Frequenz-Raum dagegen ist sowas kaum ein Problem.


Anmelden zum Antworten