Skip to content

Repository files navigation

MultiAudioRouter

Windows 11 用の音声ルーティングツール。システム音声 / アプリ単位の音任意の複数出力デバイス に同時に流せる WPF アプリ。プリセット保存と出力毎の音量調整つき。

phase platform dotnet

機能

  • 複数デバイス同時出力 — 1 つのキャプチャを N 出力に fan-out
  • プロセス単位キャプチャ — Windows 11 の Process Loopback API でアプリの音だけ取得
  • デバイス全体ループバック — 任意のレンダーデバイスに鳴ってる音をそのまま転送
  • 出力毎の音量 — シンク独立スライダー
  • プリセット保存 — JSON で %APPDATA%\MultiAudioRouter\presets\ に保存
  • ライブメトリクス — capture rate / 出力バッファ充填率 / silent / discontinuity / padded
  • ダーク UI + カスタムカーソル + アイコン

必要環境

  • Windows 11 (もしくは Windows 10 build 20348+)
  • 開発時: .NET SDK 10.0 以降
  • 配布版 (self-contained 単一 exe) は .NET 不要

構成

プロジェクト 役割
MultiAudioRouter.Core キャプチャ / 再生 / ルーティングのコアライブラリ
MultiAudioRouter.Console CLI 版(動作確認用)
MultiAudioRouter.App WPF GUI
tools/IconBuilder アプリアイコン (.ico) ジェネレータ
tools/CursorBuilder カスタムカーソル (.cur) ジェネレータ

主なクラス (Core):

ビルド

dotnet build MultiAudioRouter.slnx

実行

GUI

dotnet run --project MultiAudioRouter.App
  1. 左カード: キャプチャ元 (デバイス or プロセス) を選択
  2. 中央カード: 出力先を複数選択 (Ctrl/Shift クリック)
  3. 右カード: ライブステータス + 音量スライダー
  4. 下: レイテンシ設定 → ▶ Start
  5. プリセット保存/読込はヘッダー右

CLI

$env:MAR_LOG="Debug"; dotnet run --project MultiAudioRouter.Console

単一 exe の作成

App プロジェクトを self-contained で publish:

dotnet publish MultiAudioRouter.App/MultiAudioRouter.App.csproj `
  -c Release -r win-x64 --self-contained `
  -p:PublishSingleFile=true `
  -p:IncludeNativeLibrariesForSelfExtract=true `
  -p:EnableCompressionInSingleFile=true `
  -p:DebugType=embedded

出力: MultiAudioRouter.App/bin/Release/net10.0-windows/win-x64/publish/MultiAudioRouter.App.exe (~73MB、.NET ランタイム同梱)

アイコン / カーソルの再生成

# アイコン
dotnet run --project tools/IconBuilder -- MultiAudioRouter.App/app.ico
# カーソル
dotnet run --project tools/CursorBuilder -- MultiAudioRouter.App/Resources

レイテンシ調整 (経験則)

パラメータ 推奨値 用途
outputLatencyMs 30〜50 WasapiOut 内部レイテンシ。下げすぎると underrun
prerollMilliseconds 100〜300 開始時の頭出しバッファ
maxBufferedMilliseconds 1000〜1500 レイテンシ上限。これを超えたら頭から間引き(緩やかに)

実体感レイテンシ ≒ prerollMilliseconds + outputLatencyMs + ~30ms (capture 内部)

トラブルシューティング

  • 音が出ない: 選んだキャプチャ元に実際に音が鳴っているか確認 (Stats の capture バイト数が 0 なら無音)
  • プロセスループバックでデータが来ない: Edge / Chrome は子レンダラープロセスで音を鳴らすので Include ツリー で親プロセス指定。メインの msedge.exe を選ぶ のが正解
  • 周期的な音抜け: バッファサイズ・出力レイテンシを上げる。Process Loopback の場合は hnsBufferDuration (内部 100ms) で吸収済み
  • E_NOINTERFACE: COM apartment 不整合。Process Loopback は MTA 専用スレッド上で動かす必要あり (Core 内で対応済み)

開発フェーズ

  • Phase 1: システム全体ループバック → 単一デバイス再生 (CLI)
  • Phase 2: 複数デバイス同時出力
  • Phase 3: Process Loopback API でアプリ単位キャプチャ
  • Phase 4: WPF GUI 化 (ダークテーマ + カスタムアイコン/カーソル)
  • Phase 5: プリセット保存・出力毎の音量調整

ライセンス

MIT

About

Windows audio router with per-process capture, multi-device output, presets and volume control.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages