A Python library and command-line tool to parse Simai chart files into JSON.
Project description
Read this document in English (阅读英文版)
PySimaiParser:Python Simai 谱面解析器
PySimaiParser 是一个 Python 库和命令行工具,用于解析某些音乐游戏中使用的 Simai 谱面文件(通常是 maidata.txt 或类似格式)。它将谱面数据,包括元数据和详细的音符信息,转换为结构化的 JSON 格式。这使得谱面数据更易于分析、处理或集成到其他应用程序和工具中。
特性
- 全面的元数据解析: 提取谱面的关键信息,如标题 (
&title)、艺术家 (&artist)、谱师 (&des)、初始偏移时间 (&first) 和难度等级 (&lv_x)。 - 详细的谱面数据解析:
- 处理 BPM 变化
(value)。 - 处理节拍记号变化
{value}。 - 解析变速调整
<Hvalue>或<HS*value>。 - 基于以上参数精确计算音符时间。
- 处理 BPM 变化
- 精细的音符解释:
- 支持所有标准 Simai 音符类型:TAP、HOLD、SLIDE (支持
-,^,v,<,>,V,p,q,s,z,w等多种路径记号)、TOUCH (A-E, C) 和 TOUCH_HOLD。 - 解析复杂的音符修饰符和标志:BREAK 音符 (
b)、EX 音符 (x)、烟花效果 (f)、无头滑条 (!,?)、强制星星显示 ($) 和伪旋转效果 ($$)。 - 解释复杂的 HOLD/SLIDE 时值和 SLIDE 星星等待时间语法 (例如
[拍号分母:拍数]、[BPM#拍号分母:拍数]、[#绝对秒数]以及[等待BPM#...]、[绝对等待秒数##持续秒数])。 - 正确处理通过
/分隔的同时音符、使用*的同头滑条以及使用 ``` 的伪同时音符(装饰音)。
- 支持所有标准 Simai 音符类型:TAP、HOLD、SLIDE (支持
- 结构化 JSON 输出: 生成组织良好且易读的 JSON 对象,代表整个解析后的谱面,适合直接使用或进一步处理。
- 命令行接口 (CLI): 提供简单易用的命令行工具 (
cli.py),用于快速将 Simai 谱面文件转换为 JSON,并可指定输出文件和缩进。 - Python 包: 设计为 Python 包 (
SimaiParser),方便集成到其他 Python 项目中。
项目结构
PySimaiParser/
├── SimaiParser/
│ ├── __init__.py
│ ├── core.py # 包含 SimaiChart 和解析器核心逻辑
│ ├── note.py # 包含 SimaiNote 音符数据类
│ └── timing.py # 包含 SimaiTimingPoint 时间点类
├── tests/ # 单元测试
│ ├── __init__.py
│ └── test_core.py # core.py 的测试文件
├── cli.py # 命令行接口脚本
├── LICENSE.txt # LICENSE 文件
├── README_en.md # 英文版 README
└── README.md # 中文版 README (本文档)
安装
-
使用 pip 安装 (推荐):
# 从 GitHub 直接安装 pip install git+https://github.com/Choimoe/PySimaiParser.git # 或者 clone 后本地安装 git clone https://github.com/Choimoe/PySimaiParser.git cd PySimaiParser pip install .
-
验证安装:
pysimaiparser-cli --version # 应该输出 0.1.0
建议在虚拟环境中安装:
python -m venv venv
source venv/bin/activate # Windows 系统: venv\Scripts\activate
pip install .
使用方法
作为 Python 库
from SimaiParser import SimaiChart
simai_file_content = """
&title=示例歌曲
&artist=某艺术家
&first=1.0
&lv_4=12
&inote_4=
(120)
1,2,
E1h[4:1],
"""
chart = SimaiChart()
chart.load_from_text(simai_file_content)
json_data = chart.to_json(indent=2)
print(json_data)
# 访问解析后的数据
# print(chart.metadata["title"])
# if chart.processed_fumens_data and chart.processed_fumens_data[3]["note_events"]:
# first_note_time = chart.processed_fumens_data[3]["note_events"][0]["time"]
# print(f"Expert 难度谱面的第一个音符时间: {first_note_time}")
作为命令行工具
cli.py 脚本允许您直接从终端解析 Simai 文件。
-
导航到
cli.py所在的目录。 -
运行脚本:
-
解析文件并将 JSON 打印到控制台:
python cli.py path/to/your/chart.txt -
解析文件并将 JSON 保存到输出文件:
python cli.py path/to/your/chart.txt -o path/to/output.json -
指定 JSON 缩进 (例如, 4个空格):
python cli.py path/to/your/chart.txt -i 4 -
获取紧凑的 JSON 输出 (无额外空格的单行):
python cli.py path/to/your/chart.txt -i -1 -
查看帮助信息:
python cli.py -h -
查看版本号:
python cli.py --version
-
运行测试
单元测试位于 tests/ 目录中,并使用 Python 内置的 unittest 模块。
-
导航到项目根目录 (
PySimaiParser/)。 -
运行测试:
python -m unittest discover tests或者,运行特定的测试文件:
python -m unittest tests.test_core
贡献
欢迎参与贡献!如果您想为项目做出贡献,请考虑以下几点:
- Fork 本仓库。
- 为您的新功能或错误修复创建一个新的分支。
- 为您的更改编写测试。
- 确保所有测试都通过。
- 提交一个 Pull Request,并清晰描述您的更改。
许可证
本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pysimaiparser-0.2.3.tar.gz.
File metadata
- Download URL: pysimaiparser-0.2.3.tar.gz
- Upload date:
- Size: 31.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fefe403956a44a12a21528e59ffe87414f20e636fa09cd3e276d69d5e6856070
|
|
| MD5 |
33cd62c6db6949638c70c4ed24699899
|
|
| BLAKE2b-256 |
6d25bf0fa6142d7a619248295afbe03ee2d6441479d3a0fa850da629ed2d29a7
|
File details
Details for the file pysimaiparser-0.2.3-py3-none-any.whl.
File metadata
- Download URL: pysimaiparser-0.2.3-py3-none-any.whl
- Upload date:
- Size: 31.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dcfb76182b269f76290de46c8b6bba08a21b99680bf5f44ea4bf8f46267f638
|
|
| MD5 |
97a6bd73c67e0267729f973e3025d8fc
|
|
| BLAKE2b-256 |
d5c01a83af849a71218cbc2e6429d0cdeb21c5539a9c1a885410fff75223efde
|