プロジェクト

全般

プロフィール

機能 #349

完了

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

ferrhythm-timing: 判定窓・サンプルクロック導出計算

機能 #349: ferrhythm-timing: 判定窓・サンプルクロック導出計算

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

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

100%

予定工数:

説明

目的

サンプルクロックからノーツ位置と判定(PG/GR/GD/BD/PR 等)を導出する純関数群。音ゲーの生命線なので TDD 重点。

スコープ

  • 判定窓(ms)とサンプル位置の相互変換
  • BPM 変化/STOP を考慮した譜面時刻↔サンプル変換
  • 判定ランク判定関数

検証(コンテナ)

境界値テスト中心に TDD、cargo test グリーン

担当

Codex 委譲(source-only)

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

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

実装に着手しました。

  • ブランチ: feature/349-timing
  • 対応方針: サンプルクロックを唯一の時刻源とする純関数群(判定窓 ms↔サンプル相互変換、BPM変化/STOP考慮の譜面ビート↔時刻↔サンプル変換、LR2/beatoraja の正確な判定ランクテーブル)を ferrhythm-timing に TDD(境界値中心)で実装。

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

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

対応が完了しました。

概要

サンプルクロックを唯一の時刻源とする判定・タイミング計算の純関数群を ferrhythm-timing に実装。判定窓 ms⇔サンプル相互変換、BPM変化/STOP を考慮した拍↔時刻↔サンプル変換、判定ランク分類を提供。

変更点

  • judge: Judgement(PG/GR/GD/BD/PR)・JudgeRank(#RANK 5段)・Window/JudgeWindow(+frames)。判定は入れ子窓で分類(PG→GR→GD→BD→miss)。for_modeLR2(PG/GR/GD)+beatoraja(BAD/POOR) ハイブリッドを 7K/14K のみ提供(他は UnsupportedKeyMode)。VeryEasy=Easy×1.25 外挿、BAD ランドスケール/POOR 固定、スクラッチ=通常ノーツ同窓。to_frames/judge_samples で ms⇔サンプル変換。
  • timing_map: Beat/TimingEvent/TimingMap。BPM変化・STOP(同拍は BPM変化→STOP 順)対応の beat↔time↔sample 変換、負拍外挿、入力検証。
  • error: ローカル TimingError/Result(core は無変更)。optional serde フィーチャ追加。
  • 変更ファイル: crates/ferrhythm-timing/src/{judge,timing_map,error,lib}.rsCargo.toml ほか

テスト

  • cargo test --workspace : 成功(timing: default 16 / serde 17、他クレート回帰なし)
  • cargo clippy --workspace --all-targets / cargo fmt --all -- --check : 成功

関連 MR

  • !4 (feature/349-timing → develop) マージ済み

残課題 / 補足

  • ゲージ/スコア/クリアランプの純ロジックは新設 #365 で対応予定。

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