Wednesday, 14 June 2017

Echoprint Codegen Binär Optionen


In dieser Woche veröffentlichte das Echo Nest Echoprint 8211 ein Open-Source-Musik-Fingerprinting und Identifikationssystem. Ein Fingerabdruck-System wie Echoprint erkennt Musik, die nur auf dem basiert, was die Musik klingt. Es ist nicht wichtig, welche Bitrate, Codec oder Kompressionsrate verwendet wurde (bis zu einem Punkt), um eine Musikdatei zu erstellen, noch ist es egal, welche schlampigen Metadaten an eine Musikdatei angehängt worden sind, wenn die Musik das selbe hört, der Musikfingerprinter Wird das erkennen. Es gibt eine ganze Reihe von wirklich interessanten Apps, die mit einem Musik-Fingerprint erstellt werden können. Unter meinen Lieblings-iPhone-Apps sind Shazam und Soundhound 8211 zwei fantastische Over-the-Air-Musik-Anerkennung Apps, die Sie halten Ihr Telefon bis zum Radio und wird Ihnen sagen, in nur wenigen Sekunden, was Lied spielte. Es ist keine Überraschung, dass diese Apps im iTunes App Store Top-Seller sind. Sie sind die nächste Sache der Magie I8217ve auf meinem iPhone gesehen. Zusätzlich zu den super sexy Anwendungen wie Shazam werden Musikidentifikationssysteme auch für mehr weltliche Dinge wie die Urheberrechtsverletzung verwendet (helfende Websites wie Youtube halten Urheberrechtsverletzungen aus den intertubes), Metadatenbereinigung (Anbringen des richtigen Künstlers, Albums und Spurnamen an Jeder Track in einer Musiksammlung) und Scan-Amp-Match wie Apple8217s bald freigegeben iCloud Musik-Service, der Musik-Identifizierung verwendet, um lange und unnötige Musik-Uploads zu vermeiden. Eine populäre Verwendung von Musikidentifikationssystemen besteht darin, eine Musiksammlung zu de-duplizieren. Programme wie tuneup helfen Ihnen bei der Suche und Beseitigung doppelter Tracks in Ihrer Musiksammlung. In dieser Woche wollte ich mit dem neuen Echoprint-System herumspielen, also habe ich mich entschlossen, ein Programm zu schreiben, das in meiner Musiksammlung doppelte Tracks findet und berichtet. Hinweis: Wenn du schickst, deine Musiksammlung zu de-duplizieren, aber du bist kein Programmierer, dieser Posten ist nicht für dich, geh und machst Tuning oder einen anderen De-Duplizierer. Der Hauptzweck dieser Post ist, zu zeigen, wie Echoprint arbeitet, nicht um ein kommerzielles System zu ersetzen. Wie Echoprint Echoprint arbeitet, wie viele Musik-Identifikationsdienste ist ein mehrstufiger Prozess: Codegenerierung, Ingestion und Lookup. Im Codegenerierungsschritt werden musikalische Features aus Audio extrahiert und in eine Textfolge verschlüsselt. In der Einnahme-Schritt werden Codes für alle Songs in einer Sammlung generiert und zu einer durchsuchbaren Datenbank hinzugefügt. Im Lookup-Schritt wird der Codegen-String für ein unbekanntes Bit von Audio generiert und wird als Fuzzy-Abfrage für die Datenbank von zuvor aufgenommenen Codes verwendet. Wenn ein passend hochkarätiges Match gefunden wird, wird die Info auf der passenden Spur zurückgegeben. Der Teufel steckt im Detail. Das Erzeugen einer kurzen, hochgradigen Darstellung von Audio, die für die Suche geeignet ist, die unempfindlich gegenüber Codierungen, Bitraten, Rauschen und anderen Transformationen ist, ist eine Herausforderung. Ähnlich anspruchsvoll ist die Darstellung eines Codes in einer Weise, die eine Hochgeschwindigkeitsabfrage ermöglicht und eine unvollständige Übereinstimmung von verrauschten Codes ermöglicht. Echoprint besteht aus zwei Hauptkomponenten: echoprint-codegen und echoprint-server. Code Generation echoprint-codegen ist dafür verantwortlich, ein bisschen Audio zu machen und es in einen Echoprint-Code zu verwandeln. Sie können die Quelle von github packen und die Binärdatei für Ihre lokale Plattform aufbauen. Die Binärdatei nimmt eine Audiodatei als Eingabe und gibt Ausgabe einen Block von JSON, der Song-Metadaten enthält (die in den ID3-Tags im Audio gefunden wurde) zusammen mit einem Code-String. Hier ist ein Beispiel: In diesem Beispiel, I8217m nur Fingerabdruck der ersten 10 Sekunden des Liedes, um Platz zu sparen. Der Code-String ist nur eine Base64-Codierung einer Zlib-Komprimierung der ursprünglichen Code-String, die eine hex-codierte Reihe von ASCII-Nummern ist. Eine Vollversion dieses Codes ist das, was vom Lookup-Server für Fingerabdruckabfragen indiziert wird. Codegen ist ziemlich schnell. Es scannt Audio bei etwa 250x Echtzeit pro Prozessor nach Decodierung und Resampling auf 11025 Hz. Dies bedeutet, dass ein vollständiger Song in weniger als 0,5s auf einem durchschnittlichen Computer gescannt werden kann, und eine Menge an Audio, die für die Abfrage (30s) geeignet ist, kann in weniger als 0,04s gescannt werden. Die Decodierung von MP3 ist der Engpass für die meisten Implementierungen. Decoder wie mpg123 oder ffmpeg können 30s mp3 Audio zu 11025 PCM in unter 0,10s decodieren. Der Echoprint-Server Der Echoprint-Server ist für die Aufrechterhaltung eines Index von Fingerabdrücken von (potenziell) Millionen von Tracks und zum Abrufen von Abfragen verantwortlich. Der Lookup-Server nutzt den beliebten Apache Solr als Suchmaschine. Wenn eine Abfrage eintrifft, werden die Codes, die eine hohe Überschneidung mit dem Abfragecode haben, mit Solr abgerufen. Der Lookup-Server filtert dann durch diese Kandidaten und punktet sie auf einer Anzahl von Faktoren wie der Anzahl der Codewort-Übereinstimmungen, der Reihenfolge und dem Timing von Codes und so weiter. Wenn der beste Matching-Code eine ausreichend hohe Punktzahl hat, gilt er als Hit und die ID und die damit verbundenen Metadaten werden zurückgegeben. Um einen Server auszuführen, musst du zuerst alle Codes für jede Audiospur in den Server-Index einfügen und indexieren. Um einen Lookup durchzuführen, verwenden Sie echoprint-codegen, um einen Code für eine Teilmenge der Datei zu generieren (normalerweise 30 Sekunden wird) und das als Abfrage an den Server ausgeben. Das Echo Nest beherbergt einen Lookup-Server, also für viele Anwendungsfälle, die du gewohnt hast, deinen eigenen Lookup-Server auszuführen. Stattdessen. Du kannst das Echo Nest über den Songidentify Call abfragen. (Wir erwarten auch, dass viele andere auch öffentliche Echoprint-Server ausführen können). Erstellen eines De-Duplikators Mit dieser schnellen Einführung auf, wie Echoprint funktioniert let8217s schauen, wie wir einen De-Duplicator erstellen könnte. Die Kernlogik ist sehr einfach: Wir erstellen eine leere Fingerabdruckdatenbank. Für jeden Song in der Musiksammlung generieren wir einen Echoprint-Code und frage den Server nach einem Match ab. Wenn wir eins finden, dann ist das mp3 ein Duplikat und wir berichten es. Ansonsten ist es eine neue Spur, also nehmen wir den Code für den neuen Track in den Echoprint-Server ein. Spülen. Wiederholen. I8217ve hat ein Python-Programm dedup. py geschrieben, um genau das zu tun. Eine vorsichtige Art zu sein, ich habe es einfach nicht zu löschen Duplikate, aber stattdessen habe ich es nur einen Bericht von Duplikaten zu generieren, so kann ich entscheiden, welche ich will zu halten. Das Programm verfolgt auch seinen Zustand, so dass Sie es wieder ausführen können, wann immer Sie neue Musik zu Ihrer Sammlung hinzufügen. Hier ist ein Beispiel für das Ausführen des Programms: Dedup. py ausdrucken jeden mp3, wie es es verarbeitet und wie es findet ein Duplikat es berichtet es. Es sammelt auch einen doppelten Bericht in einer Datei im pblml-Format wie so: Wieder, dedup. py doesn8217t tatsächlich löschen Sie alle Duplikate, wird es nur Ihnen diese netty Bericht von Duplikaten in Ihrer Sammlung. Wenn Sie dedup. py einen Versuch geben wollen, gehen Sie folgendermaßen vor: Laden, bauen und installieren echoprint-codegen Herunterladen, erstellen, installieren und starten Sie den echoprint-Server Holen Sie sich dedup. py. Bearbeiten Sie die Zeile 10 in dedup. py, um den sys. path auf das echoprint-server-API-Verzeichnis zu setzen. Zeile 13 in dedup. py bearbeiten, um den Codegenpath zu setzen, um auf echoprint-codegen-ausführbare Datei zu zeigen. Dies wird alle Dups finden und schreiben Sie zur dedup. dat-Datei. Es dauert etwa 1 Sekunde pro Lied. Zum Neustart (dies wird Ihre Fingerabdruck-Datenbank löschen) laufen: Beachten Sie, dass Sie den Dedup-Prozess tatsächlich ausführen können, ohne Ihren eigenen Echoprint-Server zu betreiben (sparen Sie die Schwierigkeiten bei der Installation von Apache-Solr, Tokyo-Kabinett und Tokyo-Kabinett). Der Nachteil ist, dass Sie won8217t haben alle persistenten Server, was bedeutet, dass you8217ll nicht in der Lage sein, inkrementell de-dup Ihre Sammlung 8211 you8217ll müssen es in allen in einem Pass zu tun. Um den lokalen Modus zu verwenden, füge einfach die FP. py-Anrufe hinzu. Der Index wird dann im Gedächtnis gehalten, kein Solr oder Tokyo Tyrann wird benötigt. Wrapping up dedup. py ist nur ein kleines Beispiel für die Art der Anwendung, die Entwickler in der Lage sein werden, mit Echoprint zu erstellen. Ich erwarte, in den nächsten Monaten noch viel mehr zu sehen. Vor Echoprint war die Liedkennung ausser Reichweite des typischen Musikanwendungsentwicklers, es war einfach zu teuer. Jetzt mit Echoprint kann jeder Musik-Identifikations-Technologie in ihre Apps integrieren. Das Ergebnis wird weniger Kopfschmerzen für Entwickler und viel bessere Musik-Anwendungen für alle. Teilen Sie dies: Irsquove arbeitete mit dem Open-Source-Audio-Fingerprinting-Code EchoPrint als Teil der Audio-Analyse-Komponente meines Masters-Projekts. Fingerprinting ist ein Teil dessen, was all diese Musikerkennung Apps auf Handys tun - Erstellen eines Fingerabdruck-Code, der einen Abschnitt der Wellenform eines Musikstücks darstellt, das dann mit einer Fingerabdruck-Datenbank verglichen werden kann, um die Musik zu identifizieren. EchoPrint, wie der Name schon sagt, schafft Fingerabdruck-Codes, die in der EchoNest-Datenbank nachgeschlagen werden können. Was ich denke, wird eine gute Quelle für Musikanalyse Daten für mein Projekt sein. Sobald ich das alles angeschnallt habe, schreibt Irsquoll eine Beschreibung, wie alle diese Komponenten in meinem Projekt verwendet werden. Auf dem GitHub-Repository für den Echoprint-Code gibt es eine Beispiel-iOS-App, die zeigt, wie man Fingerabdruck verwendet, aber es ist ein kleines bisschen über kompliziert. Der Fingerprint-Code erfordert, dass Sie ihm einen Puffer von unkomprimierten PCM-Sample-Werte für etwa 30 Sekunden der Musik, die Sie zu identifizieren versuchen, übergeben. Der Beispielcode verwendet eine externe Bibliothek, um eine komprimierte Audiodatei in PCM zu konvertieren, schreibt das PCM in eine neue Datei, liest die neue Datei wieder in den RAM, hinterlässt die Daten im RAM und schlägt dann 30 Sekunden im Wert von Samples, um einen Puffer zu erhalten Für den Fingerabdrucker. Eine einfachere und effizientere Methode ist die Verwendung der Core Audio Extended Audio File Services auf OS X und iOS. Die erforderlichen Schritte sind, um ein ExtAudioFileRef für die komprimierte Audiodatei zu erstellen und eine PCM-Formatbeschreibung als das Attribut ExtAudioFileRefrsquos Client Format anzuhängen. Dann lesen Sie die ersten 30 Sekunden der Datei in einen Puffer, das Client-Format bewirkt, dass die Ergebnisse des Lesens im angegebenen PCM-Format vorliegen. Dieser Puffer kann dann direkt an den Fingerabdruck weitergegeben werden. Der untenstehende Code zeigt, wie dies zu tun ist. SoundAndMusicForInteractiveGames, Core Audio, Kakao, Objective-C, C, Audio Programmierung, EchoNest, EchoPrint, Über Bleeps und Pops Im Jim McGowan. Ich unterrichte Sound Design an der Hong Kong Academy für darstellende Kunst und ich habe vor kurzem einen MSc in Sound und Musik für interaktive Spiele an der Leeds Metropolitan University abgeschlossen. Dieser Blog deckt Material in Bezug auf diese und ähnliche Themen. Codegen für Echoprint Echoprint ist ein Open-Source-Musik Fingerabdruck und Auflösung Rahmen von der Echo Nest angetrieben. Der Codegenerator (Bibliothek zum Konvertieren von PCM-Samples von einem Mikrofon oder einer Datei in Echoprint-Codes) ist Open Source (MIT lizenziert) und kostenlos für jeden Einsatz. Die Serverkomponente, die Abfragen speichert und auflöst, ist Open Source (Apache 2 lizenziert) und frei für jede Verwendung. Die Daten für die Auflösung von Millionen von Songs sind für jeden Gebrauch frei, sofern Änderungen oder Ergänzungen an die Community zurückgeführt werden. Es gibt zwei Betriebsarten des Echoprint-Codegens: Die Codegen-Bibliothek (libcodegen) soll in Code verknüpft werden, der ihm einen Puffer von PCM-Daten übergibt und einen Code-String ausgibt. Die Codegen-Binärdateien laufen eigenständig, akzeptieren Dateinamen als Eingaben und werden in einem Multithread-Worker-Modus ausgeführt. Zusätzliche Voraussetzungen für die Codegen-Binär-TagLib ffmpeg - dies wird über Shell aufgerufen und ist nicht in Codegen verknüpft. Bei Ubuntu oder Debian können Sie diese Abhängigkeiten mit: Auf OS-X mit Homebrew installieren: Sie finden hier die Dokumentation unter dem Windows-Ordner Mehr spezifische Die in Windows erzeugte Binärdatei wird standardmäßig als Codegen bezeichnet, wo auf Linux oder Mac OS-X heißt es echoprint-codegen. Hinweise zu libcodegen: Die Codegenerierung nimmt einen Puffer von Gleitkomma-PCM-Daten bei 11025 Hz und Mono ab. Der Code-String ist nur eine Base64-Codierung einer Zlib-Komprimierung der ursprünglichen Code-String, die eine hex-codierte Reihe von ASCII-Nummern ist. Siehe APIfp. py im Echoprint-Server zur Decodierung von Hilfe. Sie müssen nur für 20 Sekunden Audio abfragen, um ein Ergebnis zu erhalten. Anmerkungen zur Codegen-Binärdatei Das Makefile erstellt einen Beispielcodegenerator, der libcodegen verwendet, genannt Codegen. Dieser Code-Generator hat mehr Funktionen - es wird ID3-Tag-Informationen ausgeben und verwendet ffmpeg, um jede Art von Datei zu dekodieren. Wenn Sie nicht brauchen, um libcodegen in Ihre App zu kompilieren, können Sie sich darauf verlassen. Beachten Sie, dass Sie ffmpeg installiert und auf Ihrem Pfad zugänglich sein müssen, damit dies funktioniert. Nehmen Sie 30 Sekunden Audio von 10 Sekunden in die Datei und Ausgabe JSON geeignet für die Abfrage: Sie können diese JSON direkt an die Echo Nests Songidentify (wer hat einen Echoprint Server gebootet), zum Beispiel: Oder Sie können Host Ihre eigenen Echoprint-Server Und aufnehmen oder abfragen. Codegen läuft auch in einem Multithread-Modus für Bulk-Auflösung: Berechnet Codes für jede Datei in Filelist für 30 Sekunden ab 10 Sekunden. (Es versucht, schlau zu sein über die Anzahl der Threads zu verwenden.) Es wird eine JSON-Liste ausgeben. Beachten Sie, dass songidentify Listen im JSON akzeptieren kann, was schneller ist, als jeder Code einzeln zu senden. Der Tag-Parameter wird jedem Codewörterbuch hinzugefügt, um dem auflösenden Material zu entsprechen. Codegen scannt Audio bei ca. 250x Echtzeit pro Prozessor nach dem Decodieren und Resampling auf 11025 Hz. Dies bedeutet, dass ein vollständiger Song in weniger als 0,5s auf einem durchschnittlichen Computer gescannt werden kann, und eine Menge an Audio, die für die Abfrage (30s) geeignet ist, kann in weniger als 0,04s gescannt werden. Decodierung von MP3 wird der Engpass für die meisten Implementierungen sein. Decoder wie mpg123 oder ffmpeg können 30s mp3 Audio zu 11025 PCM in unter 0,10s decodieren. Schauen Sie auf echoprint. me für Informationen über die Genauigkeit des Echoprint-Systems. Q: Ich bekomme Couldnt dekodieren alle Samples mit: ffmpeg beim Ausführen von codegen A: Wenn du den Beispielcodegenerator (echoprint-codegen) ausfühst, stell dir sicher, dass ffmpeg für deinen Pfad zugänglich ist. Versuchen Sie, ffmpeg Dateiname. mp3 auf die Datei zu testen, die Sie den Codegenerator mit testen. Wenn es nicht funktioniert, wird Codegen nicht funktionieren.

No comments:

Post a Comment