プロジェクト

全般

プロフィール

機能 #354

完了

機能 #342: [Phase 2] リアルタイム音声エンジン(ferrhythm-audio)

WASAPI/ASIO デバイス出力バックエンド

機能 #354: WASAPI/ASIO デバイス出力バックエンド

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

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

100%

予定工数:

説明

目的

ミキサの sink を実デバイスに接続。WASAPI 排他・イベント駆動を基本とし、対応ハードは ASIO も選択可能に。

スコープ

  • windows-rs で WASAPI 排他・イベント駆動出力
  • asio-sys で ASIO 出力(任意)
  • #[cfg(windows)] 背後に隔離

検証(Windows ホスト)

実デバイスでの発音・連続性をホストで確認

担当

Codex 委譲(source-only)、ホスト検証はユーザー


関連するチケット 2 (0件未完了2件完了)

関連している Ferrhythm - 機能 #372: ferrhythm-audio: ASIO 出力バックエンド実装(asio-sys)完了いづ さん2026/06/22

操作
関連している Ferrhythm - リファクタ #373: ferrhythm-audio: WASAPI 出力バックエンドの follow-up(COM uninit・RT診断ログ)完了いづ さん2026/06/22

操作

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

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

実装に着手しました。

  • ブランチ: feature/354-wasapi-asio-output
  • 対応方針: 出力バックエンドを trait(OutputBackend/RunningOutput)で抽象化し、#[cfg(windows)] の WASAPI 排他・イベント駆動出力(専用 Pro Audio スレッドが AudioEngine を駆動)を実装。排他不可時は共有モードへ自動フォールバック、既定エンドポイントのみ対応、IAudioClock でサンプルクロックのドリフト照合。ASIO は asio feature ゲートの seam(stub)のみ用意し実装は後続チケットへ分離。

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

  • 関連している 機能 #372: ferrhythm-audio: ASIO 出力バックエンド実装(asio-sys) を追加

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

  • 関連している リファクタ #373: ferrhythm-audio: WASAPI 出力バックエンドの follow-up(COM uninit・RT診断ログ) を追加

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

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

対応が完了しました。

概要

RT ミキサ(#353)の出力を実デバイスへ接続。プラットフォーム非依存の出力バックエンド trait seam(OutputBackend/RunningOutput)を導入し、Windows で WASAPI 排他・イベント駆動出力(既定エンドポイント)を実装。排他不可時は共有イベント駆動モードへ自動フォールバックする。

変更点

  • device.rs(新規・非依存): OutputBackend/RunningOutput trait、OutputConfig/ShareModePref/DeviceFormat/AudioError、純ヘルパ convert(f32/i16 書込・HNS 換算、Linux テスト)。
  • wasapi.rs(新規・#[cfg(windows)]: 専用「Pro Audio」スレッドが AudioEngine を所有しイベント毎に engine.render を駆動。フォーマット交渉(float32→pcm16)・アラインリトライ・共有時 GetMixFormat・preroll・IAudioClock ドリフト照合。
  • asio.rs(新規・#[cfg(feature="asio")]: Unsupported を返す seam stub(実装本体は #372 へ分離)。
  • examples/wasapi_play.rs(新規・Windows 限定): 実機検証ハーネス。
  • Cargo.tomlasio feature・Windows 限定 windows 0.58)/ lib.rs(モジュール・再エクスポート・ドキュメント)/ Cargo.lock
  • 変更ファイル: crates/ferrhythm-audio/src/{device,wasapi,asio,lib}.rsexamples/wasapi_play.rsCargo.toml ほか計 7 件。

テスト

  • cargo test --locked(workspace 全体): 成功(ferrhythm-audio 31 件、うち新規 device 6 件。全クレート緑)
  • cargo clippy --all-targets --locked -- -D warnings / cargo fmt --all -- --check: 成功
  • Windows FFI 型検査: cargo check/cargo clippy --all-features--target x86_64-pc-windows-gnu)成功
  • Windows ホスト実機検証(ユーザー): 3 パターン(排他クリック・排他 WAV・共有 WAV)すべて正常。排他=48000Hz/16bit/128frames(2.667ms)、共有フォールバック=32bit float/1056frames(22ms)/exclusive=false を確認。発音・連続性 OK、sample-clock drift ログなし(サンプルクロック同期成立)、クリーン終了。

関連 MR

  • !14 (feature/354-wasapi-asio-output → develop、マージ済み)

残課題 / 分離チケット

  • #372: ASIO 出力バックエンド実装(asio-sys、trait seam に実装を追加)
  • #373: WASAPI follow-up(CoUninitialize 未呼出し・RT 診断ログの整理、非ブロッカー)

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