2015-05-23 41 views
6

Chciałbym skanować pliki muzyczne i czytać/zapisywać metadane przy użyciu Elixir (cały ten projekt dotyczy nauki Elixir - więc proszę, nie mów mi, żebym używał Pythona!). Jak rozumiem, mam dwie możliwości: zadzwoń do narzędzia systemowego lub (jak nie istnieją żadne biblioteki w Erlang lub Elixir, o których mi wiadomo) napisz bibliotekę Elixir. W przypadku plików m4a wykonuję wywołanie systemowe do MP4Box i zapisuję plik xml na dysk. Następnie czytam plik, analizuję go i ładuję dane do bazy danych.Jak czytać i pisać znaczniki id3v1 i id3v2 w Elixir

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

Bardzo powolny, szczególnie dla tysięcy plików. I chcę, aby uruchamiał się przy uruchamianiu za każdym razem, aby sprawdzić zmienione/nowe pliki.

Teraz próbuję zrobić to samo dla plików mp3 z tagami id3. Próbowałem libid3-tools na Ubuntu i znalazłem tylko znaczniki id3v1. eyeD3 znalazł tylko znaczniki id3v2. Moje mp3 mają oba elementy, więc muszę się upewnić, że są takie same (przypuszczam, że mogłem usunąć tagi id3v1, ale przekonano mnie, że znaczniki id3v1 są potrzebne w sprzęcie starszego typu).

Czy istnieją jakieś biblioteki Erlanga lub Elixir dla metadanych muzycznych? Jeśli nie, czy wywołania systemowe do narzędzi ubuntu to mój najlepszy wybór (jakiekolwiek rekomendacje na które)?

Czy muszę napisać bibliotekę, aby uzyskać odpowiednią wydajność? Jeśli tak, czy istnieje istniejąca biblioteka w języku funkcjonalnym, którą mógłbym spróbować przenieść?

Czy można wywołać bibliotekę napisaną w innym języku bezpośrednio z Elixir (bez wywołania systemowego)?

+2

, możliwe linki to pomożesz: 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

Tak, te łącza są świetne, ponieważ pokazują, jak silna jest składnia bitowa Elixir. Nie ma potrzeby korzystania z biblioteki zewnętrznej. –

+0

Tak, masz rację. Użyłem powyższego linku jako modelu do odczytania tagów id3v1 i było to całkiem proste. Waham się atakować znaczniki id3v2 lub mp4, ponieważ są one bardziej złożone. Myślę, że Elixir jest przyjemnością w użyciu i dobrze by się do tego przydał, ale mam ograniczoną znajomość tych formatów (obawiam się, że ciągle rozwijany projekt poboczny). Myślę, że najpierw spojrzę na NIF Elixir/Porty wymienione przez Pawła poniżej. Masz pomysł, gdzie znaleźć więcej informacji? –

Odpowiedz

0

Zaimplementowałem odczyt znacznika ID3v2 (nie zapisuję) w eliksiru. Jest na GitHub i Hex.

Obsługa to very basic; Zaimplementowałem to minimum, aby wesprzeć mój przypadek użycia. Istnieje wiele błędów, ale wszystkie bloki są do rozwidlenia/poprawy/przyczyniają się.