macOS 无障碍 API 是一个框架,允许一个应用程序向其他应用程序发送键盘输入并读取其内容。对于语音输入,这意味着转录引擎可以获取生成的文本并直接将其输入到你正在处理的内容中——无需经过剪贴板或模拟按键。
语音输入应用如何使用它
当你按住推送通话键并说话时,语音输入应用会执行三个步骤:
- 转录音频成文本。
- 决定文本的目标位置。 这个决定在按下键的时候做出,而不是释放键的时候——因为应用需要在获得任何单词之前知道要输入到哪个窗口。
- 使用无障碍 API 插入文本,如果目标应用支持的话,否则退回到合成粘贴。
无障碍 API 是直接路由——它告诉 macOS「把这些单词放入当前有焦点的文本字段」。它不是真正的按键(不经过你的键盘设置或触发键盘快捷键),也不是剪贴板操作(它不会改变剪贴板,如果必须粘贴则恢复原来的内容)。这是为什么语音输入在 Mac 上各处都能工作的原因。
何时退回到粘贴
某些应用程序不支持无障碍 API。这包括:
- 密码字段,出于安全考虑,大多数应用会阻止粘贴。
- 非常旧或未签名的应用,可能不会向系统公开文本输入界面。
- 某些终端模拟器和 Unix 工具,它们期望真实按键而不是高级文本输入。
- 沙盒化的应用,在输入周围有权限限制。
当应用不支持无障碍 API 文本输入时,语音输入应用退回到粘贴:它把文本复制到剪贴板,发送模拟 ⌘V,然后恢复粘贴前的剪贴板内容。这在几乎每个应用中都能工作,但速度较慢,而且你之前复制的任何内容都会丢失,需要之后恢复。
权限
要使用无障碍 API,应用必须向系统申请权限。macOS 在内核级别强制执行——没有明确授予权限的进程无法使用 API。权限出现在系统设置中的隐私与安全中。你可以随时撤销权限,撤销后应用就会完全损坏;它将无法在其他应用中输入文本。
这与屏幕阅读器使用的权限相同,也是 Sticky Keys 和 Voice Control 依赖的权限。它不是语音输入应用独有的。
为什么这很重要
语音输入工具是在这个系统边界之上构建的。任何语音输入应用的速度、可靠性和行为都取决于这个 API 提供的功能以及每个操作系统版本强制执行的规则。这是为什么语音输入工具只能承诺这个无障碍框架允许的——需要真实访问你的键盘或隐藏后台监听器的功能是不可能的。