Kokoro TTS — Android

Kokoro-82M e um modelo de texto para fala leve e nao autoregressivo rodando em Android via ONNX Runtime. Produz fala natural a 24 kHz com 50 vozes pre-definidas em 8 idiomas.

Idiomas suportados

IdiomaCodigoVozes de exemplo
Ingles (EUA)enaf_heart, am_adam, af_sky
Ingles (Reino Unido)enbf_emma, bm_george
Espanholesef_dora
Francesfrff_siwis
Hindihihf_alpha, hm_omega
Italianoitif_sara
Japonesjajf_alpha, jm_omega
Portuguesptpf_dora
Chineszhzf_xiaobei, zm_yunjian
Alemãodedm_martin, df_victoria (packs de voz)

50 vozes pre-definidas no total. Convencao de nome de voz: [idioma][genero]_[nome] — por exemplo, af_heart = American Female "Heart".

Packs de voz em alemão

O alemão não é uma voz do bundle multilíngue acima: as duas vozes alemãs são ajustes finos do Kokoro-82M pela kikiri-tts, cada uma um conjunto de pesos separado de 162 MB treinado apenas com fonemas alemães. Escolha um com KokoroPack ao baixar e sintetize com language = "de". Cada pack tem seu próprio cache, então inglês e alemão ficam instalados lado a lado.

PackVozDownload
KokoroPack.GERMAN_MARTINdm_martin (masculina)soniqo/Kokoro-82M-German-Martin-ONNX (~170 MB)
KokoroPack.GERMAN_VICTORIAdf_victoria (feminina)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, ordinais, datas, horas, valores, unidades e abreviações comuns são escritos por extenso no dispositivo; as palavras vêm de um dicionário alemão de 50k entradas com flexão, compostos e regras como alternativa. O mecanismo TTS do sistema (SpeechTextToSpeechService) oferece a voz Martin como de-DE ao lado de en-US.

Arquivos do modelo

ArquivoTamanho
kokoro-e2e.onnx + .onnx.data~330 MB
voices.binEmbeddings de vozes
Dicionarios de fonemasDados de pronuncia especificos por idioma

HuggingFace: soniqo/Kokoro-82M-ONNX

Desempenho

MetricaValor
Parametros82M
Backend de inferenciaONNX Runtime
Taxa de amostragem de saida24 kHz

Fonemizador

O texto e convertido em tokens de fonemas usando um fonemizador baseado em dicionario com suporte especifico por idioma. A implementacao Android inclui fonemizadores para ingles, frances, espanhol, italiano, portugues, hindi, japones e chines.

Integracao de pipeline

No Android, o Kokoro TTS e parte do SpeechPipeline. Depois que o STT transcreve a fala, o texto e fonemizado e sintetizado de volta em audio. O pipeline gerencia o fluxo completo VAD → STT → TTS automaticamente.

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

Codigo-fonte: github.com/soniqo/speech-android