Phase 06 - Lesson 07
Text-to-Speech (TTS) — do Tacotron ao F5 e ao Kokoro
O ASR inverte fala em texto; o TTS inverte texto em fala. A pilha de 2026 tem tres partes: texto → tokens, tokens → mel, mel → forma de onda. Cada parte tem um modelo padrao que cabe num laptop.
Tipo: Build Linguagens: Python Pre-requisitos: Fase 6 · 02 (Espectrogramas e Mel), Fase 5 · 09 (Seq2Seq), Fase 7 · 05 (Transformer Completo) Tempo: ~75 minutos
O Problema
Voce tem uma string: "Please remind me to water the plants at 6 pm." Voce precisa de um clipe de audio de 3 segundos que soe natural, tenha a prosodia correta (pausas, enfase), pronuncie "plants" com a vogal certa e rode em menos de 300 ms numa CPU para um assistente de voz ao vivo. Voce tambem precisa trocar de vozes, lidar com entrada com troca de codigo ("remind me at 6 pm, daijoubu?") e nao passar vergonha com nomes proprios.
Pipelines modernos de TTS sao assim:
- Frontend de texto. Normaliza o texto (datas, numeros, e-mails), converte em fonemas ou tokens de subpalavra, prediz features de prosodia.
- Modelo acustico. Texto → espectrograma mel. Tacotron 2 (2017), FastSpeech 2 (2020), VITS (2021), F5-TTS (2024), Kokoro (2024).
- Vocoder. Mel → forma de onda. WaveNet (2016), WaveRNN, HiFi-GAN (2020), BigVGAN (2022), vocoders de codec neural em 2024+.
Em 2026 a separacao acustico + vocoder se dilui com modelos end-to-end de difusao e flow-matching. Mas o modelo mental de tres partes ainda vale para depuracao.
O Conceito
Tacotron 2 (2017). Seq2seq: char-embedding → encoder BiLSTM → atencao sensivel a localizacao → decoder LSTM autorregressivo que emite frames de mel. Lento (AR), instavel em textos longos. Ainda citado como baseline.
FastSpeech 2 (2020). Nao autorregressivo. O preditor de duracao gera quantos frames de mel cada fonema recebe. Passada unica, 10x mais rapido que o Tacotron. Perde um pouco de naturalidade (alinhamento monotonico) mas roda em todo lugar.
VITS (2021). Treina conjuntamente encoder + duracao baseada em flow + vocoder HiFi-GAN end-to-end com inferencia variacional. Alta qualidade, modelo unico. TTS open-source dominante em 2022–2024. Variantes: YourTTS (multi-locutor zero-shot), XTTS v2 (2024, Coqui).
F5-TTS (2024). Transformer de difusao sobre flow matching. Prosodia natural, clonagem de voz zero-shot com 5 segundos de audio de referencia. Topo dos rankings de TTS open-source de 2026. 335M de parametros.
Kokoro (2024). Pequeno (82M), executavel em CPU, melhor TTS de ingles da categoria para uso em tempo real. Ingles apenas com vocabulario fechado, apache-2.0.
OpenAI TTS-1-HD, ElevenLabs v2.5, Google Chirp-3. Estado da arte comercial. As tags de emocao do ElevenLabs v2.5 ("[whispered]", "[laughing]") e as vozes de personagem dominam a producao de audiolivros em 2026.
Evolucao do vocoder
| Era | Vocoder | Latencia | Qualidade |
|---|---|---|---|
| 2016 | WaveNet | apenas offline | SOTA no lancamento |
| 2018 | WaveRNN | ~tempo real | boa |
| 2020 | HiFi-GAN | 100x tempo real | quase humana |
| 2022 | BigVGAN | 50x tempo real | generaliza entre locutores/linguas |
| 2024 | SNAC, DAC (codecs neurais) | integrados a modelos AR | tokens discretos, eficientes em bits |
Ate 2026 a maioria dos modelos de "TTS" e end-to-end de texto a forma de onda; o espectrograma mel e uma representacao interna.
Avaliacao
- MOS (Mean Opinion Score). Escala de 1–5, obtida por crowdsourcing. Ainda o padrao-ouro; dolorosamente lento.
- CMOS (Comparative MOS). Preferencia A-vs-B. Intervalos de confianca mais estreitos por anotacao.
- UTMOS, DNSMOS. Preditores neurais de MOS sem referencia. Usados em rankings.
- CER (Character Error Rate) via ASR. Passe a saida do TTS pelo Whisper, calcule o CER contra o texto de entrada. Proxy de inteligibilidade.
- SECS (Speaker Embedding Cosine Similarity). Qualidade da clonagem de voz.
Numeros de 2026 no LibriTTS test-clean:
| Modelo | UTMOS | CER (via Whisper) | Tamanho |
|---|---|---|---|
| Ground truth | 4.08 | 1.2% | — |
| F5-TTS | 3.95 | 2.1% | 335M |
| XTTS v2 | 3.81 | 3.5% | 470M |
| VITS | 3.62 | 3.1% | 25M |
| Kokoro v0.19 | 3.87 | 1.8% | 82M |
| Parler-TTS Large | 3.76 | 2.8% | 2.3B |
Construa
Passo 1: fonemize a entrada
from phonemizer import phonemize
ph = phonemize("Hello world", language="en-us", backend="espeak")
# 'həloʊ wɜːld'
Os fonemas sao a ponte universal. Evite alimentar texto bruto em qualquer coisa abaixo do nivel de qualidade do VITS.
Passo 2: rode o Kokoro (padrao para CPU em 2026)
from kokoro import KPipeline
tts = KPipeline(lang_code="a") # "a" = American English
audio, sr = tts("Please remind me to water the plants at 6 pm.", voice="af_bella")
# audio: float32 tensor, sr=24000
Roda offline, arquivo unico, 82M de parametros.
Passo 3: rode o F5-TTS com clonagem de voz
from f5_tts.api import F5TTS
tts = F5TTS()
wav = tts.infer(
ref_file="my_voice_5s.wav",
ref_text="The quick brown fox jumps over the lazy dog.",
gen_text="Please remind me to water the plants.",
)
Passe um clipe de referencia de 5 segundos + sua transcricao; o F5 clona prosodia e timbre.
Passo 4: vocoder HiFi-GAN do zero
Grande demais para caber num script de tutorial, mas o formato e:
class HiFiGAN(nn.Module):
def __init__(self, mel_channels=80, upsample_rates=[8, 8, 2, 2]):
super().__init__()
# 4 upsample blocks, total 256x to go from mel-rate to audio-rate
...
def forward(self, mel):
return self.blocks(mel) # -> waveform
Treinamento: adversarial (discriminador sobre janelas curtas) + perda de reconstrucao do espectrograma mel + perda de feature-matching. Comoditizado — use checkpoints pre-treinados do repo hifi-gan ou do nvidia-NeMo.
Passo 5: o pipeline completo (pseudocodigo)
text = "Please remind me at 6 pm."
phones = phonemize(text)
mel = acoustic_model(phones, speaker=alice) # [T, 80]
wav = vocoder(mel) # [T * 256]
soundfile.write("out.wav", wav, 24000)
Use
A pilha de 2026:
| Situacao | Escolha |
|---|---|
| Assistente de voz em ingles em tempo real | Kokoro (CPU) ou XTTS v2 (GPU) |
| Clonagem de voz a partir de referencia de 5 s | F5-TTS |
| Vozes comerciais de personagem | ElevenLabs v2.5 |
| Narracao de audiolivro | ElevenLabs v2.5 ou XTTS v2 + fine-tune |
| Lingua de poucos recursos | Treine VITS com 5–20 h de dados na lingua-alvo |
| Tags expressivas / de emocao | ElevenLabs v2.5 ou fine-tune do StyleTTS 2 |
Lider open-source em 2026: F5-TTS para qualidade, Kokoro para eficiencia. Nao recorra ao Tacotron a menos que voce seja um historiador.
Armadilhas
- Sem normalizador de texto. "Dr. Smith" e lido como "Doctor" ou "Drive"? "2026" como "twenty twenty six" ou "two zero two six"? Normalize ANTES do fonemizador.
- Nomes proprios fora do vocabulario (OOV). "Ghumare" → "ghyu-mair"? Tenha um modelo de fallback grafema-para-fonema para tokens desconhecidos.
- Clipping. A saida do vocoder raramente satura, mas uma incompatibilidade de escala do mel na inferencia pode ultrapassar ±1.0. Sempre use
np.clip(wav, -1, 1). - Incompatibilidade de taxa de amostragem. O Kokoro gera 24 kHz; seu pipeline downstream espera 16 kHz → reamostre ou tera aliasing.
Entregue
Salve como outputs/skill-tts-designer.md. Projete um pipeline de TTS para um alvo de voz, latencia e lingua especifico.
Exercicios
- Facil. Rode
code/main.py. Constroi um dicionario de fonemas a partir de um vocabulario de brinquedo, estima a duracao por fonema e imprime um cronograma "mel" falso. - Medio. Instale o Kokoro, sintetize a mesma frase nas vozes
af_bellaeam_adam. Compare as duracoes de audio e a qualidade subjetiva. - Dificil. Grave um clipe de referencia de 5 segundos de voce mesmo. Use o F5-TTS para cloná-lo. Reporte o SECS entre a referencia e a saida clonada.
Termos-Chave
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| Fonema | Unidade de som | Classe sonora abstrata; 39 em ingles (ARPABet). |
| Preditor de duracao | Quanto dura cada fonema | Saida de modelo nao-AR; frames inteiros por fonema. |
| Vocoder | Mel → forma de onda | Rede neural que mapeia espectrograma mel para amostras brutas. |
| HiFi-GAN | Vocoder padrao | Baseado em GAN; dominante em 2020–2024. |
| MOS | Qualidade subjetiva | Mean opinion score de 1–5 de avaliadores humanos. |
| SECS | Metrica de clonagem de voz | Similaridade de cosseno entre o embedding de locutor alvo e o de saida. |
| F5-TTS | SOTA open-source de 2024 | Difusao com flow-matching; clonagem zero-shot. |
| Kokoro | Lider em ingles em CPU | Modelo de 82M de parametros, Apache 2.0. |
Leitura Adicional
- Shen et al. (2017). Tacotron 2 — o baseline seq2seq.
- Kim, Kong, Son (2021). VITS — end-to-end baseado em flow.
- Chen et al. (2024). F5-TTS — SOTA open-source atual.
- Kong, Kim, Bae (2020). HiFi-GAN — o vocoder que ainda roda em 2026.
- Kokoro-82M no HuggingFace — TTS de ingles amigavel a CPU de 2024.