Kokoro TTS
Kokoro-82M 是一个轻量级、非自回归的文本转语音模型,基于 StyleTTS 2 与 ISTFTNet 声码器。它通过 CoreML 完全运行在 Neural Engine 上,以单次前向从文本输入生成自然的 24 kHz 语音。
iOS 就绪
Kokoro-82M 专为端侧 iOS 部署而设计。82M 参数(1 个桶、INT8 约 80 MB),可轻松适配 iPhone 与 iPad。CoreML 在 Neural Engine 上运行,让 GPU 保持空闲用于其他任务。
支持的语言
| 语言 | 代码 | 示例音色 |
|---|---|---|
| 英文(美国) | en | af_heart, am_adam, af_sky |
| 英文(英国) | en | bf_emma, bm_george |
| 西班牙文 | es | ef_dora |
| 法文 | fr | ff_siwis |
| 印地文 | hi | hf_alpha, hm_omega |
| 意大利文 | it | if_sara |
| 日文 | ja | jf_alpha, jm_omega |
| 葡萄牙文 | pt | pf_dora |
| 中文 | zh | zf_xiaobei, zm_yunjian |
| 韩文 | ko | kf_somi |
共 50 种预设音色。音色命名约定:[language][gender]_[name] — 例如 af_heart = American Female "Heart"。
架构
Kokoro 使用 3 阶段 CoreML 流水线。没有采样循环 — 所有阶段都是非自回归前向传递,在第 1 和第 2 阶段之间有一次 Swift 端的对齐步骤。
3 阶段流水线
| 阶段 | 模型 | 输入 | 输出 |
|---|---|---|---|
| 1. Duration | duration.mlmodelc | 音素 token + 音色嵌入 + 速度 | 时长、韵律特征、文本编码 |
| — | Swift 对齐 | 时长 + 阶段 1 特征 | 对齐后的韵律与文本特征 |
| 2. Prosody | prosody.mlmodelc | 对齐韵律特征 + 风格 | F0(音高)+ 噪声预测 |
| 3. Decoder | decoder_*.mlmodelc | 对齐文本 + F0 + 噪声 + 风格 | 24 kHz 音频波形 |
音素桶(时长模型)
时长模型使用枚举输入形状。输入会填充至最小的可容纳桶:
| 桶 | 最大音素数 | 使用场景 |
|---|---|---|
| p16 | 16 | 短语 |
| p32 | 32 | 短句 |
| p64 | 64 | 中等长度句 |
| p128 | 128 | 长句 |
解码器桶
用于不同最大音频长度的固定形状解码器模型(24 kHz 下每帧 = 600 个样本):
| 桶 | 最大帧数 | 最大音频 |
|---|---|---|
decoder_5s | 200 | 5.0s |
decoder_10s | 400 | 10.0s |
decoder_15s | 600 | 15.0s |
需要 iOS 18+ / macOS 15+。
音素化器
文本通过三层流水线转换为音素 token — 全部采用 Apache-2.0 许可证,无 GPL 依赖:
- 字典查找 — 美英与英式英语发音字典,支持多音字
- 后缀词干处理 — 对已知后缀进行形态分解(例如 "-ing"、"-tion")
- BART G2P — 使用独立的 CoreML 编码器-解码器模型作为神经字素到音素的兜底,处理词表外的词
模型权重
| 组件 | 大小 | 格式 |
|---|---|---|
| 时长模型 | ~39 MB | .mlmodelc |
| 韵律模型 | ~17 MB | .mlmodelc |
| 解码器模型(3 个桶) | 每个 ~107 MB | .mlmodelc |
| 音色嵌入(54 种音色) | ~0.3 MB | JSON(256 维 Float32) |
| G2P 编码器 + 解码器 | ~1.5 MB | .mlmodelc |
| 字典 + 词表 | ~6 MB | JSON |
| 合计(1 个解码器) | ~170 MB |
性能
| 指标 | 数值 |
|---|---|
| 参数 | 82M |
| 推理后端 | CoreML(Neural Engine) |
| 推理 RTFx | ~0.7(快于实时) |
| 输出采样率 | 24 kHz |
| 权重内存 | ~170 MB(1 个解码器桶) |
非自回归
与逐步生成 token 的 Qwen3-TTS 和 CosyVoice3 不同,Kokoro 使用无采样循环的 3 阶段流水线。所有阶段都是确定性的前向传递。
CLI 用法
audio kokoro "Hello, world!" --voice af_heart --output hello.wav
选项
| 选项 | 默认 | 描述 |
|---|---|---|
<text> | 要合成的文本 | |
--voice | af_heart | 音色预设名称 |
--language | en | 语言代码:en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | 输出 WAV 文件路径 |
--list-voices | 列出所有可用音色并退出 | |
--model, -m | HuggingFace 模型 ID |
示例
# 使用默认音色的英文
audio kokoro "Hello, how are you today?" --output hello.wav
# 法文
audio kokoro "Bonjour le monde" --voice ff_siwis --language fr --output bonjour.wav
# 日文
audio kokoro "こんにちは世界" --voice jf_alpha --language ja --output konnichiwa.wav
# 列出全部 50 种音色
audio kokoro --list-voices
Swift API
import KokoroTTS
import AudioCommon
let tts = try await KokoroTTSModel.fromPretrained()
// 首次运行下载 ~170 MB
let audio = try tts.synthesize(text: "Hello world", voice: "af_heart")
// audio: [Float] — 24 kHz 单声道 PCM
try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL)
何时使用 Kokoro
| 使用场景 | 推荐 TTS |
|---|---|
| iOS 应用,轻量、省电 | Kokoro(CoreML,82M 参数,~170 MB) |
| 最高质量、流式、声音克隆 | Qwen3-TTS(MLX,600M 参数,~1.7 GB) |
| 多语言流式,9 种语言 | CosyVoice3(MLX,500M 参数,~1.2 GB) |
| 全双工语音对话 | PersonaPlex(MLX,7B 参数,~5.5 GB) |
许可证
- 模型权重:Apache-2.0(hexgrad/Kokoro-82M)
- CoreML 转换:Apache-2.0(aufklarer/Kokoro-82M-CoreML)
- 字典与 G2P:Apache-2.0