#tags #dj #parser #database #serato

已撤回 seratodj

用于解析Serato DJ的元数据和数据库的库

0.0.1 2021年1月31日

#9 in #dj

AGPL-3.0-or-later

91KB
2K SLoC

seratodj

Rust库,用于解析由Serato DJ软件编写的元数据和数据库文件。

注意:此库目前仍在积极开发中,未来可能会出现破坏性API更改。


lib.rs:

此库提供对由Serato DJ软件编写的元数据和库的访问。

元数据

Serato的格式相当复杂,并存储冗余数据,这可能导致数据相互矛盾的情况(例如,如果数据是手动编辑的)。

为了使访问元数据变得简单,此库提供了TagContainer结构体,它提供了对所有重要属性的访问,并实现了Serato DJ软件使用的相同冲突解决策略。

use seratodj::tag::{TagContainer, TagType};

fn parse_and_print_cues(markers_data: &[u8], markers2_data: &[u8]) {
    let mut tags = TagContainer::new();
    tags.parse_markers(markers_data, TagType::ID3).expect("Failed to parse Markers data!");
    tags.parse_markers2(markers2_data, TagType::ID3).expect("Failed to parse Markers2 data!");

    for cue in tags.cues() {
        println!("{:?}", cue);
    }
}

如果您更愿意自己解析标签数据表示,可以直接使用单个标签结构体

use seratodj::tag::{Markers, format::id3::ID3Tag};

fn parse_and_print_markers(data: &[u8]) {
    let markers = Markers::parse_id3(data).expect("Failed to parse data!");
    println!("{:?}", markers);
}

注意:此库不提供直接从音乐文件中读取元数据的手段,因此您需要使用其他库(例如 id3)来执行此操作。您可以在examples/目录中查看一些示例。

解析Serato库(例如,在_Serato_目录中的database V2文件)也是可能的,但由于此功能仍在开发中,API尚不稳定,未来可能会发生变化。

依赖项

~3MB
~66K SLoC