tympan-apo 0.1.0

Rust framework for Windows Audio Processing Objects (APOs)
Documentation
# 参考資料


*他の言語で読む: [English](../references.md).*

設計時に参照した資料。

## Microsoft 公式ドキュメント


### APO の中核ドキュメント


- **Audio Processing Object Architecture**
  - <https://learn.microsoft.com/en-us/windows-hardware/drivers/audio/audio-processing-object-architecture>
  - SFX / MFX / EFX のカテゴリ、ライフサイクル、スレッディング
- **Implementing Audio Processing Objects**
  - <https://learn.microsoft.com/en-us/windows-hardware/drivers/audio/implementing-audio-processing-objects>
  - 必須インターフェース、ベースクラスの使い方、INF 登録
- **Audio Signal Processing Modes**
  - <https://learn.microsoft.com/en-us/windows-hardware/drivers/audio/audio-signal-processing-modes>
  - APO とオーディオエンジンの処理モードの連携
- **Deep Noise Suppression**
  - <https://learn.microsoft.com/en-us/windows-hardware/drivers/audio/audio-signal-processing-modes#deep-noise-suppression>
  - AI ベースのノイズサプレッションのための Windows 11 24H2 システム
    エフェクト

### Windows 11 AEC APO API


- **Windows 11 APIs for Audio Processing Objects**
  - <https://learn.microsoft.com/en-us/windows-hardware/drivers/audio/windows-11-apis-for-audio-processing-objects>
  - `IApoAcousticEchoCancellation`, `IApoAcousticEchoCancellation2`,
    `IApoAuxiliaryInputConfiguration`, `IApoAuxiliaryInputRT`
- **AEC リファレンスストリーム用 WASAPI loopback**
  - 上記ドキュメントで説明あり。プライベートチャンネル経由のリファレ
    ンスストリームが利用できない場合の代替手段。

### オーディオエンジンの背景


- **AudioRenderEffectsManager**
  - <https://learn.microsoft.com/en-us/uwp/api/windows.media.audio.audiorendereffectsmanager>
  - エンドポイント上で有効なエフェクトの問い合わせ
- **Audio Effects Discovery サンプル**
  - エフェクト列挙を実演する Windows SDK 同梱のサンプルアプリ

## リファレンス実装


### Microsoft Windows-driver-samples


- <https://github.com/microsoft/Windows-driver-samples>
- 正典的なサンプル集。特に注目すべきは:
  - `audio/sysvad/EndpointsCommon/` — エンドポイント構造
  - `audio/sysvad/SwapAPO/` — チャンネル入れ替え APO (シンプルな
    SFX の例)
  - `audio/sysvad/AecAPO/` — Windows 11 AEC APO サンプル
  - `audio/sysvad/KwsAPO/` — キーワード検出 APO (loopback ストリッ
    ピング)
- ライセンス: MIT

### Equalizer APO


- <https://sourceforge.net/projects/equalizerapo/>
- 最も普及しているサードパーティ APO
- ライセンス: GPL-2.0
- 実演する内容: システム全体のパラメトリック DSP、テキストファイル
  による実行時設定、マルチチャンネル EQ、VST ホスト機能
- Microsoft のドキュメントが示唆する以上にサードパーティ APO で実現
  可能なことが多いことの証左として特筆に値します

### dechamps/APO


- <https://github.com/dechamps/APO>
- コミュニティが保守する APO 開発ノートのコレクション
- 特に有用な内容: 登録の仕組み、レジストリ構造、文書化された挙動と
  実際の挙動のギャップ
- ライセンス: MIT 系

### NoiseTorch (相互参照用の Linux 相当品)


- <https://github.com/noisetorch/NoiseTorch>
- APO ではないものの、Linux でシステム全体のマイクノイズサプレッ
  ションを提供する最も近いオープンソース相当品
- 参照に有用: ユーザ向け UX、オーディオパイプラインリセット時の
  復旧戦略、インプロセスのオーディオ強化の意義

## 関連 Rust クレート


### COM バインディング


- **windows** (Microsoft 公式)
  - <https://crates.io/crates/windows>
  - Windows API の公式 Rust バインディング
  - `IAudioProcessingObject*` と関連インターフェースの型定義を提供。
    `tympan-apo` はこの上に構築されます
- **windows-sys** (低レベル)
  - <https://crates.io/crates/windows-sys>
  - COM の利便性レイヤを持たない生の `extern "system"` バインディング

### クライアント側オーディオ (tympan-apo のスコープ外だが関連)


- **wasapi-rs**
  - <https://crates.io/crates/wasapi>
  - クライアント側オーディオ向けの WASAPI への親しみやすい Rust ラッパー
  - これはデバイスからオーディオを*キャプチャ*するためのもので、
    オーディオエンジン内部で*処理*するためではありません
- **cpal**
  - <https://crates.io/crates/cpal>
  - クロスプラットフォームのクライアント側オーディオ I/O

### リアルタイム / ロックフリー


- **crossbeam**
  - <https://crates.io/crates/crossbeam>
  - リアルタイムスレッドに適したロックフリーデータ構造
- **atomic-waker**
  - <https://crates.io/crates/atomic-waker>
  - スレッド間の非ブロッキング起床通知

### 汎用 DSP


- **rustfft**: スペクトル処理に用いる FFT
- **biquad**: 標準的なバイカッドフィルタ
- **realfft**: 実数値信号に最適化された FFT

## リアルタイムオーディオプログラミングの背景


- **Ross Bencina, "Real-time audio programming 101: time waits for nothing"**
  - <http://www.rossbencina.com/code/real-time-audio-programming-101-time-waits-for-nothing>
  - リアルタイムオーディオ制約への正典的入門
- **Windows のリアルタイムスケジューリング**
  - APO スレッドは MMCSS サービス経由で `AVRT_PRIORITY_REALTIME`
    にて動作します
  - オーディオエンジンがスレッド優先度を調整するため、APO 自身で
    スケジューリングを変更しようとしてはなりません

## ビルド、署名、デプロイ


- **オーディオドライバ・APO 向けコード署名**
  - APO のロードには (カーネルドライバとは異なり) WHQL 署名は不要
  - ただしインストール時の SmartScreen は EV コード署名されたバイナリ
    を好みます
  - <https://learn.microsoft.com/en-us/windows-hardware/drivers/install/code-signing-best-practices>
- **APO 登録用 INF ファイル**
  - <https://learn.microsoft.com/en-us/windows-hardware/drivers/audio/registering-an-apo>
  - 公式の機構。代替として直接 `regsvr32` + レジストリ編集もある
- **Windows Update との相互作用**
  - オーディオドライバの再インストールにより APO 登録が上書きされ得る
  - フレームワークはこれを文書化しますが、防止はできません
  - Equalizer APO のユーザはこれが最大の運用課題だと報告しています