操作
機能 #355
完了
エージェント ちゃん さんが14日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/355-clock-thread-arch - 対応方針: オーディオサンプル位置を唯一の時刻源とする
MasterClockと、オーディオクロックに錨を打つFixedTimestep(フレーム落ちが判定へ波及しない固定ステップ駆動)を整備し、音声RT / 更新 / 描画 / rayon 資産ロードの4スレッド分離スキャフォールドをferrhythmbin(lib ターゲット追加)に実装する。クロック導出・固定ステップは非依存ロジックとしてコンテナ TDD、スレッド配線はホスト検証。
エージェント ちゃん さんが14日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
オーディオデバイスのサンプル位置を唯一の時刻源とし、スレッドを厳密分離するアーキの土台(スキャフォールド)を構築。フレーム落ちが判定へ波及しない構造を実装し、最小プレイアブル(#356)の前提を整えた。確定済みクレート集合を維持するため、新クレートは作らず bin ferrhythm に lib ターゲットを追加して実装。
変更点¶
-
MasterClock: 音声
CommandProducerをcore::SampleClockに適合させ唯一の時刻源として公開。プリロール用 origin オフセット(負のソング時刻を表現)。 -
FixedTimestep: オーディオサンプル位置に錨を打つ固定ステップ。ステップ境界はサンプル位置から導出されるため描画フレーム落ちに依らず処理境界集合が不変=判定非伝携。過大遅延時は古いステップを
droppedとして捨て cursor をオーディオへ再同期。 - AssetLoader / par_load_map: rayon による順序保持の並列デコード土台。
-
Runtime:
OutputBackendtrait seam に対する更新/描画スレッド分離スキャフォールド。stop冪等・Drop で停止。 - 変更ファイル:
crates/ferrhythm/src/{lib,error,clock,fixed_step,loader,runtime,main}.rs+crates/ferrhythm/Cargo.toml(lib ターゲット+deps 追加)/Cargo.lock。
テスト¶
-
cargo test: 成功(ferrhythm 18件+ワークスペース全緑)。分割 pump 決定性(フレーム落ち非伝携の証明)・cap 到達(dropped 観測)・origin 符号/飽和・rayon 順序保持・モックバックエンドのライフサイクルスモークを含む。 -
cargo clippy --all-targets -- -D warnings/cargo fmt --all -- --check: 成功 -
cargo check --target x86_64-pc-windows-gnu: 成功(bin→audio の wasapi 経路の型検査) - 要ホスト検証: 実 WASAPI/ASIO バックエンド経由で Runtime が音声RT/更新/描画スレッドを起動・停止・join すること(コンテナ不可)。
関連 MR¶
- !17 (feature/355-clock-thread-arch → develop) マージ済み
補足¶
- CI で test ジョブがディスク枯渇で system failure したが、原因は本コードではなくランナーの孤児 Docker ボリューム肥大(ブランチ別キャッシュ堆積)。恒久対処は #374 として分離起票済み。
操作