Skip to content

About

基于 WASAPI 和 NAudio 的 Windows 音频转发工具,支持捕获指定播放设备音频并实时转发到其他输出设备。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

20 Commits

Folders and files

Repository files navigation

AudioRouter 音频转发器

AudioRouter 是一个面向 Windows 的低延迟桌面音频转发工具。它通过 WASAPI Loopback 捕获指定播放设备的系统声音,再将音频实时输出到另一台播放设备。

适合以下场景:

  • 将电脑声音转发到 USB 耳机、HDMI 或视频采集卡中的一个目标设备
  • 为 OBS、录屏或直播环境建立独立的监听输出链路
  • 在不同声卡之间转发游戏、媒体或系统声音
  • 观察音频缓冲、延迟、欠载和时钟漂移等运行状态

监听设备是 Windows 播放设备,不是麦克风。监听设备和输出设备不能选择为同一个设备。

主要功能

  • 枚举当前处于活动状态的 Windows 播放设备
  • 指定播放设备进行 WASAPI Loopback 捕获
  • 将捕获的音频转发到另一台播放设备
  • 支持 20 / 50 / 100 / 150 / 200 ms 延迟档位,默认 50 ms
  • 保存监听设备 ID、输出设备 ID 和延迟配置
  • 实时显示延迟、缓冲、速率、欠载和时钟校正信息
  • 已运行的转发异常中断后,按原设备 ID 检测并尝试恢复
  • 正确停止并释放捕获、处理和输出资源

界面说明

当前界面采用紧凑型三段布局:

┌──────────────────────────────────────────────────────────────┐
│ 音频转发器                         ● 当前状态    刷新设备   │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  声音来源          音频处理               输出设备           │
│  播放设备 A   ──▶  WASAPI / 延迟档位  ──▶  播放设备 B        │
│                                                              │
│  实时状态:估算延迟 · 当前/峰值缓冲 · 输出状态 · 运行时间    │
│                                                              │
│  ▸ 高级性能数据                                              │
├──────────────────────────────────────────────────────────────┤
│ ● 链路状态                                   开始/停止转发   │
└──────────────────────────────────────────────────────────────┘

状态颜色:

  • 灰色:已停止
  • 绿色:正在转发
  • 橙色:设备异常,等待自动恢复

开始和停止共用一个主控制按钮,按钮会根据当前状态自动切换操作。

使用方法

  1. 启动程序。
  2. 在“声音来源”中选择需要监听的播放设备。
  3. 在“输出设备”中选择另一台播放设备。
  4. 选择目标延迟。建议先使用默认的 50 ms。
  5. 点击“开始转发”。
  6. 通过实时状态确认延迟、缓冲和运行时间是否稳定。
  7. 需要结束时,点击同一位置的“停止转发”。

转发运行期间设备和延迟配置会被锁定。停止转发后可以重新选择设备或延迟档位。

50 ms 是首次运行或配置不可用时的默认值。监听设备、输出设备和延迟档位会在成功开始转发后保存,下次启动优先恢复已保存的有效配置。

延迟档位建议

档位 建议场景 说明
20 ms 对延迟敏感、驱动稳定的设备 对 USB、HDMI 驱动和系统调度要求较高
50 ms 日常低延迟使用 默认档位,优先推荐
100 ms 普通监听、采集卡 延迟与稳定性较均衡
150–200 ms 兼容性优先 适合容易欠载或偶发卡顿的设备

界面中的“估算延迟”是软件音频链路估算值,不是扬声器到人耳的声学端到端测量值。实际延迟还会受到 Windows 音频引擎、设备驱动、USB/HDMI 链路和设备内部缓冲影响。

性能诊断

普通模式默认显示:

  • 估算延迟
  • 当前缓冲和峰值缓冲
  • 输出状态
  • 本次转发运行时间

展开“高级性能数据”可以查看:

  • 配置档位
  • 活动处理管线与捕获/输出请求周期
  • 捕获速率
  • 有效输出速率与累计补零
  • 捕获回调频率与最大回调间隔
  • 欠载和重缓冲次数
  • 重采样时钟校正、追赶状态与累计丢弃时长

常见术语:

指标 含义
缓冲 尚未被输出设备消费的音频时长,单位通常为毫秒
峰值缓冲 本次转发过程中观察到的最大缓冲时长
欠载 输出请求到来时,可用音频数据不足
重缓冲 欠载后重新积累启动水位的次数
补零 数据不足时,为保持输出连续而填充的静音时长
时钟校正 为补偿两台设备时钟偏差而进行的轻微重采样调整
追赶 / 丢弃 缓冲过高时加速消费或丢弃旧数据,避免延迟持续累积

不同设备没有统一的正常阈值,应重点观察指标是否持续恶化。如果缓冲不断增大,通常表示来源与输出设备的时钟存在偏差,或输出设备无法及时消费数据;如果欠载、重缓冲或补零持续增加,可以尝试提高延迟档位。

运行异常与设备恢复

转发已经成功启动后,如果 USB 声卡、HDMI 音频设备或视频采集卡断开,或者音频链路发生异步运行故障,程序会:

  1. 停止当前音频转发并释放相关资源。
  2. 进入橙色“等待设备恢复”状态。
  3. 每 2 秒检查之前选择的两个设备 ID。
  4. 当监听设备和输出设备重新可用时,尝试恢复原转发配置。

恢复只会重试原来的设备,不会自动切换到其他设备。重试没有次数或时间上限,会持续到恢复成功、用户点击“停止恢复”或程序关闭。如果设备重连后被 Windows 分配了新的 ID,需要停止恢复、刷新设备并重新选择。

首次点击“开始转发”时如果初始化失败,程序会直接显示错误,不会进入自动恢复状态。

配置保存

程序保存的是 Windows 音频端点 ID,而不是设备友好名称,可以降低同名设备造成误匹配的概率。更换 USB 接口、重装驱动或系统重新创建设备端点后,设备 ID 仍可能变化。

配置文件位置:

%LOCALAPPDATA%\AudioRouter\settings.json

保存内容包括:

  • 监听设备 ID
  • 输出设备 ID
  • 延迟档位

技术架构

活动播放设备
    │
    ▼
WASAPI Loopback Capture
    │
    ▼
实时缓冲与预缓存控制
    │
    ▼
采样率/时钟漂移校正
    │
    ▼
WASAPI 输出设备

程序优先尝试低延迟 Loopback 捕获和 Direct WASAPI 共享模式输出。如果设备或驱动不支持当前链路,会尝试兼容捕获、稳定输出参数或 Media Foundation 兼容路径。兼容路径以稳定性为优先,实际延迟可能明显增加。

主要技术:

  • .NET 8
  • WPF
  • NAudio 2.3.0
  • HandyControl 3.5.1
  • CommunityToolkit.Mvvm 8.4.2

项目保持 MVVM 结构,音频转发、设备枚举、诊断统计和配置保存分别由独立服务负责。

环境要求

  • Windows 10 或 Windows 11
  • .NET 8 SDK
  • 开始转发时,至少两台处于活动状态的 Windows 播放设备

仓库通过 global.json 使用 .NET SDK 8.0.423,并允许使用同一功能带中的更新补丁版本。只运行已构建程序时,需要安装 .NET 8 Desktop Runtime。

构建与运行

在仓库根目录执行:

dotnet restore AudioRouter.sln
dotnet build AudioRouter.sln -c Release
dotnet run --project AudioRouter/AudioRouter.csproj -c Release

Release 构建产物默认位于:

AudioRouter\bin\Release\net8.0-windows\

注意事项

  • 程序只能捕获播放设备当前实际输出的声音。
  • 当前是单来源、单目标转发,不支持同时输出到多个设备。
  • 监听设备与输出设备必须不同。
  • 20 ms 是目标配置,不代表所有设备都能稳定达到相同的实际延迟。
  • WASAPI、驱动和硬件缓冲决定了无法实现物理意义上的绝对零延迟。
  • HDMI、USB 声卡和采集卡重新连接后,Windows 可能需要短暂时间才能完成设备初始化。
  • 当前版本尚未提供真实输入/输出音量电平和实时采样波形。
  • 当前不支持麦克风输入、单应用捕获、音量调节、托盘驻留或 Windows 服务模式。

About

基于 WASAPI 和 NAudio 的 Windows 音频转发工具,支持捕获指定播放设备音频并实时转发到其他输出设备。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages