DuRT 技术栈文档 (macOS 语音识别与翻译工具)

1. 技术栈选型与版本

  • 核心开发框架:
    • SwiftUI (3.0+): 构建声明式、响应式用户界面的首选现代化框架,确保流畅的悬浮窗交互体验。
    • AppKit (macOS SDK): 提供底层窗口管理(悬浮窗NSWindow)、系统集成、菜单栏控制等必要原生能力。
  • 语音识别引擎:
    • Apple Speech Framework (SFSpeechRecognizer): 核心语音转文本引擎,支持多种语言,利用Apple优化过的本地模型,保障基础识别性能与隐私。
    • 本地化AI模型 (可选/补充): 如 Whisper.cpp (v1.5.0+)Vosk (0.3.45+)。集成高性能、轻量级开源语音识别模型库,扩展语言支持(尤其是Speech框架覆盖不足的语种)并提升特定场景准确度。模型文件内置App Bundle。
  • 机器翻译引擎:
    • 本地化Transformer模型 (Core ML格式): 使用 PyTorch (2.0+)TensorFlow (2.12+) 训练轻量级翻译模型,通过 Core ML Tools (7.0+) 转换为.mlmodel格式集成。模型文件内置App Bundle,完全离线运行。
  • 音频处理:
    • AVFoundation Framework (AVAudioEngine, AVAudioInputNode): 实时捕获麦克风音频流,进行低延迟缓冲与预处理(如降噪、增益控制)。
  • AI推理引擎:
    • Core ML (5.0+): Apple原生高性能机器学习框架,负责高效、安全地执行本地语音识别模型(如Whisper/Vosk)和翻译模型的推理,充分利用Apple Silicon(ANE)或GPU加速。
  • 系统服务集成:
    • ExtensionKit / XPC (可选): 若需实现全局快捷键激活或更深层系统集成(如识别当前应用上下文),可能需开发辅助守护进程或系统扩展,通过XPC进行安全进程间通信。
  • 数据存储:
    • SwiftData (macOS 14+)Core Data: 轻量级本地存储,用于管理用户配置(目标语言、快捷键、UI偏好)、历史翻译记录缓存(可选,需明确用户隐私选项)。
  • 依赖管理:
    • Swift Package Manager (SPM): 管理开源库依赖(如Whisper.cpp/Vosk封装库)。
  • 开发环境:
    • Xcode (15.0+)macOS SDK (14.0+)Swift (5.9+)部署目标:macOS 12.0+

2. 核心模块技术方案

  • 语音捕获与预处理 (AudioCaptureService):
    1. 使用AVAudioEngine配置音频会话 (AVAudioSession),请求麦克风权限。
    2. 连接AVAudioInputNode捕获原始PCM音频流。
    3. 实现实时环形缓冲区,处理音频数据块(如30ms),应用必要的预处理(VAD端点检测、降噪滤波)。
  • 语音识别 (SpeechRecognitionService):
    1. 双引擎策略: 主引擎优先使用SFSpeechRecognizer。对于其不支持或识别率低的语言,无缝切换到本地模型引擎(Whisper/Vosk)。
    2. Apple Speech: 创建SFSpeechRecognitionTask,将预处理后的音频缓冲区 (AVAudioPCMBuffer) 或文件送入识别。
    3. 本地模型: 使用Core ML加载.mlmodel (Whisper/Vosk)。将音频块转换为模型输入特征(如Mel频谱),执行prediction获得文本结果。实现结果流式输出拼接。
  • 机器翻译 (TranslationService):
    1. 使用Core ML加载预置的翻译.mlmodel
    2. 接收识别后的源语言文本。
    3. 执行模型推理 (prediction),获得目标语言翻译文本。
    4. 优化: 实现简单缓存机制(LRU),缓存常用短语翻译结果,减少模型调用。
  • 悬浮窗展示 (OverlayWindowManager):
    1. 创建NSWindow,设置level = .floatingstyleMask = [.borderless], isOpaque = falsebackgroundColor = .clear
    2. 使用SwiftUI定义悬浮窗视图 (OverlayView),展示实时识别文本、翻译结果、语言标签、控制按钮。
    3. 实现窗口拖拽、调整大小(可选)、置顶/隐藏逻辑。
    4. 响应系统事件(如屏幕分辨率变化、空间切换),保持位置合理性。
  • 系统服务与集成 (SystemIntegrationService):
    1. 注册全局快捷键 (addLocalMonitorForEvents(matching: .keyDown)) 激活/隐藏悬浮窗或触发识别。
    2. (如需要)开发XPC Service处理需更高权限或后台持续运行的任务。

3. 关键架构特性

  • 隐私优先:
    • 所有语音数据处理(识别、翻译)100%本地完成,无网络请求
    • 用户数据(音频、识别文本、翻译结果)默认不持久化。若提供历史记录功能,需明确用户授权选项,数据加密存储 (Data Protection API)。
    • 严格遵守macOS沙盒 (App Sandbox) 限制,仅请求必要权限(麦克风、辅助功能-用于全局快捷键)。
  • 性能优化:
    • 硬件加速: Core ML自动利用Apple Silicon NPU (ANE) / GPU,最大化本地模型推理速度。
    • 流式处理: 音频捕获、识别、翻译流水线化,减少端到端延迟。
    • 轻量模型: 精心选择或训练小型、高效的语音识别与翻译模型,平衡精度与资源消耗。
    • 内存管理: 严格管理音频缓冲区、模型输入输出内存,避免泄漏。使用autoreleasepool
  • 可扩展性:
    • 模块化设计: AudioCaptureService, SpeechRecognitionService, TranslationService, OverlayWindowManager 高度解耦,通过清晰协议通信。
    • 插件式模型加载: 模型加载器 (ModelLoader) 抽象接口,方便未来集成新语音识别或翻译模型(只需实现对应接口并更新配置)。
    • 配置驱动: 用户设置(语言对、识别引擎偏好、UI样式)集中管理,易于扩展新选项。

4. 实施要点

  1. 环境搭建: Xcode 15+, 配置Swift Package依赖 (Whisper.cpp/Vosk的Swift封装)。
  2. 模型准备: 训练/获取目标语言对的轻量翻译模型 (e.g., OPUS-MT),使用Core ML Tools转换。准备所需语音识别模型文件。
  3. 核心服务实现:
    • 实现AudioCaptureService进行低延迟音频流处理。
    • 实现SpeechRecognitionService,集成Speech框架和本地模型引擎。
    • 实现TranslationService,封装Core ML模型推理。
  4. UI与交互:
    • 使用SwiftUI构建主应用界面(设置页)和核心的OverlayView
    • 使用AppKit (NSWindow, NSViewControllerRepresentable) 管理悬浮窗的生命周期、位置和层级。
  5. 系统集成: 实现全局快捷键监听、辅助功能权限请求(如需)。
  6. 数据与配置: 使用SwiftData/Core Data实现设置持久化。谨慎设计历史记录存储(加密、用户可控)。
  7. 测试与优化:
    • 单元测试核心算法与服务。
    • 集成测试端到端语音识别翻译流程。
    • 性能剖析 (Instruments):重点监测CPU/GPU/内存占用、音频延迟、模型推理时间。
    • 多语言、多口音场景测试。
  8. 上架准备: 配置App Sandbox权限,完善隐私声明(明确所有数据处理均在本地),符合Mac App Store审核指南。

总结: DuRT的技术栈围绕 本地化、高性能、隐私安全 构建。利用Apple原生框架(SwiftUI, AppKit, AVFoundation, Speech, Core ML)保障基础体验与效率,选择性集成高性能开源本地模型(Whisper/Vosk)扩展能力边界。模块化设计和Core ML的硬件加速为未来功能扩展(如新模型、新语言)与持续性能优化奠定了坚实基础。严格的隐私控制(无网络、沙盒、可选加密存储)是核心产品优势的技术保障。