自用的音频转文字 Mac 应用
完全自用的本地音频转文字应用,有需要的朋友可以自取,耗费了不少 token ,希望利用率能够高。
https://github.com/bubugamer/VoxNote
- 实时录音转译功能还有问题,下个排期修复
- 因为我只有 Mac ,所以目前仅有 Mac 版本,后续随缘更新 win 版
@kuhung 我最开始用的苹果内置的引擎,后面扫了一眼这个开源项目: https://github.com/argmaxinc/argmax-oss-swift ,把内置模型改成了 Whisper large-v3
@kuhung Claude 的解释,你可以参考看看:
⏺ argmax-oss-swift 在 VoxNote 里负责两件事:语音识别( WhisperKit )和说话人识别( SpeakerKit )。
一、WhisperKit — 语音转文字的核心引擎
VoxNote 自己只负责把音频文件读成 [Float] 浮点数组( AudioProcessor.loadAudioAsFloatArray ),之后全部交给 WhisperKit:
[Float] 音频数据
↓
whisperKit.transcribe(audioArray:decodeOptions:callback:segmentCallback:)
↓
[TranscriptionResult] ← 含完整文本 + 每段时间戳
VoxNote 给 WhisperKit 的配置参数:
- chunkingStrategy: .vad — 自动按静音分段
- wordTimestamps: true — 保留每段的时间戳(供说话人对齐用)
- concurrentWorkerCount: 16 — 并行加速
- detectLanguage: language == nil — 不指定语言时自动检测
转录过程中 WhisperKit 会不断回调进度( 0%→98%)和中间文本,VoxNote 把这些映射成 UI 上的 .transcribing(progress, partialText) 实时显示。
二、SpeakerKit — 说话人识别(可选功能)
用户开启说话人标注后,VoxNote 会同时跑两个任务:
同一份 [Float] 音频
├─ 并行 → speakerKit.diarize() → DiarizationResult (谁在什么时间说话)
└─ 顺序 → whisperKit.transcribe() → [TranscriptionResult](说了什么)
合并 → diarization.addSpeakerInfo(to: results, strategy: .subsegment)
↓
” [Speaker 1] 你好,请问……
[Speaker 2] 好的,我来解释一下……"
SpeakerKit 底层用的是 Pyannote v4 的 CoreML 模型,在本机完成推理,不联网。
我自己之前也拿开源项目魔改了一个 https://i.imgur.com/5eSAwX7.png ,最终使用下来感觉体验还是不如豆包啥的,功耗还低,你这个用着咋样