Yap: 開放原始碼在裝置上語音輸入 適用於 macOS

Yap: 開放原始碼在裝置上語音輸入 適用於 macOS

Yap 是一個開放原始碼的語音輸入工具,適用於 macOS,可讓使用者在任何使用中的文字欄位中直接將語音轉錄為文字。透過利用 Apple 原生的 Speech 框架,Yap 提供了以隱私為焦點、低延遲的體驗,完全在裝置上運行,無需雲端連線、API 金鑰或下載外部機器學習模型。

透過 Apple Speech 框架的在裝置上轉錄

Yap 使用在 macOS 26 (Tahoe) 中引入的 SpeechAnalyzerSpeechTranscriber API。這些 API 允許應用程式使用由作業系統本身管理並隨系統發佈的語音轉文字模型。此設計消除了應用程式需要捆綁重量級模型權重的必要——例如 Whisper 所使用的那些——這些模型通常會消耗數百 MB 的 RAM,並在舊的 Intel 基礎 Mac 上導致效能下降。

根據開發者引用的基準測試,Apple 原生的語音 API 在乾淨音訊上的詞錯誤率(WER)為 2.12%,在嘈雜音訊上的詞錯誤率為 4.56%,優於 Whisper Small(分別為 3.74% 和 7.95%),同時在 5,559 個 LibriSpeech 片段上運行速度約快三倍。

核心功能與工作流程

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 這樣的專門模型在某些基準測試中仍保持優勢。

Sources