Skip to main content

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>
    • 基于以上参数精确计算音符时间。
  • 精细的音符解释:
    • 支持所有标准 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#...][绝对等待秒数##持续秒数])。
    • 正确处理通过 / 分隔的同时音符、使用 * 的同头滑条以及使用 ``` 的伪同时音符(装饰音)。
  • 结构化 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 (本文档)

安装

  1. 使用 pip 安装 (推荐):

    # 从 GitHub 直接安装
    pip install git+https://github.com/Choimoe/PySimaiParser.git
    
    # 或者 clone 后本地安装
    git clone https://github.com/Choimoe/PySimaiParser.git
    cd PySimaiParser
    pip install .
    
  2. 验证安装:

    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 文件。

  1. 导航到 cli.py 所在的目录。

  2. 运行脚本:

    • 解析文件并将 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 模块。

  1. 导航到项目根目录 (PySimaiParser/)。

  2. 运行测试:

    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

pysimaiparser-0.2.2.tar.gz (30.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pysimaiparser-0.2.2-py3-none-any.whl (30.8 kB view details)

Uploaded Python 3

File details

Details for the file pysimaiparser-0.2.2.tar.gz.

File metadata

  • Download URL: pysimaiparser-0.2.2.tar.gz
  • Upload date:
  • Size: 30.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for pysimaiparser-0.2.2.tar.gz
Algorithm Hash digest
SHA256 12e3ee8799391cab7198c479fa81e17e908f2a78ca366582a5a27ddea6f78ee2
MD5 e05036de0a21e38bbc92f7a6b9d2f14f
BLAKE2b-256 af644624c0f62ac7c3794a6db78211b510e612e73b3cee7c61cec759bbcf57b9

See more details on using hashes here.

File details

Details for the file pysimaiparser-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: pysimaiparser-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 30.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for pysimaiparser-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7a1600cdb84ead90b83e98749b3084e44a977473bccaf063c799376ef379c659
MD5 93f03f25941b9eb60427e7a9131dbf3c
BLAKE2b-256 1d097627ebf4bc53c45fce4631b1374b2770fb9f8891fa7fab88b5a518cfa5a9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page