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 的实际可用性同样取决于本机蓝牙栈和驱动。
官方依据:
- Enable audio playback from remote Bluetooth-connected devices
- AudioPlaybackConnection API
- Windows device information properties
- MediaDevice API
- Endpoint volume controls
- 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.ps1bootstrap.ps1 采用 fail-fast:只检查工具链,不自动更改开发机。构建脚本为避免 NuGet 审计服务的网络可用性影响确定性构建,会关闭 restore 阶段的自动审计;audit.ps1 单独执行依赖漏洞检查。缺少工具时可安装:
winget install Microsoft.DotNet.SDK.10 --source winget
winget install Microsoft.WindowsSDK.10.0.26100 --source winget先创建仅用于本地旁加载的开发证书:
$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.appxmanifest 的 Identity Publisher 与证书 Subject 一致;使用 Microsoft Store 时还必须将 manifest 关联到 Store 分配的应用身份。不要向最终用户分发开发 PFX、密码或要求用户信任开发证书。
- 在 Windows“蓝牙和设备”中配对手机或平板。
- 启动 Windows as Speaker,刷新设备列表。
- 选择设备并点击“连接”。
- 在远端设备上把媒体音频输出切换到此 Windows 电脑。
- 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、蓝牙地址和驱动信息。分享报告前应自行检查这些标识符。