2015-05-23 13 views
6

Vorrei eseguire la scansione di file musicali e di lettura/scrittura dei metadati utilizzando Elixir (tutto questo progetto è di imparare Elixir - quindi per favore non mi dica di usare Python). A quanto ho capito, ho due possibilità: chiamare un'utilità di sistema o (poiché non esistono librerie in Erlang o Elixir di cui sono a conoscenza) scrivere una libreria di elisir. Per i file m4a, faccio una chiamata di sistema a MP4Box e scrive un file xml su disco. Poi leggo il file, lo analizzo e carica i dati in un database.Come leggere e scrivere tag ID3v1 e ID3v2 in Elixir

def parse(file_name) do 
    System.cmd("MP4Box", ["-diso",file_name]) 
    Ainur.XmlParser.parse(xml_file_name(file_name)) 
    |> get_tags 
end 

Molto lento, soprattutto per migliaia di file. E voglio che venga eseguito all'avvio ogni volta per verificare la presenza di file modificati/nuovi.

Ora sto cercando di fare lo stesso per il mp3 con tag ID3. Ho provato libid3-tools su Ubuntu e ho trovato solo i tag id3v1. eyeD3 ha trovato solo tag id3v2. I miei mp3 hanno entrambi, quindi ho bisogno di assicurarmi che ci siano gli stessi (suppongo che potrei cancellare i tag id3v1, ma sono stato portato a credere che i tag id3v1 siano necessari sulle apparecchiature legacy).

Esistono librerie Erlang o elisir per i metadati musica? In caso contrario, le chiamate di sistema alle utility ubuntu sono la scelta migliore (eventuali consigli su quali)?

Oppure è necessario scrivere una libreria per ottenere prestazioni ragionevoli? In tal caso, esiste una libreria esistente in un linguaggio funzionale che potrei provare a portare?

o è possibile chiamare una libreria scritta in un'altra lingua direttamente da Elixir (senza la chiamata di sistema)?

+2

, possibile questo collega si contribuisce a: http://benjamintan.io/blog/2014/06/10/elixir-bit-syntax-and-id3/ http://www.citizen428.net/blog/2010/09/04/erlang-bit-syntax-and-id3 –

+1

Sì, questi link sono ottimi perché mostrano quanto sia potente la sintassi dei bit di Elixir. Non c'è bisogno di una libreria esterna. –

+0

Sì, hai ragione. Ho usato il link qui sopra come modello per leggere i tag id3v1 ed era abbastanza semplice. Esito ad attaccare i tag id3v2 o mp4 perché sono più complessi. Penso che Elixir sia una gioia da usare e che funzionerebbe bene per questo, ma ho una conoscenza limitata di questi formati (temo il progetto parallelo in continua espansione). Penso che prima guarderò l'Elixir NIF/Ports menzionato da Paweł qui sotto. Qualche idea su dove trovare maggiori informazioni? –

risposta

0

Ho implementato la lettura dei tag ID3v2 (non scritta) in Elisir. È su GitHub e Hex.

supporto è molto di base; Ho implementato il minimo indispensabile per supportare il mio caso d'uso. Ci sono molti bug, ma tutti gli elementi costitutivi sono lì da forgiare/migliorare/contribuire.

Problemi correlati