Yap: 面向 macOS 的开源本地语音听写工具
Yap: 面向 macOS 的开源本地语音听写工具
Yap 是一款面向 macOS 的开源语音听写工具,使用户能够在任何活动文本框中直接将语音转录为文本。通过利用 Apple 原生的 Speech 框架,Yap 提供了一种注重隐私、低延迟的体验,完全在设备本地运行,无需云端连接、API keys 或下载外部机器学习模型。
通过 Apple Speech 框架实现本地转录
Yap 使用了 macOS 26 (Tahoe) 中引入的 SpeechAnalyzer 和 SpeechTranscriber API。这些 API 允许应用程序使用由操作系统本身管理和分发的语音转文本模型。这种设计消除了应用程序捆绑沉重模型权重(例如 Whisper 所使用的权重)的需求,这些权重通常会消耗数百 MB 的 RAM,并可能导致旧款 Intel 架构 Mac 的性能下降。
根据开发者引用的基准测试,Apple 的原生语音 API 在清晰音频上的字错误率 (WER) 为 2.12%,在嘈杂音频上的字错误率为 4.56%,在 5,559 个 LibriSpeech 剪辑上的运行速度比 Whisper Small 快约三倍,同时表现优于 Whisper Small(后者分别为 3.74% 和 7.95%)。
核心功能与工作流程
Yap 以菜单栏应用程序的形式运行,其工作流程围绕全局快捷键(默认为 –ℏ D)展开:
- 基于触发的听写: 用户按下快捷键开始录音,再次按下则停止。生成的文本会自动粘贴到当前活动应用程序的焦点文本框中。
- 实时反馈: 在说话时,一个小窗口会显示实时波形和正在进行的转录预览。
- 本地历史记录: 每份转录文本都会保存在本地,允许用户搜索、复制或删除之前的听写内容。
- 可自定义的触发器: 快捷键可以完全重新绑定,包括支持单修饰键触发(如右 Shift 键)。
- 隐私设计: 该应用不进行任何网络调用,不包含遥测数据,也不需要用户账户。
技术实现与架构
Yap 使用原生 Swift 编写(约 3,000 行代码),并保持极小的占用空间,空闲时内存占用约为 60 MB。
音频处理与插入
为了防止句子的第一个词被切断,Yap 使用 AVAudioEngine 来捕获音频,并在语音栈初始化时进行缓冲。转录通过 SpeechAnalyzer 处理,并启用易失性结果以进行实时预览,同时使用 SFSpeechRecognizer 作为不支持地区的备选方案。
向其他应用程序插入文本是通过将文本写入剪贴板并利用 System Events 模拟 –V 命令来实现的。开发者指出了一个针对 Chromium 系应用的特定实现细节:应用会在恢复原始剪贴板内容之前进行等待,因为这些浏览器是异步读取剪贴板的。恢复剪贴板过快会导致粘贴旧数据。
安全性与沙盒
Yap 是在 Mac App Store 之外分发的,且未进行沙盒处理。这在技术上是必要的,因为 macOS App Sandbox 禁止使用 System Events 来驱动其他应用程序,也禁止读取焦点 UI 元素,而这两者对于听写工具将文本粘贴到其他应用是必不可少的。
安装与要求
系统要求: Yap 需要 macOS 26 (Tahoe) 或更高版本;若要从源码构建,则需要 Xcode 26。
安装方法:
- Homebrew:
brew install --cask frigadehq/tap/yap - 直接下载: 最新的
.dmg文件可通过 GitHub Releases 页面获取。
所需权限: 首次启动时,Yap 需要访问麦克风、语音识别、辅助功能(用于识别活动应用)和自动化(用于粘贴文本)。辅助功能权限必须在系统设置中手动开启。
社区见解
虽然该项目因其速度和隐私性而受到好评,但一些用户提出了关于它与内置 macOS 听写功能差异的问题。其他人指出,虽然 Apple 的原生模型具有很强的竞争力,但在某些基准测试中,像 NVIDIA Parakeet TDT v2 这样的专用模型仍然保持优势。