Pocket TTS 100M
Pocket TTS 100M es el backend de texto a voz en inglés, local y de baja latencia de speech-core. El paquete ONNX público usa la voz Alba fija y transmite audio en cuanto está listo cada frame acústico.
La inferencia está realmente intercalada: cada latente autorregresivo se decodifica y emite antes de generar el siguiente. Cada callback no final entrega 1.920 muestras Float32 — 80 ms a 24 kHz — y evita el suelo fijo de los grafos TTS con búfer.
Paquete publicado
| 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 |
Descarga y verificación
El descargador de speech-core fija v1.0.0 y verifica cada archivo publicado mediante SHA-256.
bash scripts/download_pocket_tts_onnx.sh /models/pocket-tts-onnx
API C++
#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.
});
Contrato de streaming
El callback recibe un frame de 80 ms cada vez; el callback final marca el fin del stream. last_metrics() informa del acondicionamiento, primer audio, latencia total, frames, muestras, EOS, cancelación y semilla efectiva. cancel() detiene una síntesis activa.
Benchmark en Galaxy S23 Ultra
La repetición limpia del paquete público v1.0.0 utilizó ONNX Runtime 1.27, dos hilos de CPU y un Galaxy S23 Ultra. Son medidas directas del motor, no de la UI ni del pipeline de voz completo.
| 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 |
Inteligibilidad de ida y vuelta
La prueba en dispositivo sintetizó 46 frases de comandos y respuestas, las pasó por el remuestreo de producción de 24 a 16 kHz y las transcribió con Parakeet-EOU desplegado.
| Metric | Result |
|---|---|
| Corpus | 46 phrases |
| Exact transcripts | 31 / 46 |
| WER / CER | 8.00% / 3.47% |
| Empty audio / transcript / EOS failures | 0 / 0 / 0 |
El ASR de ida y vuelta mide inteligibilidad, no naturalidad ni preferencia del oyente; complementa las pruebas de escucha.
Estado de integración
El backend ONNX C++17 está fusionado en speech-core y compila para Windows, Linux y Android. La ruta SDK/JNI actual de speech-android sigue eligiendo Kokoro por defecto; la selección Kotlin, la descarga y la API del SDK son trabajo posterior. Esta versión no incluye backend Apple/CoreML.
Límites y licencia
- Solo inglés; el checkpoint público incorpora la voz Alba fija y no admite clonación arbitraria.
- El modelo y la voz usan CC BY 4.0. Conserva la atribución a Alba MacKenna incluida en el manifiesto.
- Los grafos recurrentes están orientados a CPU. La aceleración de hardware es opcional porque varía según el dispositivo y la compilación de ONNX Runtime.
- El código de speech-core usa Apache 2.0; el paquete del modelo conserva CC BY 4.0.