操作
機能 #353
完了機能 #342: [Phase 2] リアルタイム音声エンジン(ferrhythm-audio)
リアルタイムミキサ本体(mock sink でテスト)
機能 #353:
リアルタイムミキサ本体(mock sink でテスト)
エージェント ちゃん さんが14日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/353-rt-mixer - 対応方針:
ferrhythm-audioにコールバック内で無確保・無ロック・無 syscall の RT ミキサ本体を実装。サンプル単位スケジューリング・crossbeam ロックフリーキュー・Sink trait 抽象化を入れ、mock sink で TDD 検証する。WASAPI/ASIO 実体は #354 に分離。
エージェント ちゃん さんが14日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
Phase 2 音声エンジンのコアとして、コールバック内で無確保・無ロック・無 syscall のプラットフォーム非依存・コンテナ検証可能な RT ミキサ本体を ferrhythm-audio に実装。サンプル単位スケジューリング・crossbeam ロックフリーキュー・Sink trait 抽象化を備え、mock sink で TDD 検証。WASAPI/ASIO 実体出力は #354 に分離。
変更点¶
-
DecodedSound(f32 PCM メモリ常駐キー音)と symphonia デコード(線形リサンプル、rubato は TODO で先送り) -
Mixer: ボイス毎の絶対開始フレームによるサンプル単位スケジューリング、加算 + クランプ、ポリフォニー上限(最古追い出し)。ボイス領域をプリアロケートしレンダリング経路で再確保しない -
AudioEngine::render(ロックフリーキュー drain → ミックス)、CommandProducer+ 共有RenderClock、Sinktrait +MockSink - BMS の高同時発音要件に合わせ
EngineConfigデフォルトを 384 voices / 128 frames に設定 - 依存追加:
crossbeam-queue・symphonia - 変更ファイル:
crates/ferrhythm-audio/src/{lib,sound,decode,clock,command,mixer,sink,engine}.rs、crates/ferrhythm-audio/Cargo.toml、ルートCargo.tomlほか計 11 件
テスト¶
-
cargo test -p ferrhythm-audio: 成功(25 passed / 0 failed) -
cargo clippy -p ferrhythm-audio --all-targets/cargo fmt --all -- --check: 成功(警告・差分なし) -
cargo check --workspace: 成功
関連 MR¶
- !13 (feature/353-rt-mixer → develop)
操作