AmitRajput-Dev/SonyBridge

GitHub: AmitRajput-Dev/SonyBridge

一款原生 macOS 应用,通过逆向工程的 Sony 蓝牙协议让用户在桌面端直接控制新款 Sony 耳机的降噪、环境声、均衡器和电池等功能,摆脱对手机应用的依赖。

Stars: 6 | Forks: 1

# 🎧 SonyBridge ### 从桌面端控制你的 Sony 耳机 —— 体验移动应用不让你做的事。 一款现代化、原生的 **macOS** 应用(具备跨平台基础),可通过蓝牙控制 Sony 耳机: **降噪**、**环境声**、**均衡器**和**电池** —— 包括支持 Sony 第二代协议的新型号, 例如 **WH-CH720N** 和 **WH-1000XM4/XM5**。
![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) ![UI](https://img.shields.io/badge/macOS%20UI-SwiftUI-orange) ![Language](https://img.shields.io/badge/core-C%2B%2B20-00599C) ![License](https://img.shields.io/badge/license-MIT-green) ![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)
SonyBridge connected to WH-CH720N
## 为什么 Sony 将耳机设置锁定在他们仅限移动端使用的 *Sound Connect* 应用中。如果你主要使用笔记本电脑, 就会陷入困境。SonyBridge 使用 Sony 逆向工程的二进制协议,通过蓝牙 RFCOMM 直接与耳机通信 —— 无需手机。 原始的 [SonyHeadphonesClient](https://github.com/Plutoberth/SonyHeadphonesClient) 项目仅支持 Sony 的 **第一代**协议,因此较新的耳机(WH-CH720N、XM4/XM5、WF 系列、LinkBuds 等)在连接时会超时。 SonyBridge 添加了完整的**第二代 ("v2") 协议**支持,并专为这些设备构建了简洁的 SwiftUI 界面。 ## ✨ 功能 - 🎚️ **环境声控制** — 降噪 · 环境声(0–20 级) · 关闭 - 🗣️ **聚焦人声**通透模式 - 🎛️ **均衡器** — 读取当前预设,并在关闭、明亮、激昂、醇厚、放松、人声、高音、低音和语音之间切换 - 🔋 **电池电量** — 实时百分比,直接显示在顶部栏中 - 🔌 **自动连接** — 自动查找你已配对的 Sony 耳机,无需繁琐的设备选择 - 🌑 **原生 SwiftUI** — 深色、极简风格,参照 Sony 官方应用的外观设计 - 🧩 **双协议** — 自动检测并适配对应的协议版本
Disconnected state
## 🎧 支持的耳机 | 状态 | 设备 | |--------|---------| | ✅ **已验证** | WH-CH720N | | 🟢 **预计支持**(v2,头戴式,单一电池) | WH-1000XM4, WH-1000XM5, WH-XB910N, WH-CH520 | | 🟡 **部分支持**(v2 入耳式 —— 控制功能正常,电池格式不同) | WF-1000XM4, WF-1000XM5, WF-C700N, LinkBuds S | | 🔵 **旧版**(原始 v1 协议) | WH-1000XM3, WH-1000XM2, WH-XB900N, MDR-XB950BT | ## 🚀 构建与运行 ### macOS(推荐 —— 原生 SwiftUI 应用) 需要 **Xcode 14+**。 ``` git clone --recurse-submodules https://github.com/AmitRajput-Dev/SonyBridge.git open SonyBridge/Client/macos/SonyHeadphonesClient.xcodeproj ``` 然后按下 ⌘R。首次启动时,请授予蓝牙权限。**请先在 macOS 蓝牙设置中连接你的耳机**, 然后在应用中点击 *连接耳机*。 ### Windows / Linux(Dear ImGui UI,继承自上游)
构建说明 **Windows**(CMake + MSVC,在 Developer Command Prompt 中运行): ``` cd Client && mkdir build && cd build cmake .. && cmake --build . ``` **Linux**(`sudo apt install libbluetooth-dev libglew-dev libglfw3-dev libdbus-1-dev`): ``` cd Client && mkdir build && cd build cmake .. && cmake --build . ``` macOS 的 SwiftUI 界面仅限 macOS 使用;Windows/Linux 使用原始的 Dear ImGui 界面。
## 🔬 工作原理 Sony 耳机暴露了一个厂商专属的 RFCOMM/SPP 服务。命令被封装为以下格式: ``` ESCAPE( <4-byte BE length> ) ``` 存在两代协议,可通过其 SDP 服务 UUID 进行区分: - **v1** — `96CC203E-…` — WH-1000XM3 及更早型号 - **v2** — `956C7B26-…` — WH-CH720N, XM4/XM5, WF 系列, LinkBuds 等 SonyBridge 会优先尝试 v1,失败后回退到 v2,并记住最终成功的协议版本。v2 路径添加了 较新设备强制要求的初始化握手和每一帧的主机 ACK,以及电池和均衡器的查询/响应命令。 协议细节由社区进行逆向工程得出。特别是电池和 EQ 的字节布局,参考并对照了 [**GadgetBridge**](https://codeberg.org/Freeyourgadget/Gadgetbridge) 出色的 Sony 实现。 ## ⚠️ 免责声明 本项目**不附属于 Sony,也未获得 Sony 的认可或与之有联系**。它使用逆向工程的协议与你的 耳机进行通信,以实现互操作性。使用风险自负。 ## 📄 许可证 [MIT](LICENSE) — 详情请参阅 LICENSE 文件。保留原作者版权;请参阅[致谢](#-credits)。
标签:Bash脚本, C++20, macOS应用, SwiftUI, 外设控制, 桌面工具, 索尼耳机, 蓝牙通信