を作りました。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がほしい。