Kokoro TTS — Android
Kokoro-82M es un modelo de texto a voz ligero y no autorregresivo que se ejecuta en Android a través de ONNX Runtime. Produce voz natural a 24 kHz con 50 presets de voz en 8 idiomas.
Idiomas soportados
| Idioma | Código | Voces de ejemplo |
|---|---|---|
| Inglés (EE. UU.) | en | af_heart, am_adam, af_sky |
| Inglés (Reino Unido) | en | bf_emma, bm_george |
| Español | es | ef_dora |
| Francés | fr | ff_siwis |
| Hindi | hi | hf_alpha, hm_omega |
| Italiano | it | if_sara |
| Japonés | ja | jf_alpha, jm_omega |
| Portugués | pt | pf_dora |
| Chino | zh | zf_xiaobei, zm_yunjian |
| Alemán | de | dm_martin, df_victoria (packs de voz) |
50 presets de voz en total. Convención de nombrado de las voces: [idioma][género]_[nombre] — p. ej., af_heart = femenino americano "Heart".
Packs de voz en alemán
El alemán no es una voz del bundle multilingüe anterior: las dos voces alemanas son ajustes finos de Kokoro-82M por kikiri-tts, cada una un conjunto de pesos independiente de 162 MB entrenado solo con fonemas alemanes. Elige una con KokoroPack al descargar y sintetiza con language = "de". Cada pack tiene su propia caché, así que inglés y alemán pueden convivir instalados.
| Pack | Voz | Descarga |
|---|---|---|
KokoroPack.GERMAN_MARTIN | dm_martin (masculina) | soniqo/Kokoro-82M-German-Martin-ONNX (~170 MB) |
KokoroPack.GERMAN_VICTORIA | df_victoria (femenina) | soniqo/Kokoro-82M-German-Victoria-ONNX (~170 MB) |
val modelDir = ModelManager.ensureTtsModels(
context,
ttsModel = TtsModel.KOKORO_SHORT_TURN,
kokoroPack = KokoroPack.GERMAN_MARTIN, // or GERMAN_VICTORIA
)
val tts = SpeechSynthesizer(SpeechSynthesizerConfig(modelDir = modelDir))
val audio = tts.synthesize("Am 3. Oktober um 18:30 Uhr kostet es 12,80 €.", "de")Números, ordinales, fechas, horas, importes, unidades y abreviaturas comunes se deletrean en el dispositivo; las palabras salen de un diccionario alemán de 50k entradas con flexión, compuestos y reglas como respaldo. El motor TTS del sistema (SpeechTextToSpeechService) ofrece la voz Martin como de-DE junto a en-US.
Archivos del modelo
| Archivo | Tamaño |
|---|---|
kokoro-e2e.onnx + .onnx.data | ~330 MB |
voices.bin | Embeddings de voz |
| Diccionarios de fonemas | Datos de pronunciación específicos de cada idioma |
HuggingFace: soniqo/Kokoro-82M-ONNX
Rendimiento
| Métrica | Valor |
|---|---|
| Parámetros | 82M |
| Backend de inferencia | ONNX Runtime |
| Frecuencia de muestreo de salida | 24 kHz |
Fonemizador
El texto se convierte en tokens de fonemas usando un fonemizador basado en diccionario con soporte específico por idioma. La implementación en Android incluye fonemizadores para inglés, francés, español, italiano, portugués, hindi, japonés y chino.
Integración con el pipeline
En Android, Kokoro TTS forma parte del SpeechPipeline. Después de que el STT transcriba la voz, el texto se fonemiza y se sintetiza de nuevo como audio. El pipeline gestiona automáticamente todo el flujo VAD → STT → TTS.
val modelDir = ModelManager.ensureModels(context)
val pipeline = SpeechPipeline(SpeechConfig(modelDir = modelDir))
pipeline.events.collect { event ->
when (event) {
is SpeechEvent.TranscriptionCompleted -> println(event.text)
else -> {}
}
}
pipeline.start()
pipeline.pushAudio(samples) // 16kHz mono float32
Código fuente: github.com/soniqo/speech-android