sewernoodle/nothing_headphones_assistant_button_remapper

GitHub: sewernoodle/nothing_headphones_assistant_button_remapper

将 Nothing Headphones (1) 的语音助手按钮重映射为 Windows 上任意按键的工具,通过蓝牙流量嗅探实现官方软件无法提供的自定义功能。

Stars: 0 | Forks: 0

# Nothing Headphones (1) — 语音助手按钮重映射工具 在 Windows 上实时检测 **Nothing Headphones (1)** 上的按钮按下操作,并 将 **语音助手按钮** 映射为您想要的任意按键。 官方 Nothing X 应用程序允许您将这些按钮重新分配给少数 *媒体* 操作——但它无法将按钮按下转换为任意的键盘按键。此 工具可以做到这一点,这使得语音助手按钮可用于: - Discord / TeamSpeak 按键说话 - OBS 场景或静音切换 - 游戏按键绑定和宏 - AutoHotkey 触发器 - 辅助功能快捷键 - ……任何对按键做出反应的操作 它通过 **嗅探 PC 与** 耳机之间的 **蓝牙流量** 来工作。 ![系统托盘菜单](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/f7d95b2525085420.png) ## ⚠️ AI 声明 **本仓库中 100% 的代码由 AI (Claude) 编写**——包括 蓝牙逆向工程、协议解码和 调试。 与 **任何** 代码一样——无论是 AI 编写还是人工编写——在运行前请进行审查。 它是没有混淆且没有网络访问权限的纯文本 PowerShell 脚本,因此 审查起来非常简单。使用风险自负。 ## 工作原理 Nothing Headphones (1) 通过 **经典蓝牙 (BR/EDR)** 与主机通信。 不同的按钮使用不同的标准配置文件: | 按钮 | 协议 | 空中传输内容 | |---|---|---| | 语音助手 | 基于 RFCOMM 的 HFP (免提配置文件) | AT 命令 `AT+BVRA=1` / `AT+BVRA=0` | | 播放 / 暂停 / 下一曲 / 上一曲 | 基于 L2CAP/AVCTP 的 AVRCP `PASS THROUGH` | 操作 ID `0x44`, `0x4B`, `0x4C`, … | | 音量 | AVRCP `EVENT_VOLUME_CHANGED` 通知 | 新的绝对音量值 (0–127) | 该工具使用 [USBPcap](https://desowin.org/usbpcap/) + [Wireshark](https://www.wireshark.org/)的 `tshark` 捕获 **通往蓝牙适配器的 USB 流量**, 然后匹配 L2CAP 载荷中的已知字节签名: ``` Voice assistant : ...41 54 2b 42 56 52 41 3d 3X... ("AT+BVRA=X") AVRCP button : ...11 0e 00 48 7c ... (AVCTP + PASS THROUGH) Volume changed : ...11 0e 0d 48 00 00 19 58 31... (AVRCP volume notify) ``` 当检测到语音助手事件时,它会通过 Win32 `keybd_event` API 注入配置的按键。 ## 系统要求 - **Windows 10 / 11** - **一个 USB 蓝牙适配器。** 这是必需的——大多数笔记本电脑内置的蓝牙 芯片不在 USB 总线上,因此 USBPcap 无法看到它们。便宜的通用 适配器(CSR、Realtek 等)即可正常工作。 - 已与该适配器配对的 **Nothing Headphones (1)**。 - 已安装的 **[Wireshark](https://www.wireshark.org/download.html)**,并且在安装过程中勾选了 **USBPcap** 组件(默认已勾选)。 ## 设置 1. 安装 Wireshark(保持 USBPcap 选项勾选)。 2. 插入您的 USB 蓝牙适配器并将耳机与其配对。 3. 下载此仓库(点击绿色的 **Code** 按钮 → **Download ZIP**,然后 解压)——或者使用 `git clone` 克隆。 就是这样。无需构建步骤。 ## 使用方法 ### 托盘应用(推荐) 双击 **`tray.bat`**。系统托盘中会出现一个耳机图标。 点击该图标会弹出一个菜单: - **Change key…** — 设置语音助手按钮发送的按键 - **Pause** — 暂时停止发送按键 - **Start with Windows** — 在登录时自动启动(启用时显示 ✓) - **Exit** 您选择的按键将保存到 `%APPDATA%\NothingHeadphonesDetector\config.json` 并在下次启动时恢复。 ### 命令行版本 用于调试或查看实时日志,请使用 **`run.bat`**: ``` run.bat :: default key: F13 run.bat -Key A :: send "A" run.bat -Key "Ctrl+Shift+F13" :: modifier combos run.bat -Key "Alt+M" ``` 它会在事件发生时打印每一个检测到的按钮事件(语音、媒体、音量)。 ### 支持的按键 `F1`–`F24`、`A`–`Z`、`0`–`9`、`Space`、`Enter`、`Tab`、`Esc`、`Backspace`, 并可与修饰键 `Ctrl`、`Shift`、`Alt`、`Win` 组合使用(使用 `+` 连接)。 ## 语音助手按钮的行为 语音助手按钮是一个 **切换开关**——每次物理敲击都会翻转一次内部 状态并发送一个单一事件(`AT+BVRA=1`,然后是 `=0`,接着是 `=1`,以此类推)。该 耳机 **不会** 发送单独的“释放”事件,因此仅凭该按钮无法实现真正的按键说话 (按住说话)。 因此,此工具每次敲击会发送 **一次按键**,无论该 事件是 `=1` 还是 `=0`。敲击耳机按钮一次 → 一次按键按下。 ## 限制 - **需要 USB 蓝牙适配器**——USBPcap 通常无法看到内置的蓝牙无线电。 - **仅在 Nothing Headphones (1) 上验证过。** 其他 Nothing 型号(Ear、Ear (a)、 等)可能使用相同的 AVRCP/HFP 命令,但尚未确认其字节签名。 - **仅限 Windows。** 捕获方法 (USBPcap) 和按键注入 (`keybd_event`) 是 Windows 特有的。 - 下载后首次启动 `run.bat` / `tray.bat` 时可能会触发 SmartScreen 的“Windows 已保护你的电脑”提示——点击 **更多信息 → 仍要运行** 即可。 ## 故障排除 **“tshark.exe not found”** — 安装 Wireshark,或者显式传递路径: `run.bat -Tshark "D:\path\to\tshark.exe"`。 **未检测到事件** — 确保耳机已连接到 *USB 适配器*(而非内置适配器)。如果您有多个 USB 控制器,请强制指定接口:`run.bat -Interface "\\.\USBPcap2"`。 **捕获管道立即退出** — 可能是另一个捕获程序(Wireshark 本身、残留的 `tshark`)正在占用接口。请将其关闭后重试。 ## 仓库内容 | 文件 | 用途 | |---|---| | `tray.ps1` | 托盘应用程序(UI、按键映射、自动启动) | | `tray.bat` | 托盘应用的启动器 | | `detector.ps1` | 命令行检测器(实时记录每个按钮的日志) | | `run.bat` | 命令行检测器的启动器 | ## 致谢 所有代码均由 AI (Claude) 编写——请参阅本 README 顶部附近的 **AI 声明** 部分。蓝牙协议分析——字节签名、 AVRCP/HFP 命令解码以及 `tshark`/USBPcap 的替代方案——是通过 捕获并解码真实的 Nothing Headphones (1) 的实时流量而得出的。 ## 许可证 [AGPL-3.0](LICENSE)
标签:AI合规, AT指令解析, AVRCP协议, Discord按键, HFP协议, L2CAP, Libemu, Linux, Nothing耳机, OBS控制, OpenCanary, PowerShell脚本, RFCOMM, tshark, USBPcap, USB流量捕获, Windows外设工具, Wireshark, 云资产清单, 句柄查看, 开源硬件工具, 快捷键, 按键映射, 推流辅助工具, 无障碍辅助, 游戏宏, 硬件重映射, 系统托盘应用, 耳机自定义键, 蓝牙协议分析, 蓝牙抓包, 语音助手按键, 逆向工程