Pocket TTS 100M
Moteur natif pour Apple · PocketTTS
PocketTTS ajoute la synthèse native CoreML à speech-swift. Toutes les étapes utilisent uniquement le CPU par défaut. La voix anglaise Alba diffuse 1 920 échantillons à 24 kHz par bloc, soit 80 ms.
La livraison attendue applique une contre-pression. Chaque requête possède son état et sa graine. Annulation, erreur du récepteur et limite de génération produisent une erreur ; la réussite émet un seul bloc final vide. Ce paquet ne prend en charge ni clonage vocal ni autres langues.
Téléchargez le paquet publié aufklarer/Pocket-TTS-100M-CoreML-INT8 à la première utilisation ou chargez un export local. Conservez les attributions à Kyutai, FluidInference et Alba MacKenna selon CC BY 4.0.
Utilisation Swift et 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 et WebSocket
Utilisez pocket-tts avec la voix alba. HTTP en flux exige PCM ; WebSocket émet des blocs audio. Les modèles par défaut sont conservés.
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.pcmMesure sur 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 est le backend de synthèse anglaise local et à faible latence de speech-core. Le bundle ONNX public utilise la voix Alba fixe et diffuse le son dès que chaque trame acoustique est prête.
L’inférence est réellement entrelacée : chaque latent autorégressif est décodé et émis avant la génération du suivant. Chaque callback non final fournit 1 920 échantillons Float32 — 80 ms à 24 kHz — et évite le plancher fixe des graphes TTS mis en tampon.
Bundle publié
| 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 |
Téléchargement et vérification
Le téléchargeur speech-core épingle v1.0.0 et vérifie chaque fichier publié avec 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.
});
Contrat de streaming
Le callback reçoit une trame de 80 ms à la fois ; le callback final marque la fin du flux. last_metrics() expose le conditionnement, le premier son, la latence totale, les trames, échantillons, EOS, annulation et seed effectif. cancel() arrête une synthèse active.
Benchmark Galaxy S23 Ultra
Un nouveau test propre du bundle public v1.0.0 a utilisé ONNX Runtime 1.27, deux threads CPU et un Galaxy S23 Ultra. Ce sont des mesures directes du moteur, sans UI ni pipeline vocal complet.
| 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 |
Intelligibilité aller-retour
Le test sur appareil a synthétisé 46 commandes et réponses, appliqué le rééchantillonnage de production 24→16 kHz, puis transcrit avec Parakeet-EOU déployé.
| Metric | Result |
|---|---|
| Corpus | 46 phrases |
| Exact transcripts | 31 / 46 |
| WER / CER | 8.00% / 3.47% |
| Empty audio / transcript / EOS failures | 0 / 0 / 0 |
L’ASR aller-retour mesure l’intelligibilité, pas le naturel ni la préférence d’écoute ; il complète les tests d’écoute.
État de l’intégration
Le backend ONNX C++17 est fusionné dans speech-core et se compile pour Windows, Linux et Android. Le SDK/JNI speech-android actuel sélectionne encore Kokoro par défaut ; sélection Kotlin, téléchargement et exposition SDK restent à intégrer. Cette section décrit la version ONNX ; le moteur natif Swift CoreML est présenté ci-dessus.
Limites et licence
- Anglais uniquement ; le checkpoint public intègre la voix Alba fixe et ne permet pas le clonage arbitraire.
- Le modèle et la voix sont sous CC BY 4.0. Conservez l’attribution à Alba MacKenna du manifeste.
- Les graphes récurrents ciblent le CPU. L’accélération matérielle est opt-in car les providers Android varient selon l’appareil et ONNX Runtime.
- Le code speech-core est sous Apache 2.0 ; le bundle modèle conserve ses conditions CC BY 4.0.