Pocket TTS 100M
Pocket TTS 100M ist das latenzarme, lokale englische TTS-Backend in speech-core. Das öffentliche ONNX-Paket nutzt die feste Alba-Stimme und streamt Audio, sobald der jeweilige Akustik-Frame bereit ist.
Die Inferenz ist tatsächlich verschachtelt: Ein autoregressiver Latent-Frame wird dekodiert und ausgegeben, bevor der nächste entsteht. Jeder nicht finale Callback liefert 1.920 Float32-Samples — 80 ms bei 24 kHz — und umgeht damit die feste Wartezeit gepufferter TTS-Graphen.
Veröffentlichtes Paket
| 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 |
Download und Prüfung
Der speech-core-Downloader ist auf v1.0.0 festgelegt und prüft jede veröffentlichte Datei mit 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.
});
Streaming-Vertrag
Der Callback erhält jeweils einen 80-ms-Frame; der finale Callback markiert das Streamende. last_metrics() meldet Konditionierung, erste Audio- und Gesamtlatenz, Frame-/Samplezahl, EOS, Abbruch und den verwendeten Seed. cancel() stoppt eine aktive Synthese.
Galaxy-S23-Ultra-Benchmark
Ein sauberer Wiederholungstest des öffentlichen Pakets v1.0.0 lief mit ONNX Runtime 1.27, zwei CPU-Threads und einem Galaxy S23 Ultra. Es sind direkte Engine-Werte ohne UI oder vollständige Voice-Pipeline.
| 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 |
Roundtrip-Verständlichkeit
Der Gerätetest synthetisierte 46 Befehls- und Antwortsätze, leitete sie durch den produktiven 24→16-kHz-Resampler und transkribierte sie mit dem eingesetzten 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 |
Roundtrip-ASR misst Verständlichkeit, nicht Natürlichkeit oder Hörerpräferenz, und ergänzt Hörtests.
Integrationsstatus
Das C++17-ONNX-Backend ist in speech-core gemergt und für Windows, Linux und Android baubar. Der aktuelle speech-android-SDK/JNI-Pfad wählt weiterhin standardmäßig Kokoro; Kotlin-Modellauswahl, Download und SDK-Freigabe folgen später. Ein Apple/CoreML-Backend ist nicht enthalten.
Grenzen und Lizenz
- Nur Englisch; der öffentliche Checkpoint enthält die feste Alba-Stimme und keine beliebige Stimmklonung.
- Modell und Stimme stehen unter CC BY 4.0. Die Alba-MacKenna-Nennung aus dem Manifest muss erhalten bleiben.
- Die rekurrenten Graphen sind CPU-orientiert. Hardwarebeschleunigung ist opt-in, da Android-Provider je nach Gerät und ONNX-Runtime-Build variieren.
- Der speech-core-Quellcode ist Apache 2.0; das Modellpaket behält CC BY 4.0.