Pocket TTS 100M
Нативная среда для Apple · PocketTTS
PocketTTS добавляет в speech-swift нативный синтез CoreML. По умолчанию все этапы работают только на CPU. Английский голос Alba передаёт блоки по 1 920 отсчётов при 24 кГц, то есть по 80 мс.
Ожидание доставки обеспечивает обратное давление. Каждый запрос имеет собственное состояние и начальное значение генератора. Отмена, ошибка получателя и предел генерации возвращают ошибку; при успехе отправляется один пустой завершающий блок. Клонирование голоса и другие языки в этом пакете не поддерживаются.
При первом использовании загрузите опубликованный пакет aufklarer/Pocket-TTS-100M-CoreML-INT8 или откройте локальный экспорт. Сохраняйте указание Kyutai, FluidInference и Alba MacKenna согласно CC BY 4.0.
Использование 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.pcmИзмерения на CPU Apple
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 и передаёт аудио сразу после готовности каждого акустического кадра.
Инференс действительно чередуется: один авторегрессионный латент декодируется и выдаётся до генерации следующего. Каждый не финальный callback содержит 1 920 Float32-сэмплов — 80 мс при 24 кГц — без фиксированной задержки буферизованных 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.
});
Контракт стриминга
Callback получает по одному кадру 80 мс; финальный callback отмечает конец потока. last_metrics() сообщает время подготовки, первого аудио и полной генерации, число кадров/сэмплов, EOS, отмену и использованный seed. 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 кГц и распознаны развёрнутым 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. Текущий SDK/JNI speech-android по умолчанию выбирает Kokoro; выбор модели в Kotlin, загрузка и API SDK остаются следующей задачей. Этот раздел описывает версию ONNX; нативная среда Swift CoreML описана выше.
Ограничения и лицензия
- Только английский; публичный checkpoint содержит фиксированный голос Alba и не поддерживает произвольное клонирование.
- Модель и голос лицензированы по CC BY 4.0. Сохраняйте указание Alba MacKenna из манифеста.
- Рекуррентные графы ориентированы на CPU. Аппаратное ускорение включается явно, поскольку Android-провайдеры зависят от устройства и сборки ONNX Runtime.
- Исходники speech-core — Apache 2.0; модельный пакет сохраняет CC BY 4.0.