Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

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

Watchers

Forks

Releases

Packages

Contributors

Languages