Open Voice Bridge 是一个面向无线麦克风、语音遥控器和其他语音/按键外设的跨设备、跨传输、跨平台桥接框架。
它把问题拆成六层:设备身份与能力、传输、设备协议、音频图、动作映射和平台后端。一个设备可以组合 BLE GATT、Bluetooth HID、USB 数字音频或系统音频输入;macOS、Windows、Linux 分别实现自己的权限与 I/O 后端。
当前已完成实现和真机验收的组合是:Xiaomi Bluetooth Remote 2 Pro / RC003 + macOS,以及小米蓝牙语音遥控器普通款 / ARN9 + macOS(单设备)。RC003 Windows 是源码/构建候选:已经在真实 Windows GitHub Actions runner 上通过完整测试与打包流程(未真机验收,见
apps/windows/rc003/),不应理解为已经支持。DJI Mic 2 的双平台系统输入识别正在开发和真机验收中;Linux 仍为 planned/research。
| 设备 | macOS | Windows | Linux | 主要传输 |
|---|---|---|---|---|
| Xiaomi RC003 | 已实现并真机验收 | 源码/构建候选(未真机验收,见 apps/windows/rc003/) | 计划中 | BLE GATT(ATVV 语音)+ Bluetooth HID(按键) |
| Xiaomi ARN9 普通款 | 已实现并完成单设备真机验收 | 计划中 | 计划中 | BLE GATT(ATVV 语音)+ Bluetooth HID(按键) |
| DJI Mic 2 | 开发中:CoreAudio 输入选择与识别 | 构建候选:可选设备与 HFP 录音端点页 | 调研中 | 系统音频输入;Windows 真机已确认蓝牙 HFP 设备/端点身份,仍待连续录音验收,发射器实体键暂不映射 |
| 其他语音外设 | 通过 device profile 接入 | 通过 platform backend 接入 | 通过 platform backend 接入 | 以真实设备枚举和协议证据为准 |
DJI 官方说明 Mic 2 接收器可以通过 USB-C 连接电脑;其发射器直接蓝牙兼容列表主要包含指定 DJI 设备与手机。因此本项目不会因为设备“支持蓝牙”就把它假设为桌面通用蓝牙麦克风。相关资料见 DJI Mic 2 Specs 和 DJI Mic 2 FAQ。
macOS 会读取蓝牙 Device Information Service 的 Model Number(0x2A24):RC003 对应 2 Pro,ARN9 对应普通款。设置窗口只展示当前实际识别到的设备;完整适配范围单独放在“支持设备”页。2 Pro 与 ARN9 因名称和协议相同而复用同一个小米适配器,但各自使用真实外观和按键集合:
Profile 只记录可核对的事实与状态,不是驱动。只有代码、自动验证和目标平台真机门都通过后,某个设备/平台组合才会标为 implemented。
现有 XiaomiRemoteBridgeMac target、应用显示名和 Bundle ID 暂时保留,避免总项目改名导致已安装用户重新授予蓝牙、输入监控和辅助功能权限。当前版本为 v0.4.0,包含 Mac 物理 Fn 麦克风兼容、真正鼠标右键、语音键双击暂停/恢复、所有实体键的自定义快捷键录制、Developer ID 正式签名与 Apple 公证发行链,以及基于 Sparkle 2 的应用内更新。更新包同时使用 EdDSA 与 Developer ID 校验;发现新版本后由用户确认安装,不静默安装,也不发送系统画像。
当前功能:
| 目的 | 操作 | 结果 |
|---|---|---|
| 遥控器语音输入 | 按住 RC003 麦克风键说话,完成后松开 | 按下立即开始,松手立即结束 |
| 暂停整个遥控器桥接 | 快速完整按两次麦克风键:按下→松开→按下→松开 | 菜单栏图标显示暂停;按键、Fn、语音和音频桥接停止 |
| 恢复桥接 | 再次快速双击麦克风键,或在菜单栏/设置中点“启用桥接” | 恢复按键与语音;退出重开应用也会默认恢复启用 |
| 修改普通按键 | 菜单栏 →“打开设置…”→“按键” | 点击实物图按键,再从右侧选择动作,自动保存 |
| 重启后自动运行 | 设置 →“连接”→“登录时自动启动” | 默认开启;macOS 13+ 通过系统登录项管理,macOS 11/12 使用用户级 LaunchAgent |
| 菜单栏图标暂时看不到 | 点击 Dock 中的 Open Voice Bridge 图标 | 直接重新显示设置窗口,不启动第二个实例 |
| 让 Mac 键盘 Fn 使用本机麦克风 | 设置 →“连接”→“Mac 键盘 Fn” | 新安装默认开启;需要麦克风和输入监控权限,可随时关闭 |
双击麦克风键只是暂停/恢复本应用桥接,不会关闭遥控器实体电源、不会断开蓝牙,也不会取消配对。单击、正常长按和慢速双击不会切换状态。若误触暂停,可再次双击、使用显式“启用桥接”按钮,或退出并重开应用。
应用同时提供菜单栏和 Dock 入口。菜单栏可用空间不足时,macOS 可能暂时不显示部分第三方图标,应用无法改变系统排序;点击 Dock 中的 Open Voice Bridge 图标即可重新显示设置窗口。
“登录时自动启动”默认开启,可在“设置 → 连接 → 应用”中关闭。macOS 13 及以上若显示“需在系统登录项中允许”,点击界面里的按钮后,在“系统设置 → 通用 → 登录项与扩展”中允许本应用。
完整“按键”设置界面:点击左侧实物按键,右侧会定位到对应动作。截图中的权限状态以当前 Mac 实际授权结果为准。
打开菜单栏中的应用图标,选择“打开设置… → 按键”,即可使用图形化映射:
每个真实实体键都可以选择内置动作、禁用,或点击“录制自定义快捷键…”直接录入单键/组合键。麦克风键默认仍用于 RC003 语音 + Mac Fn/🌐︎ 长按;也可改成自定义的按住型宿主快捷键,应用会恢复设备 F5→Fn 映射并从原始 HID 按下/松开边沿注入该组合键,避免双发。遥控器没有独立静音实体键;“系统静音”只是可分配给其他实体键的可选动作,不是默认映射。
ARN9 普通款使用同一语音/Fn 行为和同一套默认动作,但映射页会切换为黑色普通款实物图并隐藏不存在的 TV 键。它的真实单设备测试已确认两次完整的“按下 → ATVV 流启动 → 松开 → ATVV 流停止”。由于 2 Pro 与 ARN9 向 macOS 暴露相同名称、VID/PID 和固件号,当前不要同时连接两只同名小米遥控器;现版本还不能可靠保证 HID 与 BLE 选中同一个物理实例,双设备选择将在后续实例身份切片处理。
默认映射如下:
| 遥控器按键 | 默认 macOS 动作 |
|---|---|
| 麦克风 | 固定 RC003 语音 + Fn/🌐︎(按住开始,松开结束) |
| 电源 | Escape |
| 上 / 下 / 左 / 右 | 对应方向键 |
| 确定(OK) | Return |
| 返回 | Delete(退格) |
| 音量 + | 系统音量 + |
| 音量 − | 系统音量 − |
| 主页 | 显示桌面(Fn-F11) |
| 菜单 | 上下文菜单(Shift-F10) |
| TV | 切换应用(Command-Tab) |
动作菜单里三个容易混淆的选项区别如下:
若希望菜单键直接充当鼠标右键,打开“打开设置… → 按键”,点击左侧实物图的“菜单”键,在右侧动作下拉框中选择“鼠标右键(当前位置)”即可(修改后自动保存)。默认值仍为“上下文菜单(Shift-F10)”,升级不会自动改变已有习惯。
应用不会自动安装音频驱动,也不会修改系统默认输入/输出设备。
Applications;v0.3.7 起的 macOS 正式包使用 Apple Developer ID Application 同时签署 App 本体和 DMG 容器,启用 hardened runtime、安全时间戳并装订 Apple 公证 ticket。v0.3.6 及更早公开测试包仍是 ad-hoc/未公证历史产物。只应从本项目 Release 或你信任的分享者处取安装包。维护者的本地开发构建仍可使用 Open Voice Bridge Local Code Signing 持久本机身份或 ad-hoc 回退;只有显式 --release-sign 构建并通过公证验证的 DMG 才是正式发行包。
v0.4.0 是首个带应用内更新的版本。由于 v0.3.9 及更早版本没有更新器,需要手动安装 v0.4.0 一次;以后可从菜单栏“检查更新…”或“设置 → 连接 → 应用”检查。默认每天最多自动检查一次,发现更新会显示版本和说明并等待确认,不会静默安装。可随时关闭“自动检查更新”;更新检查不上传语音、设备信息或系统画像。
蓝牙权限用于连接 RC003 和读取语音;自定义按键还需要“输入监控”和“辅助功能”。在应用“打开设置… → 权限”中依次点击对应的“请求权限”:
在两个列表中都打开“小米遥控器桥接”。如果列表里没有应用,先回到应用的“权限”页面重新点击“请求权限”,或使用列表下方的 + 手动加入 /Applications/小米遥控器桥接.app。完成后从菜单栏选择“退出”,再从“应用程序”重新打开一次。
首次从 ad-hoc/本机测试包升级到 Developer ID 正式包时,权限开关可能看似开启但新版本仍显示无权限。 这是 macOS 仍保留旧签名身份的 TCC 记录造成的。若关闭、删除再重新添加仍无效,请完全退出应用,在“终端”依次运行
tccutil reset ListenEvent com.kingwell.XiaomiRemoteBridgeMac、tccutil reset Accessibility com.kingwell.XiaomiRemoteBridgeMac和tccutil reset Microphone com.kingwell.XiaomiRemoteBridgeMac,再重新打开应用并按“权限”页提示逐项授权。这些命令只清除本应用对应权限,不会修改其他应用。v0.3.9 已修复正式签名包漏签音频输入能力的问题;从正式包开始,后续版本保持同一 Developer ID 身份,不再因 ad-hoc 哈希变化而每次换身份。
BlackHole 2ch;BlackHole 2ch;RC003 的语音是通过 ATVV 把遥控器麦克风写入 BlackHole 的;而 Mac 内置键盘的物理 Fn 只负责触发输入法的语音界面,本机麦克风的声音走的是系统默认输入,并不会进入 BlackHole。因此当豆包等输入法把麦克风固定为 BlackHole 2ch 时,只按物理 Fn 会出现语音界面却收不到文字——这与桥接是否在线无关。
如果你希望按住 Mac 物理 Fn 时也用本机麦克风说话,可以打开这个可选开关:
BlackHole 2ch);松开 Fn 立即停止。行为与边界:
有时你希望暂时让 RC003 完全“安静”——不再向 Mac 注入任何按键、Fn/🌐︎、语音或音频,但又不想拔电池、取消蓝牙配对或退出应用。为此可以快速双击遥控器的语音(麦克风)键在“桥接已启用 / 桥接已停用”之间切换。
按下 → 松开)。默认双击窗口 350ms(两次“按下”之间),单次短按最长 250ms。第二次松开的瞬间切换一次。+ 加入 /Applications/小米遥控器桥接.app,然后完全退出并重新打开。tccutil reset ListenEvent com.kingwell.XiaomiRemoteBridgeMac、tccutil reset Accessibility com.kingwell.XiaomiRemoteBridgeMac、tccutil reset Microphone com.kingwell.XiaomiRemoteBridgeMac。重新打开后到应用“权限”页逐项点击请求;麦克风重置后会暂时从系统列表消失,应用重新发起请求并获准后才会再次出现。BlackHole 2ch,不要只选择 MacBook 自带麦克风。BlackHole 2ch 时,物理 Fn 只负责打开豆包的语音界面,而 Mac 本机麦克风的声音走的是系统默认输入,并没有进入 BlackHole,所以 BlackHole 上没有音频。这并不代表遥控器或桥接断线,也不是“实体 Fn 只能复制”。需要在这种场景下用本机麦克风说话时,打开可选的“兼容 Mac 键盘 Fn”(见下方第 7 步)。维护约定:每个新的 macOS 版本候选在完成自动测试和独立代码审查后,必须先把同一份正式签名、公证产物覆盖安装到维护者本机,完成版本、权限、空闲 CPU、真实遥控器按键与语音验收;本机验收通过并完成发布物独立复审后,才允许推送 GitHub Release。中途的排障或问答不会跳过或中止这条发布链。
./scripts/test.sh
./scripts/build-app.sh --universal
./scripts/verify-app.sh --universal
生成带应用、安装说明、许可证和对应源码的测试 DMG:
./scripts/build-dmg.sh
./scripts/verify-dmg.sh
维护者的正式签名与公证流程:
./scripts/store-notary-credentials.sh "OpenVoiceBridge Notary"
OVB_CODESIGN_IDENTITY='Developer ID Application: <name> (<team-id>)' \
./scripts/build-app.sh --universal --release-sign
./scripts/notarize-update-app.sh \
--keychain-profile "OpenVoiceBridge Notary"
OVB_CODESIGN_IDENTITY='Developer ID Application: <name> (<team-id>)' \
./scripts/build-dmg.sh --release-sign --use-existing-app
./scripts/notarize-dmg.sh \
--keychain-profile "OpenVoiceBridge Notary" \
"dist/小米遥控器桥接-<version>.dmg"
store-notary-credentials.sh 会交互式请求 Apple Account、Team ID 和 App 专用密码;密码只进入 macOS 钥匙串,不应写进脚本、环境变量、命令历史或仓库。
Sparkle 的私有 EdDSA 更新密钥同样只保存在维护者登录钥匙串中,仓库只保存公开验证密钥。prepare-sparkle-tools.sh 只下载官方 2.9.2 工具包并验证固定 SHA-256;notarize-update-app.sh 在应用公证后生成更新 ZIP 和签名 appcast。修改已签名的 ZIP、发布说明或 appcast 后必须重新生成,不能手工补签。
当前 macOS 11 部署目标已完成双架构编译与打包校验,但尚未在真实 macOS 11 机器上运行验收。
第一个 Xiaomi RC003 适配器的 ATVV UUID、握手、HID usage 与 IMA/DVI ADPCM 行为参考 GPL-3.0 项目 xxb26553663-star/remote-bridge-hub,参考 revision 8a93f321ac71a602300c6cd77f7256fa4b63068e。
本项目代码统一按 GPL-3.0-only 发布。参考项目的品牌与商业资产不包含在本项目中;RC003 图片和 Xiaomi 商标也不因代码许可证获得额外授权。修改与归属说明见 COPYRIGHT 和 THIRD_PARTY_NOTICES.md。
561 followers · starred Aug 2026
Open Voice Bridge 是一个面向无线麦克风、语音遥控器和其他语音/按键外设的跨设备、跨传输、跨平台桥接框架。
它把问题拆成六层:设备身份与能力、传输、设备协议、音频图、动作映射和平台后端。一个设备可以组合 BLE GATT、Bluetooth HID、USB 数字音频或系统音频输入;macOS、Windows、Linux 分别实现自己的权限与 I/O 后端。
当前已完成实现和真机验收的组合是:Xiaomi Bluetooth Remote 2 Pro / RC003 + macOS,以及小米蓝牙语音遥控器普通款 / ARN9 + macOS(单设备)。RC003 Windows 是源码/构建候选:已经在真实 Windows GitHub Actions runner 上通过完整测试与打包流程(未真机验收,见
apps/windows/rc003/),不应理解为已经支持。DJI Mic 2 的双平台系统输入识别正在开发和真机验收中;Linux 仍为 planned/research。
| 设备 | macOS | Windows | Linux | 主要传输 |
|---|---|---|---|---|
| Xiaomi RC003 | 已实现并真机验收 | 源码/构建候选(未真机验收,见 apps/windows/rc003/) | 计划中 | BLE GATT(ATVV 语音)+ Bluetooth HID(按键) |
| Xiaomi ARN9 普通款 | 已实现并完成单设备真机验收 | 计划中 | 计划中 | BLE GATT(ATVV 语音)+ Bluetooth HID(按键) |
| DJI Mic 2 | 开发中:CoreAudio 输入选择与识别 | 构建候选:可选设备与 HFP 录音端点页 | 调研中 | 系统音频输入;Windows 真机已确认蓝牙 HFP 设备/端点身份,仍待连续录音验收,发射器实体键暂不映射 |
| 其他语音外设 | 通过 device profile 接入 | 通过 platform backend 接入 | 通过 platform backend 接入 | 以真实设备枚举和协议证据为准 |
DJI 官方说明 Mic 2 接收器可以通过 USB-C 连接电脑;其发射器直接蓝牙兼容列表主要包含指定 DJI 设备与手机。因此本项目不会因为设备“支持蓝牙”就把它假设为桌面通用蓝牙麦克风。相关资料见 DJI Mic 2 Specs 和 DJI Mic 2 FAQ。
macOS 会读取蓝牙 Device Information Service 的 Model Number(0x2A24):RC003 对应 2 Pro,ARN9 对应普通款。设置窗口只展示当前实际识别到的设备;完整适配范围单独放在“支持设备”页。2 Pro 与 ARN9 因名称和协议相同而复用同一个小米适配器,但各自使用真实外观和按键集合:
Profile 只记录可核对的事实与状态,不是驱动。只有代码、自动验证和目标平台真机门都通过后,某个设备/平台组合才会标为 implemented。
现有 XiaomiRemoteBridgeMac target、应用显示名和 Bundle ID 暂时保留,避免总项目改名导致已安装用户重新授予蓝牙、输入监控和辅助功能权限。当前版本为 v0.4.0,包含 Mac 物理 Fn 麦克风兼容、真正鼠标右键、语音键双击暂停/恢复、所有实体键的自定义快捷键录制、Developer ID 正式签名与 Apple 公证发行链,以及基于 Sparkle 2 的应用内更新。更新包同时使用 EdDSA 与 Developer ID 校验;发现新版本后由用户确认安装,不静默安装,也不发送系统画像。
当前功能:
| 目的 | 操作 | 结果 |
|---|---|---|
| 遥控器语音输入 | 按住 RC003 麦克风键说话,完成后松开 | 按下立即开始,松手立即结束 |
| 暂停整个遥控器桥接 | 快速完整按两次麦克风键:按下→松开→按下→松开 | 菜单栏图标显示暂停;按键、Fn、语音和音频桥接停止 |
| 恢复桥接 | 再次快速双击麦克风键,或在菜单栏/设置中点“启用桥接” | 恢复按键与语音;退出重开应用也会默认恢复启用 |
| 修改普通按键 | 菜单栏 →“打开设置…”→“按键” | 点击实物图按键,再从右侧选择动作,自动保存 |
| 重启后自动运行 | 设置 →“连接”→“登录时自动启动” | 默认开启;macOS 13+ 通过系统登录项管理,macOS 11/12 使用用户级 LaunchAgent |
| 菜单栏图标暂时看不到 | 点击 Dock 中的 Open Voice Bridge 图标 | 直接重新显示设置窗口,不启动第二个实例 |
| 让 Mac 键盘 Fn 使用本机麦克风 | 设置 →“连接”→“Mac 键盘 Fn” | 新安装默认开启;需要麦克风和输入监控权限,可随时关闭 |
双击麦克风键只是暂停/恢复本应用桥接,不会关闭遥控器实体电源、不会断开蓝牙,也不会取消配对。单击、正常长按和慢速双击不会切换状态。若误触暂停,可再次双击、使用显式“启用桥接”按钮,或退出并重开应用。
应用同时提供菜单栏和 Dock 入口。菜单栏可用空间不足时,macOS 可能暂时不显示部分第三方图标,应用无法改变系统排序;点击 Dock 中的 Open Voice Bridge 图标即可重新显示设置窗口。
“登录时自动启动”默认开启,可在“设置 → 连接 → 应用”中关闭。macOS 13 及以上若显示“需在系统登录项中允许”,点击界面里的按钮后,在“系统设置 → 通用 → 登录项与扩展”中允许本应用。
完整“按键”设置界面:点击左侧实物按键,右侧会定位到对应动作。截图中的权限状态以当前 Mac 实际授权结果为准。
打开菜单栏中的应用图标,选择“打开设置… → 按键”,即可使用图形化映射:
每个真实实体键都可以选择内置动作、禁用,或点击“录制自定义快捷键…”直接录入单键/组合键。麦克风键默认仍用于 RC003 语音 + Mac Fn/🌐︎ 长按;也可改成自定义的按住型宿主快捷键,应用会恢复设备 F5→Fn 映射并从原始 HID 按下/松开边沿注入该组合键,避免双发。遥控器没有独立静音实体键;“系统静音”只是可分配给其他实体键的可选动作,不是默认映射。
ARN9 普通款使用同一语音/Fn 行为和同一套默认动作,但映射页会切换为黑色普通款实物图并隐藏不存在的 TV 键。它的真实单设备测试已确认两次完整的“按下 → ATVV 流启动 → 松开 → ATVV 流停止”。由于 2 Pro 与 ARN9 向 macOS 暴露相同名称、VID/PID 和固件号,当前不要同时连接两只同名小米遥控器;现版本还不能可靠保证 HID 与 BLE 选中同一个物理实例,双设备选择将在后续实例身份切片处理。
默认映射如下:
| 遥控器按键 | 默认 macOS 动作 |
|---|---|
| 麦克风 | 固定 RC003 语音 + Fn/🌐︎(按住开始,松开结束) |
| 电源 | Escape |
| 上 / 下 / 左 / 右 | 对应方向键 |
| 确定(OK) | Return |
| 返回 | Delete(退格) |
| 音量 + | 系统音量 + |
| 音量 − | 系统音量 − |
| 主页 | 显示桌面(Fn-F11) |
| 菜单 | 上下文菜单(Shift-F10) |
| TV | 切换应用(Command-Tab) |
动作菜单里三个容易混淆的选项区别如下:
若希望菜单键直接充当鼠标右键,打开“打开设置… → 按键”,点击左侧实物图的“菜单”键,在右侧动作下拉框中选择“鼠标右键(当前位置)”即可(修改后自动保存)。默认值仍为“上下文菜单(Shift-F10)”,升级不会自动改变已有习惯。
应用不会自动安装音频驱动,也不会修改系统默认输入/输出设备。
Applications;v0.3.7 起的 macOS 正式包使用 Apple Developer ID Application 同时签署 App 本体和 DMG 容器,启用 hardened runtime、安全时间戳并装订 Apple 公证 ticket。v0.3.6 及更早公开测试包仍是 ad-hoc/未公证历史产物。只应从本项目 Release 或你信任的分享者处取安装包。维护者的本地开发构建仍可使用 Open Voice Bridge Local Code Signing 持久本机身份或 ad-hoc 回退;只有显式 --release-sign 构建并通过公证验证的 DMG 才是正式发行包。
v0.4.0 是首个带应用内更新的版本。由于 v0.3.9 及更早版本没有更新器,需要手动安装 v0.4.0 一次;以后可从菜单栏“检查更新…”或“设置 → 连接 → 应用”检查。默认每天最多自动检查一次,发现更新会显示版本和说明并等待确认,不会静默安装。可随时关闭“自动检查更新”;更新检查不上传语音、设备信息或系统画像。
蓝牙权限用于连接 RC003 和读取语音;自定义按键还需要“输入监控”和“辅助功能”。在应用“打开设置… → 权限”中依次点击对应的“请求权限”:
在两个列表中都打开“小米遥控器桥接”。如果列表里没有应用,先回到应用的“权限”页面重新点击“请求权限”,或使用列表下方的 + 手动加入 /Applications/小米遥控器桥接.app。完成后从菜单栏选择“退出”,再从“应用程序”重新打开一次。
首次从 ad-hoc/本机测试包升级到 Developer ID 正式包时,权限开关可能看似开启但新版本仍显示无权限。 这是 macOS 仍保留旧签名身份的 TCC 记录造成的。若关闭、删除再重新添加仍无效,请完全退出应用,在“终端”依次运行
tccutil reset ListenEvent com.kingwell.XiaomiRemoteBridgeMac、tccutil reset Accessibility com.kingwell.XiaomiRemoteBridgeMac和tccutil reset Microphone com.kingwell.XiaomiRemoteBridgeMac,再重新打开应用并按“权限”页提示逐项授权。这些命令只清除本应用对应权限,不会修改其他应用。v0.3.9 已修复正式签名包漏签音频输入能力的问题;从正式包开始,后续版本保持同一 Developer ID 身份,不再因 ad-hoc 哈希变化而每次换身份。
BlackHole 2ch;BlackHole 2ch;RC003 的语音是通过 ATVV 把遥控器麦克风写入 BlackHole 的;而 Mac 内置键盘的物理 Fn 只负责触发输入法的语音界面,本机麦克风的声音走的是系统默认输入,并不会进入 BlackHole。因此当豆包等输入法把麦克风固定为 BlackHole 2ch 时,只按物理 Fn 会出现语音界面却收不到文字——这与桥接是否在线无关。
如果你希望按住 Mac 物理 Fn 时也用本机麦克风说话,可以打开这个可选开关:
BlackHole 2ch);松开 Fn 立即停止。行为与边界:
有时你希望暂时让 RC003 完全“安静”——不再向 Mac 注入任何按键、Fn/🌐︎、语音或音频,但又不想拔电池、取消蓝牙配对或退出应用。为此可以快速双击遥控器的语音(麦克风)键在“桥接已启用 / 桥接已停用”之间切换。
按下 → 松开)。默认双击窗口 350ms(两次“按下”之间),单次短按最长 250ms。第二次松开的瞬间切换一次。+ 加入 /Applications/小米遥控器桥接.app,然后完全退出并重新打开。tccutil reset ListenEvent com.kingwell.XiaomiRemoteBridgeMac、tccutil reset Accessibility com.kingwell.XiaomiRemoteBridgeMac、tccutil reset Microphone com.kingwell.XiaomiRemoteBridgeMac。重新打开后到应用“权限”页逐项点击请求;麦克风重置后会暂时从系统列表消失,应用重新发起请求并获准后才会再次出现。BlackHole 2ch,不要只选择 MacBook 自带麦克风。BlackHole 2ch 时,物理 Fn 只负责打开豆包的语音界面,而 Mac 本机麦克风的声音走的是系统默认输入,并没有进入 BlackHole,所以 BlackHole 上没有音频。这并不代表遥控器或桥接断线,也不是“实体 Fn 只能复制”。需要在这种场景下用本机麦克风说话时,打开可选的“兼容 Mac 键盘 Fn”(见下方第 7 步)。维护约定:每个新的 macOS 版本候选在完成自动测试和独立代码审查后,必须先把同一份正式签名、公证产物覆盖安装到维护者本机,完成版本、权限、空闲 CPU、真实遥控器按键与语音验收;本机验收通过并完成发布物独立复审后,才允许推送 GitHub Release。中途的排障或问答不会跳过或中止这条发布链。
./scripts/test.sh
./scripts/build-app.sh --universal
./scripts/verify-app.sh --universal
生成带应用、安装说明、许可证和对应源码的测试 DMG:
./scripts/build-dmg.sh
./scripts/verify-dmg.sh
维护者的正式签名与公证流程:
./scripts/store-notary-credentials.sh "OpenVoiceBridge Notary"
OVB_CODESIGN_IDENTITY='Developer ID Application: <name> (<team-id>)' \
./scripts/build-app.sh --universal --release-sign
./scripts/notarize-update-app.sh \
--keychain-profile "OpenVoiceBridge Notary"
OVB_CODESIGN_IDENTITY='Developer ID Application: <name> (<team-id>)' \
./scripts/build-dmg.sh --release-sign --use-existing-app
./scripts/notarize-dmg.sh \
--keychain-profile "OpenVoiceBridge Notary" \
"dist/小米遥控器桥接-<version>.dmg"
store-notary-credentials.sh 会交互式请求 Apple Account、Team ID 和 App 专用密码;密码只进入 macOS 钥匙串,不应写进脚本、环境变量、命令历史或仓库。
Sparkle 的私有 EdDSA 更新密钥同样只保存在维护者登录钥匙串中,仓库只保存公开验证密钥。prepare-sparkle-tools.sh 只下载官方 2.9.2 工具包并验证固定 SHA-256;notarize-update-app.sh 在应用公证后生成更新 ZIP 和签名 appcast。修改已签名的 ZIP、发布说明或 appcast 后必须重新生成,不能手工补签。
当前 macOS 11 部署目标已完成双架构编译与打包校验,但尚未在真实 macOS 11 机器上运行验收。
第一个 Xiaomi RC003 适配器的 ATVV UUID、握手、HID usage 与 IMA/DVI ADPCM 行为参考 GPL-3.0 项目 xxb26553663-star/remote-bridge-hub,参考 revision 8a93f321ac71a602300c6cd77f7256fa4b63068e。
本项目代码统一按 GPL-3.0-only 发布。参考项目的品牌与商业资产不包含在本项目中;RC003 图片和 Xiaomi 商标也不因代码许可证获得额外授权。修改与归属说明见 COPYRIGHT 和 THIRD_PARTY_NOTICES.md。
561 followers · starred Aug 2026