2 releases
Uses new Rust 2024
new 0.1.1 | Mar 13, 2025 |
---|---|
0.1.0 | Mar 12, 2025 |
#55 in Games
46 downloads per month
55KB
1K
SLoC
OsynicSerializer 🎵
Rust编写的osu!谱面序列化工具,基于osynic_osudb开发
osynic_serializer 是一款高效的osu!谱面序列化工具,基于osynic_osudb开发,支持FOLDER、OSUDB两种序列化算法。
推荐搭配osynic_downloader使用,可实现osu!谱面的快速序列化与多设备谱面同步。
✨ 特性
- 双模式序列化:支持直接序列化Songs目录或osu!.db文件
- 多输出格式:支持序列化为sets或songs两种json格式
- 高效迅速:速度极快,5000+谱面序列化完成仅需0.6s
- 差量过滤:支持差量过滤,对比序列化结果与已有json文件,仅输出本地缺失谱面
📦 安装
预编译版本
cargo install osynic_serializer
源码编译
git clone https://github.com/osynicite/osynic_serializer
cd osynic_serializer
cargo build --release
🚀 快速开始
基本使用
# 直接序列化Songs文件夹到songs.json
osynic-sl -t songs -o ./songs
# 直接序列化osu!.db文件到sets.json
osynic-sl -t sets -p D:\\ProgramUnsigned\\Games\\OSU -o ./songs
# Diff序列化Songs文件夹,输出diffSets.json相较于本地多出来的谱面
osynic-sl -t sets -d json/diffSets.json -o ./songs
# Diff序列化osu!.db文件,输出diffSongs.json相较于本地多出来的谱面
osynic-sl -t songs -p D:\\ProgramUnsigned\\Games\\OSU -d json/diffSongs.json -o ./songs
⚙️ 参数详解
参数 | 简写 | 默认值 | 说明 |
---|---|---|---|
--algorithm | -a | OSUDB | osu!谱面序列化算法 |
--json-type | -t | songs | json输出格式 |
--path | -p | osu!默认安装目录 | osu!安装目录(或者 包含 Songs文件夹 或 osu!.db 的文件夹) |
--diff | -d | - | 差量过滤文件地址( 文件的 json-type 需要保持一致) |
--output | -o | songs | json存储目录(自动创建) |
--help | -h | - | 显示帮助信息 |
支持的序列化算法
- FOLDER:基于Songs文件夹序列化,从谱面文件夹名以及.osu文件中提取元数据,文件夹名不完整时可能存在不准确的情况
- OSUDB:基于osu!.db文件序列化,最准确的序列化方式
输出JSON示例
sets.json(sets模式):
{
"beatmapset_ids": ["114514", "1919810", "1538879"]
}
songs.json(songs模式)(Osynic):
[
{
"song_id": 1985060,
"artist_name": "ヒトリエ",
"mapper_name": "flake",
"song_name": "日常と地球の額縁 (wowaka x 初音ミク Edit)",
"no_video": false
},
{
"song_id": 1997071,
"artist_name": "ナブナ",
"mapper_name": "Ryuusei Aika",
"song_name": "始発とカフカ",
"no_video": false
}
]
📌 注意事项
- osu!安装目录:请确保osu!安装目录下存在Songs文件夹或osu!.db文件,如果osu!安装目录不在默认位置,请使用
--path
参数指定 - 差量过滤:差量过滤功能需要提供一个已有的json文件,用于对比序列化结果,仅输出本地缺失的谱面
🆗 作为库来使用
首先在你的Cargo.toml
中添加依赖:
[dependencies]
osynic_serializer = {version="0.1.0",default-features = false, features = ["cli"]}
最上层的方法都已位于osynic_serializer::commands
模块中,所需类型均位于osynic_serializer::types
模块中,而osynic_serializer::functions
模块则是略底层的函数。
// 传入osu_dir,序列化Songs文件夹,得到Vec<SongWithMapper>
use osynic_serializer::commands::serialize_by_folder;
// 传入osu_dir,序列化osu!.db文件,得到Vec<SongWithMapper>
use osynic_serializer::commands::serialize_by_osudb;
// 对比新的Beatmapsets和已有的Beatmapsets,得到差量后的Beatmapsets
use osynic_serializer::commands::diff_sets;
// 对比新的SongsWithMapper和已有的SongsWithMapper,得到差量后的SongsWithMapper
use osynic_serializer::commands::diff_songs;
此外, osynic_osudb 也已经重导出,可以直接通过本库引用:
use osynic_serializer::osynic_osudb::*;
🤝 贡献指南
这个库是差不多一个下午写完的,所以肯定还有很多地方需要改进,只是简单的把osynic_core
里面的序列化功能拎出来了,很多地方还很生硬,但我暂时也懒得改了,更待良辰吉日改之
所以,如果代码有任何问题,或者你有任何建议,欢迎提交PR或者Issue,我会尽快处理~
如果你想贡献代码,请遵循以下规则:
- 遵循Rust官方编码规范
- 新增功能需附带测试用例
- 提交前运行
cargo fmt
和cargo clippy
📜 开源协议
本项目基于 MIT License 开源,请尊重原作者的著作权。使用osu!相关资源时请遵守osu!社区准则。
Dependencies
~2.4–4MB
~80K SLoC