操作
機能 #356
完了機能 #343: [Phase 3] クロック/並行モデルと最小プレイアブル
最小プレイアブル(譜面ロード→キー音予約→判定)
機能 #356:
最小プレイアブル(譜面ロード→キー音予約→判定)
エージェント ちゃん さんが15日前に追加. 14日前に更新.
エージェント ちゃん さんが14日前に更新
操作
#1
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/356-minimal-playable - 対応方針: #355 のクロック/スレッド分離スカフォルド上に、譜面ロード→キー音サンプル予約→入力を判定窓で評価→スコア/ゲージ/ランプ集計、という最小プレイループのプラットフォーム非依存ロジック核を
ferrhythmクレートに実装する(実機オーディオ/Raw Input/対話描画は Windows ホスト検証)。
設計方針 : スコープ確定事項¶
-
対象モード: 7K / 14K(判定窓が提供される範囲)。他モードは
UnsupportedKeyMode。 - 判定対象: 通常ノート+LN(頭+リリース)をフル判定。
-
地雷(MINE): 衝突検出は gameplay 層でフル実装し、被弾数・即死フラグをリザルトに記録。体力ゲージへの数値ダメージは保留(
ferrhythm-scoreは無改変。地雷ダメージ数値モデルは後続チケットで確定)。 -
成果物: ヘッドレスなロジック核(
PlaySession:入力イベント列+クロックtick → 判定 → スコア/ゲージ/ランプ)。実機デバイス/対話ループ/コンソール表示の結線は Windows ホスト検証へ委譲。
エージェント ちゃん さんが14日前に更新
操作
#2
進捗 : コンソール・プレイ・ハーネスを追加(グラフィック無しでホスト検証可能に)¶
ロジック核に加え、チケットの「描画は Phase 4 前なのでコンソール/最小表示で可」に沿って、グラフィック無しで Windows ホストで実機検証できるコンソール・ハーネスを追加した。
-
PlaySessionをサンプルレート設定可能化(PlayConfig.sample_rate、既定48kHz)。デバイスが非48kHzでも判定が狂わない。 -
crates/ferrhythm/src/harness.rs(新規・プラットフォーム非依存・テスト有): 引数解析(譜面パス /--shared--exclusive/--gauge/--gain)、7K の VK→Lane マッピング。 -
crates/ferrhythm/src/main.rs:#[cfg(windows)]でコンソール・ハーネス本体(WASAPI 起動 → キー音バンクデコード → BGM を1秒プリロールで予約 → Raw Input(message-only window) で押下/離鍵をタイムスタンプ付き取得→レーン判定→押下時キー音即時発音→判定をライブ表示→ESCでPlayResult表示)。非Windowsはスタブ。
ホスト実行(要グラフィック無し):
cargo run -p ferrhythm --release -- C:\path\to\song.bms
cargo run -p ferrhythm --release -- C:\path\to\song.bms --shared --gauge easy --gain 0.8
7K キー割当: スクラッチ=A、鍵1..7 = S D F Space J K L、終了=ESC。
検証状況: コンテナ(Linux)で cargo fmt/clippy/test(43件)すべて green、Linuxスタブビルド成功。#[cfg(windows)] ハーネス本体はコンテナでコンパイルされないため、Windows ホストでの cargo build と実機での音/判定/レイテンシ確認はユーザー検証が必要。
簡略化(将来課題): 入力タイムスタンプは song 位置で代用(精密な QPC→sample 相関は後続)、キー音発音は更新スレッド経由(poll間隔ぶんの追加レイテンシ)、終了はESCのみ(譜面終端検出は省略)、exclusive 48kHz 推奨。
エージェント ちゃん さんが14日前に更新
操作
#3
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
#355 のクロック/スレッド分離スカフォルド上に、譜面ロード→キー音サンプル予約 / キー入力→判定窓評価→スコア/ゲージ/クリアランプ集計、という最小プレイループのプラットフォーム非依存ロジック核を実装。あわせて、グラフィック未実装でも Windows ホストで実機検証できるコンソール・プレイ・ハーネスを追加した。
変更点¶
-
ferrhythm-input: タイムスタンプ付き
InputEvent(coreLaneへの Press/Release +SamplePosition)を追加。 -
ferrhythm (gameplay):
timing_map_from_chart(chart→TimingMap)、KeysoundBank/build_bgm_schedule/push_schedule/decode_keysound_bank(BGM をサンプル位置へ予約)、PlaySession(レーン別判定ステートマシン:フル LN=頭/尾の悪い方で確定・早離し崩れ Poor・未リリース尾の自動 Poor、地雷衝突検出=被弾数/即死フラグ記録でゲージ無作用、後期窓自動ミス、空押し時の次ノートキー音返却、7K/14K のみ)、PlayConfig.sample_rate(デバイスレート追従)、crate::Error拡張。 -
コンソール・ハーネス:
harness.rs(引数解析・7K VK→Lane、プラットフォーム非依存・テスト有)+main.rsの#[cfg(windows)]本体(WASAPI 起動→キー音デコード→BGM を1秒プリロールで予約→Raw Input 判定→押下時キー音即時発音→判定ライブ表示→ESC でPlayResult)。windows = 0.58(Win32_Graphics_Gdi含む)を Windows 専用依存に追加。 - 変更/新規ファイル:
crates/ferrhythm/src/gameplay/{mod,timing,schedule,session}.rs,crates/ferrhythm/src/{harness,main,lib,error}.rs,crates/ferrhythm/Cargo.toml,crates/ferrhythm-input/src/{event,lib}.rs,crates/ferrhythm-input/Cargo.tomlほか(計13ファイル前後)。
テスト¶
-
cargo test(全ワークスペース): 成功(ferrhythm は 43 件。判定各バンド境界・空押し・自動ミス・LN 頭/尾/崩れ/自動ミス・地雷被弾/即死/非被弾・7K での P2 除外・非対応モード・end-to-end・サンプルレート設定・引数解析・VK→Lane など) -
cargo clippy --all-targets/cargo fmt --all -- --check: 成功(警告0) - Windows ホストでハーネスのビルド+実機動作を確認済み(ユーザー検証)。
関連 MR¶
- !19 (feature/356-minimal-playable → develop) — マージ済み
残課題 / 補足¶
- 地雷ダメージのゲージ数値モデル、
BmsonPercent→判定ランクの確定マッピング、キー音の拡張子フォールバック(.wav↔.ogg)、入力タイムスタンプの QPC→sample 精密相関、キー音の低遅延発音経路、ハーネスの譜面終端検出 は後続課題。
操作