19次发布
0.5.0 | 2024年2月1日 |
---|---|
0.4.1 | 2022年8月1日 |
0.4.0 | 2022年7月31日 |
0.2.7182 | 2020年10月29日 |
0.0.2 | 2020年10月25日 |
#112 在 解析器实现
每月819次下载
用于 13 个crate(10个直接使用)
2MB
1.5K SLoC
audiotags
这个crate使解析、转换和写入不同文件类型音频文件的元数据(也称为标签)变得更加容易。
这个crate旨在为不同音频文件格式的解析器和写入器提供统一的trait。这意味着您可以使用单个函数: Tag::default(). read_from_path()
在mp3、flac和m4a文件中解析标签,并通过直接调用其结果上的 .album()
,.artist()
来获取字段。如果没有这个crate,您将需要学习在不同文件格式中解析元数据的 id3,mp4ameta 等 API。
性能
如果您想猜测元数据格式(从文件扩展名),则使用 audiotags 会有一些开销,因为需要vtables。除此之外,性能几乎与直接调用那些“专用”crate提供的函数相同。
如果您只需读取和写入一个格式的元数据,则不会进行复制。如果您想在不同标签之间转换,则无论使用 audiotags 还是使用专用库提供的获取器和设置器,复制都是不可避免的。但 audiotags 不会进行不必要的额外复制。
支持格式
文件格式 | 元数据格式 | 后端 |
---|---|---|
mp3 |
id3v2.4 | id3 |
m4a/mp4/... |
MPEG-4音频元数据 | mp4ameta |
flac |
Vorbis注释 | metaflac |
示例
请阅读 手册 以了解一些示例,但这里有一个快速示例
fn main() {
// using `default()` or `new()` alone so that the metadata format is
// guessed (from the file extension) (in this case, Id3v2 tag is read)
let mut tag = Tag::new().read_from_path(MP3_FILE).unwrap();
tag.set_title("foo title");
assert_eq!(tag.title(), Some("foo title"));
tag.remove_title();
assert!(tag.title().is_none());
tag.remove_title();
// trying to remove a field that's already empty won't hurt
let cover = Picture {
mime_type: MimeType::Jpeg,
data: &vec![0u8; 10],
};
tag.set_album_cover(cover.clone());
assert_eq!(tag.album_cover(), Some(cover));
tag.remove_album_cover();
assert!(tag.album_cover().is_none());
tag.remove_album_cover();
tag.write_to_path(MP3_FILE).expect("Fail to save");
}
许可证:MIT
依赖项
~2.5MB
~39K SLoC