soniqo/speech-swift

GitHub: soniqo/speech-swift

面向 Apple Silicon 的端侧 AI 语音工具包,提供 ASR、TTS、语音到语音、说话人分离等全套语音处理能力,全部在本地运行。

Stars: 1061 | Forks: 130

# Speech Swift 面向 Apple Silicon 的 AI 语音模型,由 MLX Swift 和 CoreML 提供支持。 📖 阅读:[English](README.md) · [中文](README_zh.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [Español](README_es.md) · [Deutsch](README_de.md) · [Français](README_fr.md) · [हिन्दी](README_hi.md) · [Português](README_pt.md) · [Русский](README_ru.md) · [العربية](README_ar.md) · [Tiếng Việt](README_vi.md) · [Türkçe](README_tr.md) · [ไทย](README_th.md) 为 Mac 和 iOS 提供端侧语音识别、合成和理解。在 Apple Silicon 上本地运行——无需云服务、无需 API key、数据不离开你的设备。 **[📚 完整文档 →](https://soniqo.audio)** · **[🤗 HuggingFace 模型](https://huggingface.co/aufklarer)** · **[📝 博客](https://blog.ivan.digital)** · **[💬 Discord](https://discord.gg/TnCryqEMgu)**

Homebrew installs Verified public repositories: 15

soniqo%2Fspeech-swift | Trendshift

Local Speech AI on a MacBook — watch the 4-minute open-source library tour on YouTube

Local Speech AI on a MacBook — watch the 4-minute open-source library tour on YouTube

**用例:** [语音助手](https://soniqo.audio/voice-agents) · [转录](https://soniqo.audio/transcription) · [语音生成](https://soniqo.audio/speech-generation) ## 使用 Speech Swift 构建 15 个带有可验证 Speech Swift 包引用的公开仓库。 [Palmier Pro](https://github.com/palmier-io/palmier-pro) · [Anarlog](https://github.com/fastrepl/anarlog) · [ClawdHome](https://github.com/ThinkInAIXYZ/clawdhome) · [Jabber](https://github.com/rselbach/jabber) · [Ora](https://github.com/wuwangzhang1216/ora) · [VoxFlow](https://github.com/xingbofeng/VoxFlow) · [LokalBot](https://github.com/stevyhacker/lokalbot) · [Voicey](https://github.com/jonathanKingston/voicey) · [HushType](https://github.com/felixfu824/HushType) · [DexDictate macOS](https://github.com/westkitty/DexDictate_MacOS) · [Watchtower](https://github.com/aiwatchtowers/watchtower) · [Wishper App](https://github.com/irangareddy/wishper-app) · [FriSpeak](https://github.com/KSubedi/FriSpeak) · [Scribe](https://github.com/itchat/Scribe) · [VoicePen](https://github.com/dot-sk/VoicePen) **兼容 OpenAI 的应用:** [AnythingLLM](https://github.com/Mintplex-Labs/anything-llm) ([支持合并 WAV](https://github.com/Mintplex-Labs/anything-llm/pull/6012)) **功能分组:** STT / ASR · 对齐 · TTS · LLM 与翻译 · 语音到语音 · 增强/修复 · 音源分离 · 音乐/音频生成 · 唤醒词、VAD、说话人分离与身份识别 **STT / ASR** - **[Qwen3-ASR](https://soniqo.audio/guides/transcribe)** — 语音转文本(自动语音识别,52 种语言,MLX + CoreML) - **[WhisperASR](docs/models/whisper-asr.md)** — 通过原生 CoreML runtime 实现 Whisper Large-v3 Turbo 语音转文本(ANE,多语言) - **[Parakeet TDT](https://soniqo.audio/guides/parakeet)** — 通过 CoreML 实现语音转文本(Neural Engine,NVIDIA FastConformer + TDT 解码器,25 种语言) - **[Omnilingual ASR](https://soniqo.audio/guides/omnilingual)** — 语音转文本(Meta wav2vec2 + CTC,涵盖 32 种文字的 **1,672 种语言**,CoreML 300M + MLX 300M/1B/3B/7B)— iPhone 16 Pro 上 RTF 为 0.28 - **[Streaming Dictation](https://soniqo.audio/guides/dictate)** — 带有部分结果和话语结束检测的实时听写(Parakeet-EOU-120M)— iPhone 16 Pro 上 RTF 为 0.04 - **[Nemotron Streaming (Multilingual)](https://soniqo.audio/guides/nemotron)** — 具备原生标点和首字母大写的低延迟流式 ASR(NVIDIA Nemotron-3.5-ASR-Streaming-0.6B,CoreML + MLX,**40 种语言-方言**) - **[Nemotron Streaming (English)](https://soniqo.audio/guides/nemotron)** — 具备原生标点和首字母大写的低延迟流式 ASR(NVIDIA Nemotron-Speech-Streaming-0.6B,CoreML,仅限英语,比多语言版本更小且更快) **对齐** - **[Qwen3-ForcedAligner](https://soniqo.audio/guides/align)** — 词级时间戳对齐(音频 + 文本 → 时间戳) **TTS / 语音生成** - **[Qwen3-TTS](https://soniqo.audio/guides/speak)** — 文本转语音(最高质量、流式传输、自定义说话人、10 种语言) - **[CosyVoice TTS](https://soniqo.audio/guides/cosyvoice)** — 具备声音克隆、多说话人对话和情感标签的流式 TTS(9 种语言) - **[VoxCPM2](https://soniqo.audio/speech-generation)** — 具备声音克隆和指令驱动语音设计的 48 kHz 录音棚级质量 TTS(2B,MLX bf16/int8,30 种语言) - **[IndexTTS2](docs/models/indextts2.md)** — 从参考声音进行原生 MLX 声音克隆(IndexTeam IndexTTS-2,1.5B 级 fp16 bundle,支持说话人/情感/停顿控制) - **[F5-TTS](docs/models/f5-tts.md)** — 通过短参考片段和文本实现零样本声音克隆(SWivid F5-TTS v1 Base,DiT flow matching + Vocos,MLX fp16,24 kHz,英语 + 普通话;非商业许可) - **[Higgs TTS 3](docs/models/higgs-tts.md)** — 具备零样本声音克隆和内联情感/风格/SFX/韵律标签的对话式 TTS(Boson Higgs TTS 3,Qwen3-4B 主干,MLX bf16,24 kHz,100+ 种语言;研究/非商业许可) - **[Kokoro TTS](https://soniqo.audio/guides/kokoro)** — 端侧 TTS(82M,CoreML/Neural Engine,54 种声音,适配 iOS,10 种语言)— iPhone 16 Pro 上 RTF 为 0.08 - **[VibeVoice TTS](https://soniqo.audio/guides/vibevoice)** — 长文本/多说话人 TTS(Microsoft VibeVoice Realtime-0.5B + 1.5B,MLX,最长 90 分钟的播客/有声读物合成,EN/ZH) - **[Magpie TTS](https://soniqo.audio/guides/magpie)** — 多语言 TTS(NVIDIA Magpie-TTS Multilingual 357M,MLX INT8 411 MB 或 CoreML INT8 342 MB,9 种语言,5 种内置说话人,在 MLX 上支持流式传输) - **[Supertonic TTS](https://soniqo.audio/guides/supertonic)** — 端侧 flow-matching TTS(Supertone Supertonic-3 99M,CoreML/Neural Engine,31 种语言,10 种声音,免 G2P,44.1 kHz)— iPhone 16 Pro 上 RTF 为 0.15 - **[Chatterbox TTS](docs/models/chatterbox-tts.md)** — 具备零样本声音克隆的多语言 TTS(Resemble AI Chatterbox Multilingual,MLX fp16 约 1.3 GB,23 种 runtime 语言;希伯来语需要 niqqud,MIT),以及 Chatterbox Flash Core ML 基于预计算参考条件的 text-to-waveform。 - **[OmniVoice TTS](https://huggingface.co/aufklarer/OmniVoice-MLX-fp16)** — 具备零样本声音克隆的非自回归扩散 TTS(k2-fsa OmniVoice,Qwen3 主干,默认 MLX fp16 / 提供 int8,600+ 种语言,Apache-2.0) - **[Indic-Mio](docs/models/indic-mio-tts.md)** — 带有内联情感标记和可选参考声音克隆的印地语/印度语系 TTS(MLX,24 kHz) **LLM 与翻译** - **[Qwen3Chat](https://soniqo.audio/guides/chat)** — 端侧 LLM 聊天(Qwen3.5-0.8B MLX/CoreML,加上稠密版 Qwen3 4B 和 Gemma 4 E2B/E4B MLX 后端,流式输出 token) - **[FunctionGemma](https://soniqo.audio/guides/function-calls)** — 用于结构化函数/工具调用的端侧 LLM(Gemma 3 270M,CoreML 8-bit palettized,Neural Engine,M5 Pro 上约 252 tok/s · iPhone 16 Pro 上 128 tok/s) - **[MADLAD-400](https://soniqo.audio/guides/translate)** — 支持 400+ 种语言的多种语言互译(3B,MLX INT4 + INT8,T5 v1.1,Apache 2.0) **语音到语音与语音助手** - **[Hibiki Zero-3B](https://soniqo.audio/guides/audio-translate)** — 流式语音到语音翻译(FR/ES/PT/DE → EN,MLX INT4 + INT8,Kyutai Moshi/Mimi 技术栈,CC-BY-4.0) - **[PersonaPlex](https://soniqo.audio/guides/respond)** — 全双工语音到语音(7B,音频输入 → 音频输出,18 种声音预设) - **[Audio2Face-3D](docs/models/audio2face3d.md)** — 针对虚拟形象的声音驱动面部动画(NVIDIA Audio2Face-3D v2.3 Mark,301 个面部系数,MLX) **增强、分离与音频生成** - **[DeepFilterNet3](https://soniqo.audio/guides/denoise)** — 实时降噪(2.1M 参数,48 kHz)。超过 60 秒单次处理上限的长音频会通过交叉淡入淡出自动分块——参见 `enhanceChunked(...)` - **[Source Separation](https://soniqo.audio/guides/separate)** — 通过 HTDemucs(Demucs v4)+ Open-Unmix 进行音乐源分离(UMX-HQ / UMX-L,4 条音轨:人声/鼓声/低音/其他,44.1 kHz 立体声) - **[MAGNeT](https://soniqo.audio/guides/compose)** — 文本到音乐生成(Meta MAGNeT Small 300M / Medium 1.5B,MLX INT8,32 kHz 单声道的 30 秒片段,掩码并行解码) - **[Stable Audio 3](docs/models/stable-audio-3.md)** — 文本到音频/音乐生成(Stable Audio 3 Medium,MLX INT8/INT4,44.1 kHz 立体声,可变长度) - **[FlashSR](https://soniqo.audio/guides/upsample)** — 音频超分辨率(FlashSR ICASSP 2025,MLX,48 kHz 单声道,一步蒸馏扩散,INT4 363 MB / INT8 720 MB) **轮次检测、说话人分离与身份识别** - **[Wake-word](https://soniqo.audio/guides/wake-word)** — 端侧关键词唤醒(KWS Zipformer 3M,CoreML,26 倍实时速度,可配置关键词列表) - **[VAD](https://soniqo.audio/guides/vad)** — 语音活动检测(Silero 流式,Pyannote 离线,FireRedVAD 100+ 种语言) - **[Speaker Diarization](https://soniqo.audio/guides/diarize)** — 谁在什么时间说话(Pyannote pipeline,Sortformer 端到端在 Neural Engine 上运行)——现支持增量流式会话(稳定的说话人 ID,每 480 ms 更新) - **[Speaker Embeddings](https://soniqo.audio/guides/embed-speaker)** — WeSpeaker ResNet34(256 维),ReDimNet2-B6 命名身份识别(192 维),CAM++(192 维) 相关论文:[Qwen3-ASR](https://arxiv.org/abs/2601.21337) (Alibaba) · [Qwen3-TTS](https://arxiv.org/abs/2601.15621) (Alibaba) · [Omnilingual ASR](https://arxiv.org/abs/2511.09690) (Meta) · [Parakeet TDT](https://arxiv.org/abs/2304.06795) (NVIDIA) · [CosyVoice 3](https://arxiv.org/abs/2505.17589) (Alibaba) · [Kokoro](https://arxiv.org/abs/2301.01695) (StyleTTS 2) · [PersonaPlex](https://arxiv.org/abs/2602.06053) (NVIDIA) · [Mimi](https://arxiv.org/abs/2410.00037) (Kyutai) · [Hibiki](https://arxiv.org/abs/2502.03382) (Kyutai) · [Sortformer](https://arxiv.org/abs/2409.06656) (VIDIA) 端侧 iPhone 16 Pro CoreML 性能基准(RTF,tokens/s,峰值内存):[docs/benchmarks/ios-coreml.md](docs/benchmarks/ios-coreml.md)。 ## 新闻 - **2026 年 4 月 19 日** — [Apple Silicon 上的 MLX 与 CoreML 对比——选择正确后端的实用指南](https://blog.ivan.digital/mlx-vs-coreml-on-apple-silicon-a-practical-guide-to-picking-the-right-backend-and-why-you-should-f77ddea7b27a) - **2026 年 3 月 20 日** — [我们用完全在 Mac 上运行的 600M 模型击败了 Whisper Large v3](https://blog.ivan.digital/we-beat-whisper-large-v3-with-a-600m-model-running-entirely-on-your-mac-20e6ce191174) - **2026 年 2 月 26 日** — [Apple Silicon 上的说话人分离与语音活动检测——基于 MLX 的原生 Swift](https://blog.ivan.digital/speaker-diarization-and-voice-activity-detection-on-apple-silicon-native-swift-with-mlx-92ea0c9aca0f) - **2026 年 2 月 23 日** — [Apple Silicon 上的 NVIDIA PersonaPlex 7B——使用 MLX 和原生 Swift 实现全双工语音到语音](https://blog.ivan.digital/nvidia-personaplex-7b-on-apple-silicon-full-duplex-speech-to-speech-in-native-swift-with-mlx-0aa5276f2e23) - **2026 年 2 月 12 日** — [Qwen3-ASR Swift:面向 Apple Silicon 的端侧 ASR + TTS——架构与性能基准](https://blog.ivan.digital/qwen3-asr-swift-on-device-asr-tts-for-apple-silicon-architecture-and-benchmarks-27cbf1e4463f) ## 快速开始 将该包添加到你的 `Package.swift`: ``` .package(url: "https://github.com/soniqo/speech-swift", branch: "main") ``` 只导入你需要的模块——每个模型都是独立的 SPM 库,因此你无需为你不使用的部分付出代价: ``` .product(name: "ParakeetStreamingASR", package: "speech-swift"), .product(name: "SpeechUI", package: "speech-swift"), // optional SwiftUI views ``` **用 3 行代码转录音频缓冲区:** ``` import ParakeetStreamingASR let model = try await ParakeetStreamingASRModel.fromPretrained() let text = try model.transcribeAudio(audioSamples, sampleRate: 16000) ``` **带部分结果的实时流式传输:** ``` for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) { print(partial.isFinal ? "FINAL: \(partial.text)" : "... \(partial.text)") } ``` **用约 10 行代码实现的 SwiftUI 听写视图:** ``` import SwiftUI import ParakeetStreamingASR import SpeechUI @MainActor struct DictateView: View { @State private var store = TranscriptionStore() var body: some View { TranscriptionView(finals: store.finalLines, currentPartial: store.currentPartial) .task { let model = try? await ParakeetStreamingASRModel.fromPretrained() guard let model else { return } for await p in model.transcribeStream(audio: samples, sampleRate: 16000) { store.apply(text: p.text, isFinal: p.isFinal) } } } } ``` `SpeechUI` 仅提供 `TranscriptionView`(最终结果 + 部分结果)和 `TranscriptionStore`(流式 ASR 适配器)。请使用 AVFoundation 进行音频可视化和播放。 可用的 SPM 产物:`Qwen3ASR`, `WhisperASR`, `Qwen3TTS`, `Qwen3TTSCoreML`, `ParakeetASR`, `ParakeetStreamingASR`, `NemotronStreamingASR`, `OmnilingualASR`, `KokoroTTS`, `SupertonicTTS`, `VibeVoiceTTS`, `CosyVoiceTTS`, `VoxCPM2TTS`, `IndexTTS2TTS`, `F5TTS`, `HiggsTTS`, `ChatterboxTTS`, `OmniVoiceTTS`, `IndicMioTTS`, `FishAudioTTS`, `MagpieTTS`, `MagpieTTSCoreML`, `MAGNeTMusicGen`, `StableAudio3MusicGen`, `FlashSR`, `PersonaPlex`, `Audio2Face3D`, `HibikiTranslate`, `MADLADTranslation`, `SpeechVAD`, `SpeechWakeWord`, `SpeechEnhancement`, `SpeechRestoration`, `SourceSeparation`, `Qwen3Chat`, `FunctionGemma`, `SpeechCore`, `SpeechUI`, `AudioCommon`。 ## 模型 下方为精简视图。**[包含大小、量化方式、下载 URL 和内存表格的完整模型目录 → soniqo.audio/architecture](https://soniqo.audio/architecture)**。 | 模型 | 任务 | 后端 | 大小 | 语言 | |-------|------|----------|-------|-----------| | [Qwen3-ASR](https://soniqo.audio/guides/transcribe) | 语音 → 文本 | MLX, CoreML (混合) | 0.6B, 1.7B | 52 | | [WhisperASR](docs/models/whisper-asr.md) | 语音 → 文本 | CoreML (ANE) | Large-v3 Turbo | 多语言 | | [Parakeet TDT](https://soniqo.audio/guides/parakeet) | 语音 → 文本 | CoreML (ANE) | 0.6B | 25 种欧洲语言 | | [Parakeet EOU](https://soniqo.audio/guides/dictate) | 语音 → 文本 (流式) | CoreML (ANE) | 120M | 25 种欧洲语言 | | [Nemotron Streaming (Multilingual)](https://soniqo.audio/guides/nemotron) | 语音 → 文本 (流式,带标点) | CoreML (ANE), MLX | 0.6B | **40** | | [Nemotron Streaming (English)](https://soniqo.audio/guides/nemotron) | 语音 → 文本 (流式,带标点) | CoreML (ANE) | 0.6B | EN | | [Omnilingual ASR](https://soniqo.audio/guides/omnilingual) | 语音 → 文本 | CoreML (ANE), MLX | 300M / 1B / 3B / 7B | **[1,672](https://github.com/facebookresearch/omnilingual-asr/blob/main/src/omnilingual_asr/models/wav2vec2_llama/lang_ids.py)** | | [Qwen3-ForcedAligner](https://soniqo.audio/guides/align) | 音频 + 文本 → 时间戳 | MLX, CoreML | 0.6B | 多语言 | | [Qwen3-TTS](https://soniqo.audio/guides/speak) | 文本 → 语音 | MLX, CoreML | 0.6B, 1.7B | 10 | | [CosyVoice3](https://soniqo.audio/guides/cosyvoice) | 文本 → 语音 | MLX | 0.5B | 9 | | [VoxCPM2](https://soniqo.audio/speech-generation) | 文本 → 语音 (48 kHz,语音设计 + 克隆) | MLX | 2B (bf16/int8) | 30 | | [IndexTTS2](docs/models/indextts2.md) | 文本 → 语音 (零样本声音克隆) | MLX | 1.5B 级 (fp16) | EN/ZH | | [F5-TTS](docs/models/f5-tts.md) | 文本 → 语音 (零样本声音克隆) | MLX | 336M (fp16) | EN/ZH | | [Higgs TTS 3](docs/models/higgs-tts.md) | 文本 → 语音 (对话式,零样本声音克隆) | MLX | 4B (bf16) | 100+ | | [Kokoro-82M](https://soniqo.audio/guides/kokoro) | 文本 → 语音 | CoreML (ANE) | 82M | 10 | | [Supertonic-3](https://soniqo.audio/guides/supertonic) | 文本 → 语音 (44.1 kHz,flow-matching,免 G2P) | CoreML (ANE) | 99M | 31 | | [VibeVoice Realtime-0.5B](https://soniqo.audio/guides/vibevoice) | 文本 → 语音 (长文本,多说话人) | MLX | 0.5B | EN/ZH | | [VibeVoice 1.5B](https://soniqo.audio/guides/vibevoice) | 文本 → 语音 (最长 90 分钟播客) | MLX | 1.5B | EN/ZH | | [Magpie-TTS Multilingual](https://soniqo.audio/guides/magpie) | 文本 → 语音 (5 种内置说话人,流式传输) | MLX / CoreML | 357M (MLX INT8, CoreML INT8) | 9 (CoreML 不含 JA) | | [Chatterbox Multilingual](docs/models/chatterbox-tts.md) | 文本 → 语音 (零样本克隆) | MLX | 0.8B (fp16) | 23 (HE 需要 niqqud) | | [Chatterbox Flash](docs/models/chatterbox-tts.md#chatterbox-flash-core-ml) | 文本 → 语音 (带外部参考条件的声音克隆) | CoreML + MLX conditioning bridge | 0.8B (fp16 Core ML) | EN | | [OmniVoice](https://huggingface.co/aufklarer/OmniVoice-MLX-fp16) | 文本 → 语音 (NAR 扩散,零样本克隆) | MLX | 0.8B (默认 fp16 / int8) | **600+** | | [Indic-Mio](docs/models/indic-mio-tts.md) | 文本 → 语音 (印地语/印度语系,情感标签,声音克隆) | MLX | fp16 | 印地语 / 印度语系 | | [Fish Audio S2 Pro](docs/models/fish-audio-s2-pro.md) | 文本 → 语音 (零样本克隆,显式风格标记) | MLX | 0.5B 级 (fp16) | 多语言 | | [Qwen3.5 Chat](docs/models/qwen35-chat.md) | 文本 → 文本 (LLM) | MLX, CoreML | 0.8B | 多语言 | | [Qwen3 Dense Chat](docs/models/qwen3-dense-chat.md) | 文本 → 文本 (LLM) | MLX | 4B | 多语言 | | [Gemma 4 Chat](docs/models/gemma4-chat.md) | 文本 → 文本 (LLM) | MLX | E2B / E4B (4 位) | 多语言 | | [FunctionGemma](docs/models/function-gemma.md) | 文本 → 工具调用 (LLM) | CoreML | 270M | EN 微调 | | [MADLAD-400](https://soniqo.audio/guides/translate) | 文本 → 文本 (翻译) | MLX | 3B | **400+** | | [Hibiki Zero-3B](https://soniqo.audio/guides/audio-translate) | 语音 → 语音 (翻译) | MLX | 3B | FR/ES/PT/DE → EN | | [PersonaPlex](https://soniqo.audio/guides/respond) | 语音 → 语音 | MLX | 7B | EN | | [Audio2Face-3D](docs/models/audio2face3d.md) | 语音 → 面部动画 | MLX | v2.3 Mark | 语言无关 | | [Silero VAD](https://soniqo.audio/guides/vad) | 语音活动检测 | MLX, CoreML | 309K | 语言无关 | | [KWS Zipformer](docs/models/kws-zipformer.md) | 音频 → 唤醒词 | CoreML (ANE) | 3M | EN/自定义关键词 | | [Pyannote](https://soniqo.audio/guides/diarize) | VAD + 分离 | MLX | 1.5M | 语言无关 | | [Pyannote Community-1](https://huggingface.co/aufklarer/Pyannote-Community-1-CoreML) | 分离 + 说话人嵌入 | CoreML (ANE) + Swift VBx | 8.35M | 语言无关 | | [Sortformer](https://huggingface.co/aufklarer/Sortformer-Diarization-CoreML) | [分离 (E2E),增量流式](https://soniqo.audio/guides/diarize) | CoreML (ANE) | 117M | 语言无关 | | [Ultra-Sortformer 8spk](https://huggingface.co/aufklarer/Ultra-Sortformer-Diarization-CoreML) | 分离 (E2E,最多 8 名说话人,实验性) | CoreML (ANE) | 117M | 语言无关 | | [DeepFilterNet3](https://soniqo.audio/guides/denoise) | 语音增强 | CoreML | 2.1M | 语言无关 | | [Sidon](https://soniqo.audio/guides/restore) | 语音修复 (降噪 + 去混响,48 kHz) | CoreML | w2v-BERT 2.0 + DAC (fp16/int8) | 语言无关 | | [HTDemucs (Demucs v4)](https://soniqo.audio/guides/separate) | 音源分离 | MLX | 168M | 语言无关 | | [Open-Unmix](https://soniqo.audio/guides/separate) | 音源分离 | MLX | 8.6M | 语言无关 | | [MAGNeT](https://soniqo.audio/guides/compose) | 文本 → 音乐 (30s @ 32 kHz) | MLX | 300M / 1.5B (int4/int8) | 英文提示词 | | [Stable Audio 3](docs/models/stable-audio-3.md) | 文本 → 音乐/音频 (44.1 kHz 立体声) | MLX | Medium 1.4B (int4/int8) | 英文提示词 | | [FlashSR](https://soniqo.audio/guides/upsample) | 音频超分辨率 (48 kHz) | MLX | 363 MB / 720 MB (int4/int8) | 语言无关 | | [WeSpeaker](https://soniqo.audio/guides/embed-speaker) | 说话人嵌入 | MLX, CoreML | 6.6M | 语言无关 | | [ReDimNet2-B6](https://huggingface.co/aufklarer/ReDimNet2-B6-CoreML) | 命名声音身份 | CoreML | 12.3M | 语言无关 | ## 安装 ### Homebrew 需要原生 ARM 版 Homebrew (`/opt/homebrew`)。不支持 Rosetta/x86_64 版 Homebrew。 ``` brew install speech ``` 接着: ``` speech transcribe recording.wav speech speak "Hello world" speech translate "Hello, how are you?" --to es speech respond --input question.wav --transcript speech-server --port 8080 # local HTTP / WebSocket server (OpenAI-compatible /v1/realtime + /v1/audio/transcriptions) ``` **[完整的 CLI 参考 →](https://soniqo.audio/cli)** ### Swift Package Manager ``` dependencies: [ .package(url: "https://github.com/soniqo/speech-swift", branch: "main") ] ``` 只导入你需要的部分——每个模型都是独立的 SPM target: ``` import Qwen3ASR // Speech recognition (MLX) import WhisperASR // Whisper Large-v3 Turbo (CoreML) import ParakeetASR // Speech recognition (CoreML, batch) import ParakeetStreamingASR // Streaming dictation with partials + EOU import NemotronStreamingASR // Multilingual streaming ASR with native punctuation (0.6B, 40 langs) import OmnilingualASR // 1,672 languages (CoreML + MLX) import Qwen3TTS // Text-to-speech import CosyVoiceTTS // Text-to-speech with voice cloning import VoxCPM2TTS // 48 kHz TTS with voice cloning + voice design (2B) import IndexTTS2TTS // Native MLX voice cloning from reference audio import F5TTS // Zero-shot voice cloning (DiT flow matching + Vocos) import HiggsTTS // Conversational TTS + cloning (Qwen3 backbone, control tags) import KokoroTTS // Text-to-speech (iOS-ready) import VibeVoiceTTS // Long-form / multi-speaker TTS (EN/ZH) import MagpieTTS // Multilingual TTS (NVIDIA Magpie 357M, MLX, 9 langs) import MagpieTTSCoreML // Magpie CoreML backend (hybrid CoreML + MLX, 8 langs) import FishAudioTTS // Experimental Fish Audio S2 Pro runtime with voice cloning import IndicMioTTS // Hindi/Indic TTS with emotion markers import Qwen3Chat // On-device LLM chat import FunctionGemma // On-device tool-call LLM import MADLADTranslation // Many-to-many translation across 400+ languages import HibikiTranslate // Streaming speech-to-speech translation (FR/ES/PT/DE → EN) import PersonaPlex // Full-duplex speech-to-speech import SpeechVAD // VAD + speaker diarization + embeddings import SpeechWakeWord // Wake-word / keyword spotting import SpeechEnhancement // Noise suppression import SpeechRestoration // Speech restoration — denoise + dereverb (Sidon, CoreML, 48 kHz) import SourceSeparation // Music source separation (Open-Unmix, 4 stems) import StableAudio3MusicGen // Text-to-audio/music generation (Stable Audio 3) import SpeechUI // SwiftUI components for streaming transcripts import AudioCommon // Shared protocols and utilities ``` ### 系统要求 - Swift 6+,Xcode 16+(包含 Metal Toolchain) - macOS 15+ (Sequoia) 或 iOS 18+,Apple Silicon (M1/M2/M3/M4) macOS 15 / iOS 18 的最低版本要求来自于 [MLState](https://developer.apple.com/documentation/coreml/mlstate)——这是 Apple 的持久化 ANE 状态 API,供ML pipeline(Qwen3-ASR、Qwen3-Chat、Qwen3-TTS)使用,以便在 token 步骤中将 KV 缓存保留在 Neural Engine 上。 ### 从源码构建 ``` git clone https://github.com/soniqo/speech-swift cd speech-swift make build ``` `make build` 会编译 Swift 包**以及** MLX Metal 着色器库。Metal 库是进行 GPU 推理所必需的——如果没有它,你会在运行时看到 `Failed to load the default metallib`。使用 `make debug` 进行调试构建,使用 `make test` 运行测试套件。 **[完整的构建和安装指南 →](https://soniqo.audio/getting-started)** ## 演示应用 - **[DictateDemo](Examples/DictateDemo/)**([文档](https://soniqo.audio/guides/dictate))— macOS 菜单栏流式听写,带有实时部分结果、VAD 驱动的话语结束检测以及一键复制功能。作为后台 agent 运行(Parakeet-EOU-120M + Silero VAD)。 - **[iOSEchoDemo](Examples/iOSEchoDemo/)** — iOS 回声演示(Parakeet ASR + Kokoro TTS)。支持真机和模拟器。 - **[PersonaPlexDemo](Examples/PersonaPlexDemo/)** — 带有麦克风输入、VAD 和多轮上下文的对话式语音助手。macOS 平台。在 M2 Max 上 RTF 约为 0.94(比实时更快)。 - **[SpeechDemo](Examples/SpeechDemo/)** — 在标签页界面中进行听写和 TTS 合成。macOS 平台。 每个演示应用的 README 中都包含构建说明。 ## 代码示例 以下代码片段展示了各个领域的最简路径。每个部分都链接到 [soniqo.audio](https://soniqo.audio) 上的完整指南,其中包含配置选项、多种后端、流式传输模式和 CLI 配方。 ### 语音转文本 — [完整指南 →](https://soniqo.audio/guides/transcribe) ``` import Qwen3ASR let model = try await Qwen3ASRModel.fromPretrained() let text = model.transcribe(audio: audioSamples, sampleRate: 16000) ``` 替代后端:[WhisperASR](docs/inference/whisper-asr-inference.md)(Whisper Large-v3 Turbo,原生 CoreML),[Parakeet TDT](https://soniqo.audio/guides/parakeet)(CoreML,32 倍实时速度),[Omnilingual ASR](https://soniqo.audio/guides/omnilingual)(1,672 种语言,CoreML 或 MLX),[流式听写](https://soniqo.audio/guides/dictate)(实时部分结果)。 ### 强制对齐 — [完整指南 →](https://soniqo.audio/guides/align) ``` import Qwen3ASR let aligner = try await Qwen3ForcedAligner.fromPretrained() let aligned = aligner.align( audio: audioSamples, text: "Can you guarantee that the replacement part will be shipped tomorrow?", sampleRate: 24000 ) for word in aligned { print("[\(word.startTime)s - \(word.endTime)s] \(word.text)") } ``` ### 文本转语音 — [完整指南 →](https://soniqo.audio/guides/speak) ``` import Qwen3TTS import AudioCommon let model = try await Qwen3TTSModel.fromPretrained() let audio = model.synthesize(text: "Hello world", language: "english") try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL) ``` 替代 TTS 引擎:[CosyVoice3](https://soniqo.audio/guides/cosyvoice)(流式传输 + 声音克隆 + 情感标签),[Kokoro-82M](https://soniqo.audio/guides/kokoro)(适配 iOS,54 种声音),[VibeVoice](https://soniqo.audio/guides/vibevoice)(长篇播客 / 多说话人,EN/ZH),[Fish Audio S2 Pro](docs/inference/fish-audio-s2-pro.md)(实验性零样本克隆 + 中括号风格标记),[声音克隆](https://soniqo.audio/guides/voice-cloning)。 ### 语音到语音 — [完整指南 →](https://soniqo.audio/guides/respond) ``` import PersonaPlex let model = try await PersonaPlexModel.fromPretrained() let responseAudio = model.respond(userAudio: userSamples) // 24 kHz mono Float32 output ready for playback ``` ### LLM 聊天 — [完整指南 →](https://soniqo.audio/guides/chat) ``` import Qwen3Chat import FunctionGemma let chat = try await Qwen35MLXChat.fromPretrained() chat.chat(messages: [(.user, "Explain MLX in one sentence")]) { token, isFinal in print(token, terminator: "") } ``` ### 翻译 — [完整指南 →](https://soniqo.audio/guides/translate) ``` import MADLADTranslation let translator = try await MADLADTranslator.fromPretrained() let es = try translator.translate("Hello, how are you?", to: "es") // → "Hola, ¿cómo estás?" ``` ### 语音翻译 — [完整指南 →](https://soniqo.audio/guides/audio-translate) ``` import HibikiTranslate import AudioCommon let model = try await HibikiTranslateModel.fromPretrained() let pcm = try AudioFileLoader.load(url: input, targetSampleRate: 24000) let (englishAudio, textTokens) = model.translate( sourceAudio: pcm, sourceLanguage: .fr ) // Hibiki Zero-3B — FR/ES/PT/DE → EN, on-device, streaming Mimi codec ``` ### 语音活动检测 — [完整指南 →](https://soniqo.audio/guides/vad) ``` import SpeechVAD let vad = try await SileroVADModel.fromPretrained() let segments = vad.detectSpeech(audio: samples, sampleRate: 16000) for s in segments { print("\(s.startTime)s → \(s.endTime)s") } ``` ### 说话人分离 — [完整指南 →](https://soniqo.audio/guides/diarize) ``` import SpeechVAD let diarizer = try await DiarizationPipeline.fromPretrained() let segments = diarizer.diarize(audio: samples, sampleRate: 16000) for s in segments { print("Speaker \(s.speakerId): \(s.startTime)s - \(s.endTime)s") } ``` ### 语音增强 — [完整指南 →](https://soniqo.audio/guides/denoise) ``` import SpeechEnhancement let denoiser = try await DeepFilterNet3Model.fromPretrained() let clean = try denoiser.enhance(audio: noisySamples, sampleRate: 48000) ``` ### 语音修复 — [完整指南 →](https://soniqo.audio/guides/restore) 使用 [Sidon](https://arxiv.org/abs/2509.17052) 进行联合降噪**和**去混响(w2v-BERT 2.0 预测器 + DAC 声码器,Core ML)。与普通的降噪器不同,Sidon 在训练时注重保留说话人身份,因此非常适合在 TTS 之前清理嘈杂或带有混响的声音克隆参考样本。输入为 16 kHz;输出为 48 kHz 单声道。 ``` import SpeechRestoration let restorer = try await SpeechRestorer.fromPretrained() // .fp16 (default) or .int8 let clean = try restorer.restore(audio: noisySamples, sampleRate: 16000) // → 48 kHz ``` 通过 CLI: ``` speech restore noisy.wav -o clean.wav # denoise + dereverb, 48 kHz output speech restore noisy.wav --variant int8 # smaller, lower peak RAM # 在 TTS 之前清理 voice-cloning 参考(可选;保留说话人身份): speech speak "Hello" --engine voxcpm2 --voice-sample ref.wav --clean-reference ``` ### 语音流水线 (ASR → LLM → TTS) — [完整指南 →](https://soniqo.audio/voice-agents) ``` import SpeechCore let pipeline = VoicePipeline( stt: parakeetASR, tts: qwen3TTS, vad: sileroVAD, config: .init(mode: .voicePipeline), onEvent: { event in print(event) } ) pipeline.start() pipeline.pushAudio(micSamples) ``` `VoicePipeline` 是实时语音助手状态机(由 [speech-core](https://github.com/soniqo/speech-core) 提供支持),具备 VAD 驱动的轮次检测、打断处理和即时 STT。它连接任何 `SpeechRecognitionModel` + `SpeechGenerationModel` + `StreamingVADProvider`。 ### HTTP API 服务器 ``` speech-server --port 8080 ``` 通过 HTTP REST + WebSocket endpoint 公开每个模型,包括兼容 OpenAI 的 API:位于 `/v1/realtime` 的 Realtime WebSocket 和位于 `/v1/audio/transcriptions` 的转录 REST endpoint。参见 [`Sources/AudioServer/`](Sources/AudioServer/)。 ## 架构 speech-swift 被拆分为每个模型对应一个 SPM target,以便使用者只需为导入的内容付出代价。共享基础设施位于 `AudioCommon`(协议、音频 I/O、HuggingFace 下载器、`SentencePieceModel`)和 `MLXCommon`(权重加载、`QuantizedLinear` 辅助程序、`SDPA` 多头注意力辅助程序)中。 **[包含后端、内存表和模块映射的完整架构图 → soniqo.audio/architecture](https://soniqo.audio/architecture)** · **[API 参考 → soniqo.audio/api](https://soniqo.audio/api)** · **[性能基准测试 → soniqo.audio/benchmarks](https://soniqo.audio/benchmarks)** 本地文档(仓库内): - **模型:** [Qwen3-ASR](docs/models/asr-model.md) · [WhisperASR](docs/models/whisper-asr.md) · [Qwen3-TTS](docs/models/tts-model.md) · [CosyVoice](docs/models/cosyvoice-tts.md) · [Kokoro](docs/models/kokoro-tts.md) · [VoxCPM2](docs/models/voxcpm2-tts.md) · [IndexTTS2](docs/models/indextts2.md) · [F5-TTS](docs/models/f5-tts.md) · [Higgs TTS 3](docs/models/higgs-tts.md) · [VibeVoice](docs/models/vibevoice.md) · [Supertonic](docs/models/supertonic-tts.md) · [Chatterbox](docs/models/chatterbox-tts.md) · [Indic-Mio](docs/models/indic-mio-tts.md) · [Fish Audio S2 Pro](docs/models/fish-audio-s2-pro.md) · [Magpie TTS](docs/models/magpie-tts.md) · [Parakeet TDT](docs/models/parakeet-asr.md) · [Parakeet Streaming](docs/models/parakeet-streaming-asr.md) · [Nemotron Streaming](docs/models/nemotron-asr-streaming.md) · [Omnilingual ASR](docs/models/omnilingual-asr.md) · [PersonaPlex](docs/models/personaplex.md) · [Hibiki](docs/models/hibiki.md) · [MADLAD-400](docs/models/madlad-translation.md) · [FunctionGemma](docs/models/function-gemma.md) · [Qwen3.5 Chat](docs/models/qwen35-chat.md) · [Gemma 4 Chat](docs/models/gemma4-chat.md) · [Qwen3 Dense Chat](docs/models/qwen3-dense-chat.md) · [FireRedVAD](docs/models/fireredvad.md) · [KWS Zipformer](docs/models/kws-zipformer.md) · [Sidon](docs/models/sidon.md) · [音源分离](docs/models/source-separation.md) · [HTDemucs](docs/models/htdemucs.md) · [MAGNeT](docs/models/magnet-music-gen.md) · [Stable Audio 3](docs/models/stable-audio-3.md) · [FlashSR](docs/models/flashsr.md) · [Audio2Face-3D](docs/models/audio2face3d.md) - **推理:** [Qwen3-ASR](docs/inference/qwen3-asr-inference.md) · [WhisperASR](docs/inference/whisper-asr-inference.md) · [Parakeet TDT](docs/inference/parakeet-asr-inference.md) · [Parakeet Streaming](docs/inference/parakeet-streaming-asr-inference.md) · [Nemotron Streaming](docs/inference/nemotron-asr-streaming.md) · [Omnilingual ASR](docs/inference/omnilingual-asr-inference.md) · [TTS](docs/inference/qwen3-tts-inference.md) · [VoxCPM2](docs/inference/voxcpm2-inference.md) · [IndexTTS2](docs/inference/indextts2.md) · [F5-TTS](docs/inference/f5-tts.md) · [Higgs TTS 3](docs/inference/higgs-tts.md) · [VibeVoice](docs/inference/vibevoice-inference.md) · [Fish Audio S2 Pro](docs/inference/fish-audio-s2-pro.md) · [Magpie TTS](docs/inference/magpie-tts.md) · [Hibiki](docs/inference/hibiki-inference.md) · [MADLAD-400](docs/inference/madlad-translation.md) · [MAGNeT](docs/inference/magnet-music-gen.md) · [Stable Audio 3](docs/inference/stable-audio-3.md) · [FlashSR](docs/inference/flashsr.md) · [强制对齐器](docs/inference/forced-aligner.md) · [Silero VAD](docs/inference/silero-vad.md) · [FireRedVAD](docs/inference/fireredvad.md) · [唤醒词](docs/inference/wake-word.md) · [说话人分离](docs/inference/speaker-diarization.md) · [语音增强](docs/inference/speech-enhancement.md) · [Sidon](docs/inference/sidon.md) · [缓存/离线](docs/inference/cache-and-offline.md) - **参考:** [共享协议](docs/shared-protocols.md) ## 缓存配置 模型权重在首次使用时从 HuggingFace 下载并缓存到 `~/Library/Caches/qwen3-speech/`。可通过 `QWEN3_CACHE_DIR`(CLI)或 `cacheDir:`(Swift API)进行覆盖。所有 `fromPretrained()` 入口点也支持 `offlineMode: true`,以便在权重已缓存时跳过网络连接。 中国大陆的用户(或者任何 `huggingface.co` 访问缓慢或被封锁的地区)可以通过设置 `HF_ENDPOINT` 从镜像站获取,例如 `export HF_ENDPOINT=https://hf-mirror.com`。 有关完整详细信息(包括沙盒化的 iOS 容器路径),请参见 [`docs/inference/cache-and-offline.md`](docs/inference/cache-and-offline.md)。 ## MLX Metal 库 如果你在运行时看到 `Failed to load the default metallib`,说明缺少 Metal 着色器库。在手动执行 `swift build` 之后,请运行 `make build` 或 `./scripts/build_mlx_metallib.sh release`。如果缺少 Metal Toolchain,请先安装它: ``` xcodebuild -downloadComponent MetalToolchain ``` ## 测试 ``` make test # full suite (unit + E2E with model downloads) swift test --skip E2E # unit only (CI-safe, no downloads) swift test --filter Qwen3ASRTests # specific module ``` E2E 测试类使用 `E2E` 前缀,以便 CI 可以使用 `--skip E2E` 将其过滤掉。有关完整的测试约定,请参见 [CLAUDE.md](CLAUDE.md#testing)。 ## 贡献 欢迎提交 PR——无论是 bug 修复、新模型集成还是文档改进。请 Fork 本仓库,创建功能分支,运行 `make build && make test`,然后向 `main` 提交 PR。 ## 许可证 Apache 2.0
标签:Apple Silicon, CoreML, MLX, 人工智能, 用户模式Hook绕过, 语音合成(TTS), 语音处理, 语音识别(ASR)