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

IdiomaCódigoVoces de ejemplo
Inglés (EE. UU.)enaf_heart, am_adam, af_sky
Inglés (Reino Unido)enbf_emma, bm_george
Españolesef_dora
Francésfrff_siwis
Hindihihf_alpha, hm_omega
Italianoitif_sara
Japonésjajf_alpha, jm_omega
Portuguésptpf_dora
Chinozhzf_xiaobei, zm_yunjian
Alemándedm_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.

PackVozDescarga
KokoroPack.GERMAN_MARTINdm_martin (masculina)soniqo/Kokoro-82M-German-Martin-ONNX (~170 MB)
KokoroPack.GERMAN_VICTORIAdf_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

ArchivoTamaño
kokoro-e2e.onnx + .onnx.data~330 MB
voices.binEmbeddings de voz
Diccionarios de fonemasDatos de pronunciación específicos de cada idioma

HuggingFace: soniqo/Kokoro-82M-ONNX

Rendimiento

MétricaValor
Parámetros82M
Backend de inferenciaONNX Runtime
Frecuencia de muestreo de salida24 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