Kokoro TTS

Kokoro-82M e um modelo leve de texto para fala nao autoregressivo baseado em StyleTTS 2 com um vocoder ISTFTNet. Executa inteiramente no Neural Engine via CoreML, produzindo fala natural a 24 kHz a partir de texto em um unico forward pass.

Pronto para iOS

Kokoro-82M foi projetado para implantacao no dispositivo em iOS. Com 82M parametros (~80 MB com 1 bucket, INT8), cabe confortavelmente em iPhone e iPad. CoreML executa no Neural Engine, deixando a GPU livre para outras tarefas.

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
Coreanokokf_somi

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

Arquitetura

Kokoro usa um pipeline CoreML de 3 estagios. Sem loop de amostragem — todos os estagios sao forward passes nao autoregressivos com um passo de alinhamento do lado Swift entre os estagios 1 e 2.

Pipeline de 3 estagios

EstagioModeloEntradaSaida
1. Duracaoduration.mlmodelcTokens de fonema + embedding de voz + velocidadeDuracoes, caracteristicas de prosodia, codificacao de texto
Alinhamento em SwiftDuracoes + caracteristicas do estagio 1Prosodia e caracteristicas de texto alinhadas
2. Prosodiaprosody.mlmodelcCaracteristicas de prosodia alinhadas + estiloPredicoes de F0 (pitch) + ruido
3. Decodificadordecoder_*.mlmodelcTexto alinhado + F0 + ruido + estiloForma de onda de audio a 24 kHz

Buckets de fonemas (modelo de duracao)

O modelo de duracao usa formas de entrada enumeradas. A entrada e preenchida ate o menor bucket que couber:

BucketMax fonemasCaso de uso
p1616Frases curtas
p3232Sentencas curtas
p6464Sentencas medias
p128128Sentencas longas

Buckets do decodificador

Modelos de decodificador com formas fixas para diferentes comprimentos maximos de audio (cada frame = 600 amostras a 24 kHz):

BucketMax framesMax audio
decoder_5s2005.0s
decoder_10s40010.0s
decoder_15s60015.0s

Requer iOS 18+ / macOS 15+.

Fonemizador

O texto e convertido em tokens de fonema via um pipeline de tres niveis — tudo licenciado Apache-2.0, sem dependencias GPL:

  1. Busca em dicionario — dicionarios de pronuncia de ingles americano e britanico com suporte a heteronimos
  2. Remocao de sufixos — decomposicao morfologica para sufixos conhecidos (por exemplo, "-ing", "-tion")
  3. BART G2P — fallback neural de grafema para fonema usando um modelo CoreML encoder-decoder separado para palavras fora do vocabulario

Pesos do modelo

ComponenteTamanhoFormato
Modelo de duracao~39 MB.mlmodelc
Modelo de prosodia~17 MB.mlmodelc
Modelos de decodificador (3 buckets)~107 MB cada.mlmodelc
Embeddings de voz (54 vozes)~0.3 MBJSON (Float32 de 256 dim)
Encoder + decoder G2P~1.5 MB.mlmodelc
Dicionarios + vocab~6 MBJSON
Total (1 decoder)~170 MB

Desempenho

MetricaValor
Parametros82M
Backend de inferenciaCoreML (Neural Engine)
RTFx de inferencia~0.7 (mais rapido que tempo real)
Taxa de amostragem de saida24 kHz
Memoria de pesos~170 MB (1 bucket de decoder)
Nao autoregressivo

Diferente do Qwen3-TTS e do CosyVoice3 que geram tokens passo a passo, Kokoro usa um pipeline de 3 estagios sem loop de amostragem. Todos os estagios sao forward passes deterministicos.

Uso do CLI

audio kokoro "Hello, world!" --voice af_heart --output hello.wav

Opcoes

OpcaoPadraoDescricao
<text>Texto a sintetizar
--voiceaf_heartNome do preset de voz
--languageenCodigo de idioma: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavCaminho do arquivo WAV de saida
--list-voicesLista todas as vozes disponiveis e sai
--model, -mID do modelo HuggingFace

Exemplos

# Ingles com voz padrao
audio kokoro "Hello, how are you today?" --output hello.wav

# Frances
audio kokoro "Bonjour le monde" --voice ff_siwis --language fr --output bonjour.wav

# Japones
audio kokoro "こんにちは世界" --voice jf_alpha --language ja --output konnichiwa.wav

# Listar todas as 50 vozes
audio kokoro --list-voices

API Swift

import KokoroTTS
import AudioCommon

let tts = try await KokoroTTSModel.fromPretrained()
// Baixa ~170 MB na primeira execucao

let audio = try tts.synthesize(text: "Hello world", voice: "af_heart")
// audio: [Float] — PCM mono a 24 kHz

try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL)

Quando usar Kokoro

Caso de usoTTS recomendado
App iOS, leve, eficiente em bateriaKokoro (CoreML, 82M params, ~170 MB)
Qualidade mais alta, streaming, clonagem de vozQwen3-TTS (MLX, 600M params, ~1.7 GB)
Streaming multilingue, 9 idiomasCosyVoice3 (MLX, 500M params, ~1.2 GB)
Dialogo falado full-duplexPersonaPlex (MLX, 7B params, ~5.5 GB)

Licenca