开发者指南如何为OpenSuperWhisper接入自定义转写引擎——TranscriptionEngine协议与双引擎架构剖析【免费下载链接】OpenSuperWhispermacOS dictation app项目地址: https://gitcode.com/gh_mirrors/op/OpenSuperWhisperOpenSuperWhisper 是一款 macOS 语音转写dictation应用按住快捷键说话松手即把语音实时转成文字并输入到光标位置。它内置 Whisper 与 FluidAudioParakeet双转写引擎并刻意设计了统一的TranscriptionEngine协议让新增一个转写引擎变成一件只改几行代码的事。本文带你完整拆解这套双引擎架构并给出接入自定义转写引擎的最快路径。双引擎架构Whisper 与 FluidAudio 如何共存整个引擎层位于 OpenSuperWhisper/Engines/ 目录目前只有两个具体实现引擎实现文件特点WhisperWhisperEngine.swift基于 whisper.cpp内置 Silero VAD 静音门控支持流式进度与线程安全取消FluidAudioParakeetFluidAudioEngine.swift基于 FluidAudio 框架模型在应用内一键下载通过进度流自动上报两者的切换点非常集中——用户偏好项selectedEngine取值whisper或fluidaudio定义在 Settings.swift用户在设置页 Picker 中切换引擎后didSet自动持久化到 AppPreferences 并触发TranscriptionService.shared.reloadEngine()首次启动的引导页 OnboardingView.swift 也复用同一套模型统一选择逻辑Whisper 与 Parakeet 模型以统一模型列表形式并列下载。TranscriptionEngine 协议接入新引擎只需实现 6 个成员核心契约定义在 TranscriptionEngine.swift极其精简protocol TranscriptionEngine: AnyObject { var isModelLoaded: Bool { get } var engineName: String { get } func initialize() async throws func transcribeAudio(url: URL, settings: Settings) async throws - String func cancelTranscription() func getSupportedLanguages() - [String] }各成员的职责isModelLoaded/engineName供 UI 展示引擎状态与名称initialize()异步加载模型。Whisper 侧是加载.bin权重无解码状态权重可复用FluidAudio 侧是AsrModels.downloadAndLoad拉取并加载 Parakeet 模型transcribeAudio(url:settings:)接收音频文件与用户设置语言、温度、时间戳开关、亚洲语言自动纠错等返回纯文本cancelTranscription()响应用户中断参考 Whisper 的 AbortFlag 线程安全标志实现getSupportedLanguages()语言列表由 LanguageUtil 按引擎返回切换引擎后会自动校验并回退语言。TranscriptionService引擎的调度中心TranscriptionService.swift 是引擎的唯一调用方理解它的四个设计点写新引擎就不会踩坑懒加载与热切换loadEngine()在后台线程按selectedEngine构造引擎并initialize()L40-L70切换引擎即整包重建无需重启应用串行化保护transcribeAudio会等待上一个任务完成确保 whisper context 不被并发解码——你的引擎同样应当假设同一时刻只有一个转写请求进度回调通过onProgressUpdate闭包上报 0.0~1.0 进度SwiftUI 侧实时刷新进度条取消语义取消时同时调用cancelTranscription()与 Swift 的Task.cancel()引擎应抛出CancellationError而非报错。四步接入你的自定义转写引擎️ 按此清单操作改动面最小新建引擎类在 OpenSuperWhisper/Engines/ 下仿照 FluidAudioEngine.swift 实现TranscriptionEngine协议注册引擎名在 TranscriptionService.loadEngine() 的 if-else 中加一个分支并在 Settings.swift 的 Engine Picker 中新增选项声明语言支持在 LanguageUtil 中为你的引擎补一份语言列表与回退语言验证切换引擎 → 说话或拖入音频文件 → 观察进度条、取消、以及 TranscriptionQueue 批量转写是否正常。⚠️ 两个易错点进度回调必须切回主线程更新Published状态initialize()失败时抛出明确错误参考 TranscriptionError便于设置页展示加载失败原因。小结OpenSuperWhisper 用一份 12 行的协议换来了引擎可插拔性UI、队列、快捷键、剪贴板注入等上层模块完全不知道底下跑的是 Whisper 还是 Parakeet。只要遵循 TranscriptionEngine.swift 的契约与 TranscriptionService.swift 的调用约定接入任何新转写模型本地或远程都只需一个文件加几处注册代码——这正是它值得贡献的原因。【免费下载链接】OpenSuperWhispermacOS dictation app项目地址: https://gitcode.com/gh_mirrors/op/OpenSuperWhisper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考