Echoprint Codegen Binære Alternativer


Denne uken utgav Echo Nest Echoprint 8211 et fingeravtrykks - og identifikasjonssystem med åpen kildekode. Et fingeravtrykkssystem som Echoprint anerkjenner musikk basert bare på hva musikken lyder som. Det spiller ingen rolle hvilken bithastighet, kodek eller komprimeringshastighet ble brukt (opp til et punkt) for å lage en musikkfil, og det spiller ingen rolle hva sjusete metadata er knyttet til en musikkfil, hvis musikken høres det samme, musikkfingeren vil gjenkjenne det. Det er en hel masse veldig interessante apper som kan opprettes ved hjelp av en musikkfingerprinter. Blant mine favoritt iPhone-apper er Shazam og Soundhound 8211 to fantastiske musikkprogrammer for musikkgjenkjenning som lar deg holde telefonen opp til radioen og forteller deg om noen få sekunder hvilken sang som spilles. Det er ingen overraskelse at disse appene er toppselgere i iTunes App Store. De er den nærmeste tingen til magi I8217ve sett på min iPhone. I tillegg til de super sexy applikasjonene som Shazam, brukes musikkidentifikasjonssystemer også for mer verdslige ting som opphavsrettshåndhevelse (å hjelpe nettsteder som YouTube å holde opphavsrettbrudd utenfor intertubene), opprydding av metadata (vedlegg av riktig artist, album og spornavn til hvert spor i en musikksamling), og skann forstørrelseskamp som Apple8217s snart bli utgitt iCloud-musikkjeneste som bruker musikkidentifikasjon for å unngå lange og unødvendige musikkopplastinger. En populær bruk av musikkidentifikasjonssystemer er å de-duplisere en musikksamling. Programmer som tuneup vil hjelpe deg med å finne og eliminere dupliserte spor i musikksamlingen din. Denne uken ønsket jeg å leke med det nye Echoprint-systemet, så jeg bestemte meg for at I8217d skrev et program som finner og rapporterer dupliserte spor i musikksamlingen. Merk: Hvis du ønsker å de-duplisere musikksamlingen din, men du ikke er en programmerer, er dette innlegget ikke for deg, gå og få tuneup eller noen annen de-duplikator. Hovedformålet med dette innlegget er å vise hvordan Echoprint fungerer, ikke å erstatte et kommersielt system. Hvordan Echoprint fungerer Echoprint, som mange musikk identifikasjonstjenester er en multi-trinns prosess: kodegenerering, inntak og oppslag. I kodegenereringstrinnet blir musikkfunksjoner hentet fra lyd og kodet inn i en tekststreng. I inntakstrinnet genereres koder for alle sangene i en samling og legges til en søkbar database. I oppslagstrinnet genereres kodegenstrengen for en ukjent bit av lyd og brukes som en fuzzy spørring til databasen av tidligere inntatte koder. Hvis en passende høy scoring match er funnet, blir info på matchende spor returnert. Djevelen er i detaljene. Det er en utfordring å generere en kort høyverdig representasjon av lyd som er egnet for å søke som er ufølsom for koding, bithastighet, støy og andre transformasjoner. Tilsvarende utfordrende representerer en kode på en måte som muliggjør høyhastighets spørring og muliggjør ufullstendig samsvar med støyende koder. Echoprint består av to hovedkomponenter: ekkoprint-codegen og echoprint-server. Code Generation echoprint-codegen er ansvarlig for å ta litt lyd og gjøre det til en ekkoprint-kode. Du kan hente kilden fra github og bygge binæret for din lokale plattform. Den binære vil ta en lydfil som input og gi utdata en blokk med JSON som inneholder sangmetadata (som ble funnet i ID3-kodene i lyden) sammen med en kode streng. Here8217s et eksempel: I dette eksemplet, kun I8217m fingeravtrykk de første 10 sekundene av sangen for å spare plass. Kodestrengen er bare en base64-koding av en zlib-komprimering av den opprinnelige kodestrengen, som er en hex-kodet serie av ASCII-tall. En fullversjon av denne koden er det som er indeksert av oppslagsserveren for fingeravtrykkssøk. Koden er ganske rask. Den skanner lyd ved omtrent 250x sanntid per prosessor etter dekoding og resampling til 11025 Hz. Dette betyr at en full sang kan skannes på mindre enn 0,5 sekunder på en gjennomsnittlig datamaskin, og en mengde lyd som passer for spørring (30s) kan skannes på mindre enn 0,04 s. Dekoding fra MP3 vil være flaskehalsen for de fleste implementeringer. Dekodere som mpg123 eller ffmpeg kan dekode 30s mp3 lyd til 11025 PCM på under 0.10s. Echoprint Server Echoprint-serveren er ansvarlig for å opprettholde en indeks av fingeravtrykk av (potensielt) millioner av spor og betjening av spørsmål. Oppslagsserveren bruker den populære Apache Solr som søkemotor. Når en forespørsel kommer, blir koder som har høy overlapping med spørrekoden hentet ved hjelp av Solr. Oppslagsserveren filtrerer deretter gjennom disse kandidatene og scorer dem basert på en rekke faktorer som antall kodeord-kamper, rekkefølgen og tidspunktet for koder og så videre. Hvis den beste matchende koden har en høy nok score, anses den som en hit, og ID og eventuelle tilknyttede metadata returneres. For å kjøre en server, må du først innta og indeksere full lengdekoder for hvert lydspor av interesse i serverindeksen. For å utføre en oppslag, bruker du echoprint-kodegen til å generere en kode for en delmengde av filen (vanligvis 30 sekunder vil gjøre) og utstede det som en forespørsel til serveren. Ekko Nest er vert for en oppslagsserver, så for mange brukstilfeller som du vant8217t må du kjøre din egen oppslagsserver. I stedet. Du kan stille spørsmål til Echo Nest via sangidentifiseringssamtalen. (Vi forventer også at mange andre kan kjøre offentlige ekkoprint-servere også). Opprette en de-duplikator Med den raske introduksjonen om hvordan Echoprint fungerer let8217 ser vi hvordan vi kan lage en de-duplikator. Kjernelogikken er ekstremt enkel: Vi lager en tom fingeravtrykksdatabase. For hver sang i musikksamlingen genererer vi en Echoprint-kode og spørre serveren for en kamp. Hvis vi finner en, så er mp3 et duplikat, og vi rapporterer det. Ellers er det et nytt spor, så vi inntar koden for det nye sporet i ekkoprint-serveren. Skylle. Gjenta. I8217ve skrev et pythonprogram dedup. py for å gjøre nettopp dette. Å være en forsiktig type, har jeg ikke den faktisk slette duplikater, men i stedet har jeg det bare å generere en rapport av duplikater, slik at jeg kan bestemme hvilken jeg vil beholde. Programmet holder også oversikt over statens tilstand, slik at du kan kjøre det igjen når du legger til ny musikk i samlingen din. Here8217s et eksempel på å kjøre programmet: Dedup. py skrive ut hver mp3 som den behandler den, og som den finner en duplikat, rapporterer den den. Det samler også en duplikatrapport i en fil i pblml-format slik: Dernest, dedup. py doesn8217t sletter faktisk noen duplikater, det vil bare gi deg denne ferske rapporten om duplikater i samlingen din. Hvis du vil gi dedup. py en prøve, kan du følge disse trinnene: Last ned, bygg og installer echoprint-kodegen Last ned, bygg, installer og kjør echoprint-serveren Få dedup. py. Rediger linje 10 i dedup. py for å angi sys. path for å peke på echoprint-server API-katalogen Rediger linje 13 i dedup. py for å angi kodegenpath for å peke på din echoprint-codegen kjørbar Dette vil finne alle dupene og skrive dem til dedup. dat-filen. Det tar omtrent 1 sekund per sang. For å starte på nytt (dette vil slette fingeravtrykkdatabasen din), kjør: Merk at du faktisk kan kjøre oppdragsprosessen uten å kjøre din egen ekkoprint-server (som sparer deg for problemer med å installere Apache-Solr, Tokyo-kabinettet og Tokyo-kabinettet). Ulempen er at du vant8217 har en vedvarende server, noe som betyr at du ikke kan inkremental inkludere samlingen din 8211 you8217ll trenger å gjøre det i det hele tatt i ett pass. Hvis du vil bruke lokalmodus, må du bare legge til Local-True til fp. py-samtalene. Indeksen holdes da i minnet, ingen solr eller Tokyo-tyrann er nødvendig. Innpakning dedup. py er bare et lite eksempel på typen program som utviklere kan lage ved hjelp av Echoprint. Jeg regner med å se mye mer i de neste månedene. Før Echoprint var sangidentifikasjon utilgjengelig for den typiske musikkapplikasjonsutvikleren, var det bare for dyrt. Nå med Echoprint kan alle inkorporere musikkidentifikasjonsteknologi i sine apper. Resultatet blir færre hodepine for utviklere og mye bedre musikkapplikasjoner for alle. Del dette: Irsquove har jobbet med åpen kildekode-fingeravtrykkskode EchoPrint som en del av lydanalysekomponenten i mitt mesterprosjekt. Fingeravtrykk er en del av hva alle de musikkgjenkjenningsappene på telefoner gjør - oppretter en fingeravtrykkskode som representerer en del av bølgeformen til et musikkstykke som deretter kan sammenlignes med en fingeravtrykkdatabase for å identifisere musikken. EchoPrint, som navnet antyder, skaper fingeravtrykkskoder som kan sees opp i EchoNest-databasen. som jeg tror vil være en god kilde til musikkanalysedata for prosjektet mitt. Når jeg er ferdig med det, legger Irsquoll en beskrivelse av hvordan alle disse komponentene brukes i prosjektet mitt. På GitHub-depotet for ekkoprintkoden finnes det et eksempel på iOS-appen som viser hvordan du bruker fingerprinter, men det er en liten bit over komplisert. Fingerprinterkoden krever at du sender den en buffer med ukomprimerte PCM-verdier i ca. 30 sekunder av musikken du prøver å identifisere. Eksempelkoden bruker et eksternt bibliotek til å konvertere en komprimert lydfil til PCM, skriver PCM til en ny fil, leser den nye filen tilbake i RAM, nedsamler dataene i RAM, og slår gjennom 30 sekunder av prøver for å få en buffer for fingeravtrykkeren. En enklere og mer effektiv metode er bruk av Core Audio Extended Audio File Services tilgjengelig på både OS X og IOS. De nødvendige trinnene er å opprette et ExtAudioFileRef for den komprimerte lydfilen og legge til en PCM-formatbeskrivelse som attributten ExtAudioFileRefrsquos Client Format. Les deretter de første 30 sekundene av filen i en buffer, og klientformatet får resultatene av lesingen til å være i det angitte PCM-formatet. Denne bufferen kan da sendes direkte til fingerprinteren. Koden nedenfor viser hvordan du gjør dette. SoundAndMusicForInteractiveGames, Core Audio, Kakao, Objective-C, C, Audio Programmering, EchoNest, EchoPrint, Om Bleeps og Pops Im Jim McGowan. Jeg underviser i Sound Design ved Hong Kong Academy for Performing Arts, og jeg har nylig fullført en MSc i lyd og musikk for interaktive spill ved Leeds Metropolitan University. Denne bloggen dekker materiale relatert til dette og lignende emner. Codegen for Echoprint Echoprint er et open-source musikkfingeravtrykk og løsningsramme drevet av Echo Nest. Kodegeneratoren (bibliotek for å konvertere PCM-prøver fra en mikrofon eller fil til Echoprint-koder) er åpen kildekode (MIT-lisensiert) og gratis for enhver bruk. Serverkomponenten som lagrer og løser spørringer er åpen kildekode (Apache 2 lisensiert) og gratis for enhver bruk. Dataene for å løse til millioner av sanger er gratis for enhver bruk, forutsatt at eventuelle endringer eller tillegg blir slått sammen til fellesskapet. Det er to operasjonsmoduser for Echoprint-kodegenet: codegen-biblioteket (libcodegen) er ment å være koblet til kode som overfører det til en buffer med PCM-data, og vil sende en kode streng. Codegen binær kjører frittstående, aksepterer filnavn som innganger og kjører i en multithreaded arbeidermodus. Ytterligere krav til kodegen binær TagLib ffmpeg - dette kalles via shell og er ikke koblet til codegen På Ubuntu eller Debian kan du installere disse avhengighetene med: På OS-X med homebrew kan du bruke: Se dokumentasjonen i Windows-mappen for flere detaljer. Den binære generasjonen i Windows vil bli kalt codegen som standard der som på Linux eller Mac OS-X er det kalt echoprint-codegen. Merknader om libcodegen: Kodegenerering tar en buffer av flytende punkt PCM-data samplet ved 11025 Hz og mono. Kodestrengen er bare en base64-koding av en zlib-komprimering av den opprinnelige kodestrengen, som er en hex-kodet serie av ASCII-tall. Se APIfp. py i echoprint-server for dekodingshjelp. Du trenger bare å spørre etter 20 sekunder med lyd for å få et resultat. Merknader om codegen binæren The makefile bygger et eksempel kode generator som bruker libcodegen, kalt codegen. Denne kodegeneratoren har flere funksjoner - den vil sende ID3-taginformasjon og bruker ffmpeg til å dekode alle typer filer. Hvis du ikke trenger å kompilere libcodegen i appen din, kan du stole på dette. Vær oppmerksom på at du må ha ffmpeg installert og tilgjengelig på veien for at dette skal fungere. Vil ta 30 sekunder med lyd fra 10 sekunder til filen og skrive ut JSON som passer for spørringen: Du kan POST denne JSON direkte til Echo Nests songidentify (hvem har en Echoprint-server oppstartet), for eksempel: Eller du kan være vert for din egen Echoprint-server og innta eller spørre om det. Koden går også i en multithreaded modus for masseoppløsning: Beregner koder for hver fil i filliste i 30 sekunder fra 10 sekunder. (Det forsøker å være smart om antall tråder som skal brukes.) Det vil sende ut en JSON-liste. Merk at sangidentifikatoren kan godta lister i JSON, som vil være raskere enn å sende hver kode en om gangen. Merkeparameteren legges til hver kodeord for å matche løsningsmaterialet. Codegen skanner lyd ved omtrent 250x sanntid per prosessor etter dekoding og resampling til 11025 Hz. Dette betyr at en full sang kan skannes på mindre enn 0,5 sekunder på en gjennomsnittlig datamaskin, og en mengde lyd egnet for spørring (30s) kan skannes på mindre enn 0,04 s. Dekoding fra MP3 vil være flaskehalsen for de fleste implementeringer. Dekodere som mpg123 eller ffmpeg kan dekode 30s mp3 lyd til 11025 PCM på under 0.10s. Se på echoprint. me for informasjon om nøyaktigheten til ekkoprint systemet. Spørsmål: Jeg får ikke kunne dekode noen eksempler med: ffmpeg når du kjører codegen A: Når du kjører eksempelkodegeneratoren (echoprint-kodegen), må du kontrollere at ffmpeg er tilgjengelig for banen din. Prøv å kjøre ffmpeg filnavn. mp3 på filen du tester kodgeneratoren med. Hvis det ikke virker, vil kodegen ikke fungere.

Comments

Popular Posts