プロジェクト

全般

プロフィール

機能 #350

完了

機能 #340: [Phase 1] 非依存コア(パーサ/スキンIR/DB/タイミング)

ferrhythm-chart: BMS/BME/BML/PMS パーサ+BMSON+正規化+ハッシュ

機能 #350: ferrhythm-chart: BMS/BME/BML/PMS パーサ+BMSON+正規化+ハッシュ

エージェント ちゃん さんが15日前に追加. 15日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/21
期日:
進捗率:

100%

予定工数:

説明

目的

譜面ファイルを内部譜面モデルへ正規化。

スコープ

  • BMS/BME/BML/PMS の自作テキストパーサ
  • BMSON は serde_json
  • バージョン/拡張差を内部譜面モデルへ正規化
  • 譜面ハッシュ md5/sha2

検証(コンテナ)

代表的な譜面サンプルで TDD、cargo test グリーン

担当

Codex 委譲(source-only)

エージェント ちゃん さんが15日前に更新 操作 #1

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

実装に着手しました。

  • ブランチ: feature/350-chart
  • 対応方針: BMS/BME/BML/PMS テキストパーサ+BMSON(serde_json)を自作し、内部譜面モデルへ正規化。譜面ハッシュは生ファイルバイト列の MD5/SHA-256(LR2/beatoraja IR 互換)。依存は ferrhythm-core のみ(タイミング情報は素データで公開し TimingMap 構築は上位層)。フル機能(可視/LN/地雷/不可視ノート・BGM・BPM/EXBPM/STOP・BGA レイヤメタ・#RANDOM/#IF 制御フロー)を対象。

エージェント ちゃん さんが15日前に更新 操作 #2

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

対応が完了しました。

概要

譜面ファイル(BMS/BME/BML/PMS テキスト+BMSON JSON)を単一の正規化内部譜面モデルへ変換する ferrhythm-chart クレートを新規実装(依存は ferrhythm-core のみ)。

変更点

  • 有理数ビート位置 BeatPos(f64 非依存の厳密順序)、Chart/ChartMeta/ChartTiming/Note/BgaTrack/ObjId 正規化型、KeyMode 推論
  • 譜面ハッシュ = 生ファイルバイト列の MD5 + SHA-256(LR2/beatoraja IR 互換)
  • UTF-8+Shift_JIS フォールバックデコード
  • BMS パーサ(0 基点小節・IIDX+PMS チャンネルマップ・インライン/EX BPM・STOP・BGM・BGA・LN・地雷・不可視ノート・#RANDOM/#IF 制御フロー)
  • BMSON v1.0 マッピング、タイミングは素データで公開し TimingMap 構築は上位層へ
  • workspace 依存に serde_json/md-5/sha2/encoding_rs 追加
  • 変更ファイル: crates/ferrhythm-chart/src/{pos,model,hash,encoding,bms,bmson,error,lib}.rsCargo.toml(root/crate)ほか計 11 件

テスト

  • cargo test : 成功(ferrhythm-chart default 26 / --features serde 27、workspace 全クレート緑)
  • cargo clippy --all-targets / cargo fmt --all -- --check : 成功(警告ゼロ)

関連 MR

  • !5 (feature/350-chart → develop)

他の形式にエクスポート: PDF Atom