Pocket TTS 100M
Apple 原生运行时 · PocketTTS
PocketTTS 为 speech-swift 添加原生 CoreML 语音合成。所有阶段默认仅使用 CPU。英语 Alba 预设以 24 kHz 流式输出,每帧 1,920 个采样(80 毫秒)。
等待音频交付可提供背压。每个请求拥有独立的循环状态和随机种子。取消、回调失败和生成上限均报告错误;成功时发送一个空的最终块。此模型包不支持声音克隆或其他语言。
首次使用时下载已发布的模型包 aufklarer/Pocket-TTS-100M-CoreML-INT8,或加载本地导出。 根据 CC BY 4.0 保留 Kyutai、FluidInference 和 Alba MacKenna 的署名。
Swift 与 CLI 用法
speech speak "Hello world." --engine pocket --stream \
--pocket-bundle-dir /path/to/bundle --pocket-seed 42 -o hello.wavimport PocketTTS
let model = try PocketTTSModel.fromBundle(URL(fileURLWithPath: "/path/to/bundle"))
try await model.generateStreaming(text: "Hello world.") { chunk in
await consume(chunk.samples)
}HTTP 与 WebSocket
使用 pocket-tts 和声音 alba。HTTP 流式输出需要 PCM;WebSocket 发送音频增量。现有默认模型保持不变。
curl http://localhost:8080/v1/audio/speech \
-H 'Content-Type: application/json' \
-d '{"model":"pocket-tts","voice":"alba","input":"Hello world.","response_format":"pcm","stream":true}' \
-o hello.pcmApple CPU 基准测试
Apple M5 Pro · 48 GiB · cpuOnly · first_audio_ms 78.9 · RTF 0.337 · peak_rss 866.8 MiB · n=5 · seed=42 · 2026-10-17
Pocket TTS 100M 是 speech-core 中低延迟、完全设备端运行的英文文本转语音后端。公开 ONNX 包采用固定 Alba 音色,并在每个声学帧就绪后立即流式输出音频。
推理采用真正的交错方式:每生成一个自回归潜变量就立即解码并输出,然后才生成下一帧。每次非最终回调包含 1,920 个 Float32 样本,即 24 kHz 下的 80 ms 音频,避免缓冲式 TTS 导出的固定整图延迟。
已发布模型包
| Item | Details |
|---|---|
| Model | soniqo/Pocket-TTS-100M-ONNX-INT8 |
| Release | v1.0.0 · ad5d3fae3fb2f10024583708597afca8337c094c |
| Bundle size | 120.3 MiB |
| Runtime | ONNX Runtime · C++17 · dynamic INT8 + FP32 |
| Output | 24 kHz mono Float32 PCM · 1,920 samples / 80 ms per frame |
| Language / voice | English · fixed Alba voice |
下载与校验
speech-core 下载脚本固定到 v1.0.0,并用 SHA-256 校验每个发布文件。
bash scripts/download_pocket_tts_onnx.sh /models/pocket-tts-onnx
C++ API
#include <speech_core/models/onnx_pocket_tts.h>
speech_core::PocketTtsConfig config;
config.intra_threads = 2;
config.flow_steps = 4;
speech_core::OnnxPocketTts tts("/models/pocket-tts-onnx", config);
tts.synthesize("Hello world.", "en",
[](const float* samples, size_t length, bool is_final) {
// Each non-final callback is 1,920 Float32 samples:
// 80 ms at 24 kHz.
});
流式契约
回调每次接收一个 80 ms 帧,最终回调标记流结束。last_metrics() 报告条件处理、首音频和总延迟、帧数与样本数、EOS、取消状态和实际随机种子;cancel() 可停止正在进行的合成。
Galaxy S23 Ultra 基准
公开 v1.0.0 模型包的全新复测使用 ONNX Runtime 1.27、两个 CPU 线程和 Galaxy S23 Ultra。以下是引擎直接测量值,不包含 UI 或完整语音流水线。
| Metric | Result |
|---|---|
| TTFA p50 / p95 | 127.7 / 133.7 ms |
| Total latency p50 / p95 | 467.5 / 485.3 ms |
| Median RTF | 0.4495 |
| Peak RSS | 373.7 MiB |
往返可懂度
设备测试合成了 46 条命令与助手短语,经生产用 24→16 kHz 重采样路径后,由已部署的 Parakeet-EOU 识别器转写。
| Metric | Result |
|---|---|
| Corpus | 46 phrases |
| Exact transcripts | 31 / 46 |
| WER / CER | 8.00% / 3.47% |
| Empty audio / transcript / EOS failures | 0 / 0 / 0 |
往返 ASR 衡量的是可懂度,而不是自然度或听众偏好;它应与听感测试配合使用。
集成状态
C++17 ONNX 后端已合并到 speech-core,可为 Windows、Linux 和 Android 构建。当前 speech-android SDK/JNI 路径仍默认选择 Kokoro;Kotlin 模型选择、下载接线和 SDK 暴露属于后续工作。本节介绍 ONNX 版本;原生 Swift CoreML 运行时见上文。
限制与许可证
- 仅支持英语;公开检查点固化了 Alba 音色,不支持任意声音克隆。
- 模型与声音采用 CC BY 4.0;必须保留模型包清单中的 Alba MacKenna 署名。
- 循环图以 CPU 为主;由于 Android 执行提供程序因设备和 ONNX Runtime 构建而异,硬件加速需主动开启。
- speech-core 源码采用 Apache 2.0,模型包保留其 CC BY 4.0 条款。