What problem does this solve?
hexgrad/Kokoro-82M documents 9 supported language/locale groups in its own VOICES.md: American English, British English, Japanese, Mandarin Chinese, Spanish, French, Hindi, Italian, and Brazilian Portuguese.
KokoroAneVariant currently has real support for only 3: english, mandarin, japanese — each with its own dedicated text-to-phoneme frontend (English's built-in, NemoTextNormalizer+MandarinG2P for Mandarin, the MeCab+Cutlet port from #915 for Japanese).
The voice tensors for the other 5 language groups are already present, though — they're just folded into englishVoices, with this SDK's own doc comment admitting the real behavior:
non-English-prefixed packs (zf_*, jf_*, …) still speak English phonemes here, just with that voice's timbre.
Concretely, these voice codes exist in the SDK today but can only be used as English-phoneme playback with that voice's timbre, not real speech in their actual language:
| Language |
hexgrad's VOICES.md section |
Voice codes already in englishVoices |
| Spanish |
Spanish |
ef_dora, em_alex, em_santa |
| French |
French |
ff_siwis |
| Hindi |
Hindi |
hf_alpha, hf_beta, hm_omega, hm_psi |
| Italian |
Italian |
if_sara, im_nicola |
| Brazilian Portuguese |
Brazilian Portuguese |
pf_dora, pm_alex, pm_santa |
Proposed solution
For each of the 5 languages, in roughly the order of upstream G2P complexity (per misaki, hexgrad's own G2P library):
- Add a real
KokoroAneVariant case + move its voices out of englishVoices into a dedicated array, same shape as .mandarin/.japanese
- Port or wrap a real text-to-phoneme frontend for that language
Alternatives considered
- Leaving these voices as English-phoneme-with-accent (already possible today, no SDK changes) — a real, smaller-scope option for apps that just want the timbre, not correct pronunciation of the actual language. Not what this issue is asking for.
Additional context
What problem does this solve?
hexgrad/Kokoro-82M documents 9 supported language/locale groups in its own
VOICES.md: American English, British English, Japanese, Mandarin Chinese, Spanish, French, Hindi, Italian, and Brazilian Portuguese.KokoroAneVariantcurrently has real support for only 3:english,mandarin,japanese— each with its own dedicated text-to-phoneme frontend (English's built-in,NemoTextNormalizer+MandarinG2Pfor Mandarin, the MeCab+Cutlet port from #915 for Japanese).The voice tensors for the other 5 language groups are already present, though — they're just folded into
englishVoices, with this SDK's own doc comment admitting the real behavior:Concretely, these voice codes exist in the SDK today but can only be used as English-phoneme playback with that voice's timbre, not real speech in their actual language:
VOICES.mdsectionenglishVoicesef_dora,em_alex,em_santaff_siwishf_alpha,hf_beta,hm_omega,hm_psiif_sara,im_nicolapf_dora,pm_alex,pm_santaProposed solution
For each of the 5 languages, in roughly the order of upstream G2P complexity (per misaki, hexgrad's own G2P library):
KokoroAneVariantcase + move its voices out ofenglishVoicesinto a dedicated array, same shape as.mandarin/.japaneseAlternatives considered
Additional context
hexgrad/Kokoro-82M's ownVOICES.md: https://huggingface.co/hexgrad/Kokoro-82M/blob/main/VOICES.md