Skip to content

RedSTARO/WindowsAsSpeaker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Windows as Speaker

English | 最终验证结果

Windows as Speaker 是一个 Windows 10/11 原生桌面应用,通过系统公开的 Windows.Media.Audio.AudioPlaybackConnection API 将电脑启用为蓝牙 A2DP 音频接收端。协议和编解码器协商完全由 Windows 蓝牙栈、驱动和硬件完成,应用不实现或声明额外编解码器。

能力边界

项目已实现的部分:

  • 枚举 Windows 判断可建立 Audio Playback Connection 的已配对设备。
  • 启用、打开、关闭 A2DP Sink 连接。
  • 监听系统公开的 Opened / Closed 状态。
  • 让 Windows 将远端音频渲染到系统音频终结点。
  • 读取系统和设备实际公开的 AEP、PnP、BluetoothDevice、BluetoothAdapter 属性。
  • 显示默认输出终结点并管理其主音量、静音;打开 Windows 声音设置管理输出路由。
  • 自动重连、托盘后台运行、设置持久化、结构化日志和诊断报告。

Windows 没有向普通应用公开以下数据或控制接口,本应用会显示“系统未公开”,不会推测:

  • 当前实际协商的 A2DP 编解码器和参数。
  • 远端流采样率、位深、声道数、码率。
  • A2DP 是否正在传输以及 AVRCP 播放/暂停状态。
  • 连接专属音量或远端绝对音量。
  • AudioPlaybackConnection 可靠绑定到任意指定输出终结点。
  • 通用 Classic Bluetooth 实时 RSSI/链路质量。
  • 通过该公开 API 接收 LC3/LE Audio。

AAC、aptX 等格式如果被当前 Windows、驱动、硬件和远端设备在 Sink 方向共同支持,会由系统自行协商;应用既不阻止也不把“可能支持”显示成“当前正在使用”。SBC/A2DP 的实际可用性同样取决于本机蓝牙栈和驱动。

官方依据:

系统要求

  • Windows 10 版本 2004(build 19041)或更高版本;建议使用仍受 Microsoft 支持的 Windows 10/11 版本。
  • Windows 原生蓝牙适配器与驱动必须支持系统 A2DP Sink 路径。
  • 手机、平板或其他音频源必须已在 Windows 设置中完成配对。
  • 构建需要 .NET SDK 10 和 Windows SDK 10.0.26100 或更高版本。

从源码构建

./scripts/bootstrap.ps1
./scripts/build.ps1
./scripts/test.ps1
./scripts/audit.ps1

bootstrap.ps1 采用 fail-fast:只检查工具链,不自动更改开发机。构建脚本为避免 NuGet 审计服务的网络可用性影响确定性构建,会关闭 restore 阶段的自动审计;audit.ps1 单独执行依赖漏洞检查。缺少工具时可安装:

winget install Microsoft.DotNet.SDK.10 --source winget
winget install Microsoft.WindowsSDK.10.0.26100 --source winget

生成并安装 MSIX

先创建仅用于本地旁加载的开发证书:

$password = Read-Host 'Development certificate password' -AsSecureString
$certificate = ./scripts/New-DevelopmentCertificate.ps1 -Password $password

再生成自包含、签名的 x64 MSIX:

$package = ./scripts/package.ps1 `
  -Version 1.0.0.0 `
  -CertificatePath $certificate.PfxPath `
  -CertificatePassword $password

# 在“以管理员身份运行”的 PowerShell 中执行:
./scripts/install.ps1 `
  -PackagePath $package `
  -CertificatePath $certificate.CerPath

依赖已存在于本机 NuGet 缓存、且需要禁止网络访问时,给 package.ps1 增加 -Offline。该模式会显式使用 %USERPROFILE%\.nuget\packages,缺少任何包时立即失败,不会回退到陈旧发布目录。

产物位于 artifacts/package/。开发证书和 PFX 均被 .gitignore 排除。install.ps1 会先确认 CER 与 MSIX 内的签名证书一致;使用 -CertificatePath 时必须在提升的 PowerShell 中运行,并把该自签名证书导入 LocalMachine\TrustedPeople。验证结束后可按证书指纹删除该证书。公开分发时必须换成受信任代码签名证书,并让 Package.appxmanifestIdentity Publisher 与证书 Subject 一致;使用 Microsoft Store 时还必须将 manifest 关联到 Store 分配的应用身份。不要向最终用户分发开发 PFX、密码或要求用户信任开发证书。

使用

  1. 在 Windows“蓝牙和设备”中配对手机或平板。
  2. 启动 Windows as Speaker,刷新设备列表。
  3. 选择设备并点击“连接”。
  4. 在远端设备上把媒体音频输出切换到此 Windows 电脑。
  5. Windows 会把收到的音频播放到当前系统默认输出终结点。

应用内的输出列表用于显示和管理 Windows 输出;改变 A2DP 接收流的系统路由需打开声音设置完成。关闭主窗口时,如果启用了后台运行,进程会隐藏到托盘并保持连接;托盘“退出”才会释放连接。

项目结构

src/
  WindowsAsSpeaker.Core/              领域模型、连接协调、重连、设置与诊断
  WindowsAsSpeaker.Platform.Windows/  WinRT、蓝牙、设备属性、Core Audio、系统能力
  WindowsAsSpeaker.App/               WPF Fluent UI、ViewModel、托盘、本地化
tests/
  WindowsAsSpeaker.Core.Tests/
  WindowsAsSpeaker.Platform.Windows.Tests/
packaging/                             MSIX manifest
scripts/                               构建、测试、发布、签名、安装
docs/                                  架构、能力矩阵、硬件验收说明

日志和导出的诊断报告可能包含设备 ID、蓝牙地址和驱动信息。分享报告前应自行检查这些标识符。

About

Windows 10/11 Bluetooth A2DP audio receiver using the native Windows audio stack.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages