Edited at

Elixirからmp3のID3タグを扱うライブラリ

を作りました。ID3 といいます。

ndac-todoroki/elixir-id3 | Github

Elixir Forumでの宣伝はこちら

ID3 - a mp3 ID3v1/v2 tag reader/writer for Elixir | Elixir Forum

Rustler を利用してRustで書かれたNIFを利用するライブラリです。ID3に関する部分はすべてRust製のライブラリに依存しているのでちゃんと動くはずです(?)


できること


ID3v1/v2タグの読み出し

iex> {:ok, tag} = ID3.get_tag("audio.mp3")

iex> tag
%ID3.Tag{
album_artist: "Queen",
artist: "Queen",
date_recorded: ~N[1977-10-07 00:00:00],
date_released: ~N[1981-11-02 00:00:00],
disc: 1,
duration: nil,
genre: "Rock",
title: "We Will Rock You",
total_discs: 1,
total_tracks: 17,
track: 16,
year: 1981
}


ID3v2.4タグの書き込み

iex> {:ok, tag} = ID3.get_tag("audio.mp3")

iex> new_tag = %{tag |
album_artist: "クイーン",
artist: "クイーン",
date_recorded: nil, # <- nilは削除
genre: "洋楽",
title: "ウィ・ウィル・ロック・ユー",
}
iex> ID3.write_tag("audio.mp3", new_tag)
:ok


制限

現在はよく使われる属性にしか対応していません(アーティスト名や曲名など)。詳しくはドキュメントの Tag.t の頁をご覧ください。

Rust力が高まったらその他の属性にも対応する予定です。


  • 複数あるもの


    • コメント

    • アルバムアート



  • 独自属性(TXXX)など

独自属性を始めとしたいくつかの属性は Tag 構造体ではなく通常の %{String.t => String.t} で対応するつもりです。


導入

mix.exsに追加してください。

最新のRustが使える状態でないと、コンパイルに失敗するはずです。その場合は rustup の導入をしてください。(導入時に最新のRust stableが入ります)


やってみたいこと

elixirでMP3のID3v2タグ抽出 で示されていることをベースにすべてElixirで書くのもやってみたい。

とりあえず今はすぐに使えるライブラリがほしいという自分の需要に合わせて作成したので、そのうち。


最後に

是非使ってみてください!Rustlerとかライブラリ化とか初めてなのでFBがほしい。