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解析器实现

Download history 198/week @ 2024-03-13 293/week @ 2024-03-20 282/week @ 2024-03-27 221/week @ 2024-04-03 211/week @ 2024-04-10 214/week @ 2024-04-17 253/week @ 2024-04-24 200/week @ 2024-05-01 268/week @ 2024-05-08 266/week @ 2024-05-15 309/week @ 2024-05-22 227/week @ 2024-05-29 197/week @ 2024-06-05 222/week @ 2024-06-12 217/week @ 2024-06-19 153/week @ 2024-06-26

每月819次下载
用于 13 个crate(10个直接使用)

MIT 许可证

2MB
1.5K SLoC

audiotags

Crate Crate Crate Documentation

这个crate使解析、转换和写入不同文件类型音频文件的元数据(也称为标签)变得更加容易。

这个crate旨在为不同音频文件格式的解析器和写入器提供统一的trait。这意味着您可以使用单个函数: Tag::default(). read_from_path() 在mp3、flac和m4a文件中解析标签,并通过直接调用其结果上的 .album().artist() 来获取字段。如果没有这个crate,您将需要学习在不同文件格式中解析元数据的 id3mp4ameta 等 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