Kokoro TTS — Android
Kokoro-82M is a lightweight, non-autoregressive text-to-speech model running on Android via ONNX Runtime. It produces natural 24 kHz speech with 50 preset voices across 8 languages.
Supported Languages
| Language | Code | Example Voices |
|---|---|---|
| English (US) | en | af_heart, am_adam, af_sky |
| English (UK) | en | bf_emma, bm_george |
| Spanish | es | ef_dora |
| French | fr | ff_siwis |
| Hindi | hi | hf_alpha, hm_omega |
| Italian | it | if_sara |
| Japanese | ja | jf_alpha, jm_omega |
| Portuguese | pt | pf_dora |
| Chinese | zh | zf_xiaobei, zm_yunjian |
| German | de | dm_martin, df_victoria (voice packs) |
50 preset voices total. Voice naming convention: [language][gender]_[name] — e.g., af_heart = American Female "Heart".
German voice packs
German is not a voice of the multilingual bundle above: the two German voices are kikiri-tts fine-tunes of Kokoro-82M, each a separate 162 MB weight set trained on German phonemes only. Pick one with KokoroPack when downloading, then synthesize with language = "de". Each pack lives in its own cache, so English and German stay installed side by side.
| Pack | Voice | Download |
|---|---|---|
KokoroPack.GERMAN_MARTIN | dm_martin (male) | soniqo/Kokoro-82M-German-Martin-ONNX (~170 MB) |
KokoroPack.GERMAN_VICTORIA | df_victoria (female) | 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")Numbers, ordinals, dates, times, currency amounts, units and common abbreviations are spelled out on device; words come from a 50k-word German dictionary with inflection, compound and rule-based fallbacks. The system TTS engine (SpeechTextToSpeechService) offers the Martin voice as de-DE next to en-US.
Model Files
| File | Size |
|---|---|
kokoro-e2e.onnx + .onnx.data | ~330 MB |
voices.bin | Voice embeddings |
| Phoneme dictionaries | Language-specific pronunciation data |
HuggingFace: soniqo/Kokoro-82M-ONNX
Performance
| Metric | Value |
|---|---|
| Parameters | 82M |
| Inference backend | ONNX Runtime |
| Output sample rate | 24 kHz |
Phonemizer
Text is converted to phoneme tokens using a dictionary-based phonemizer with language-specific support. The Android implementation includes phonemizers for English, French, Spanish, Italian, Portuguese, Hindi, Japanese, and Chinese.
Pipeline Integration
On Android, Kokoro TTS is part of the SpeechPipeline. After STT transcribes speech, the text is phonemized and synthesized back into audio. The pipeline manages the full VAD → STT → TTS flow automatically.
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
Source code: github.com/soniqo/speech-android