如何在Elixir中读写id3v1和id3v2标签

Pau*_*l B 6 erlang mp4 id3 elixir

我想使用Elixir扫描音乐文件和读/写元数据(整个项目是关于学习Elixir - 所以请不要告诉我使用Python!).据我了解,我有两个选择:调用系统实用程序或(因为我知道的Erlang或Elixir中没有库)编写Elixir库.对于m4a文件,我对MP4Box进行系统调用,并将xml文件写入磁盘.然后我读入文件,解析它,并将数据加载到数据库中.

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

非常慢,特别是对于数千个文件.我希望它在每次启动时运行以检查更改/新文件.

现在我正在尝试对带有id3标签的mp3做同样的事情.我在Ubuntu上尝试了libid3-tools,它只找到了id3v1标签.eyeD3只找到了id3v2标签.我的mp3都有,所以我需要确保有相同的(我想我可以删除id3v1标签,但我一直认为遗留设备需要id3v1标签).

音乐元数据是否有任何Erlang或Elixir库?如果没有,系统调用ubuntu实用程序是我的最佳选择(任何建议)?

或者我是否需要编写库以获得合理的性能?如果是这样,是否有一个功能语言的现有库我可以尝试移植?

或者是否可以直接从Elixir调用另一种语言编写的库(没有系统调用)?

Paw*_*rok 1

您始终可以使用 erlang NIF ( http://erlang.org/doc/tutorial/nif.html ) 来包装外部库