操作
調査 #341
完了[Phase 1b] 音声レイテンシ実測スパイク(WASAPI 排他+自前ミキサ)
調査 #341:
[Phase 1b] 音声レイテンシ実測スパイク(WASAPI 排他+自前ミキサ)
エージェント ちゃん さんが15日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/341-audio-latency-spike - 対応方針: WASAPI 排他・イベント駆動出力+自前ロックフリーミキサ+symphonia デコードの使い捨てスパイクを workspace 外の独立クレート
spikes/audio-latency/として隔離。サンプルクロックを唯一の時刻源とし、キーボード Raw Input+専コン/ゲームパッド(hidapi/gilrs)入力からの「入力→発音」遅延を実測値として報告(閾値判定なし)。実測はユーザーが Windows ホストで実施。
エージェント ちゃん さんが14日前に更新
調査結果 : WASAPI排他+自前ミキサで音声往復遅延は一桁ms、アーキ核が実機で成立¶
使い捨てスパイク(spikes/audio-latency/)を Windows ホストで実測。
デバイス(WASAPI 排他・イベント駆動 / 48000Hz・16bit・stereo)
- 最小周期 2.667ms(128フレーム)= GetStreamLatency 2.667ms(一桁ms下限)
入力→発音予約(ソフト側 / n=39)
- mean 1.115ms / min 0.014ms / max 2.454ms(最大でも1バッファ周期 2.667ms 未満)
- ばらつきはレンダー起床周期への量子化で、判定は入力QPCを直接使うため判定精度には非影響
サンプルクロック健全性
- RenderClock と IAudioClock のドリフトログ 0件 → 「サンプルクロック=唯一の時刻源」成立
入力・デコード
- キーボード(Raw Input)・ゲームパッド(gilrs) 両経路で発火
- キー音は synth click + 実BMS WAV(symphonia)両方で発音
結論: ソフト→デバイス出力経路 ≈ 平均3.8ms/最悪5.1ms(アナログ尾・パッドHW遅延除く)。最大リスクの音声往復遅延を retire し、Phase 2(RTミキサ本実装)へ進行可。
未計測(任意): 鍵盤→耳の真の音響往復(電気ループバック/マイク実測)、専コン自体のUSB遅延。アーキ判断には不要。
実装・検証メモ
- 配置:
spikes/audio-latency/(独自[workspace]・root workspace/CI から完全隔離・使い捨て) - コンテナ検証: 純DSPコア(clock/mixer/decode/report)
cargo test17/17・clippy/fmt 緑、cargo check --target x86_64-pc-windows-gnuエラー0(Windowsネイティブ FFI の型検査をコンテナで実施) - 実機検証: 排他モード許可後、上記の通り正常動作・サマリ取得
エージェント ちゃん さんが14日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
最大リスクの「入力→発音」音声往復遅延を早期に検証する使い捨てスパイク(Phase 1b)。WASAPI 排他・イベント駆動出力+自前ロックフリーミキサ+symphonia デコードで実測し、アーキ核「オーディオサンプルクロック=唯一の時刻源」が実機で成立することを確認。
変更点¶
-
spikes/audio-latency/に独立クレートを新設(独自[workspace]・root workspace / CI から完全隔離・使い捨て)。 - 純DSPコア(Linuxテスト可):
clock/mixer/decode/report/command。 - Windows専用(ホスト検証):
wasapi(排他イベント駆動初期化・float32/PCM16交渉・バッファアライメント再試行・サンプルクロック駆動レンダーループ・IAudioClockドリフト照合)/rawinput(Raw Input・Spaceエッジ/Esc終了)/controller(gilrs ゲームパッド/専コン+optional hidapi)。 - 変更ファイル:
spikes/audio-latency/配下 13 件(Cargo.toml/.lock/README/.gitignore + src 9)。 - 本スパイクは Phase 2(RTミキサ)の参照用に当面残置(削除は後日判断)。
テスト¶
-
cargo test(純モジュール, コンテナ) : 成功(17/17) -
cargo clippy/cargo fmt --all -- --check: 成功(warning 0) -
cargo check --target x86_64-pc-windows-gnu: 成功(エラー0) - 実機(Windowsホスト): 排他イベント駆動 48000Hz/16bit・最小周期 2.667ms・入力→予約 mean 1.115ms(n=39)・ドリフト0件・キーボード/パッド両発火・synth+実BMS WAV 発音を確認。
関連 MR¶
- !12 (feature/341-audio-latency-spike → develop, マージ済)
操作