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:

  1. Frontend de texto. Normaliza o texto (datas, numeros, e-mails), converte em fonemas ou tokens de subpalavra, prediz features de prosodia.
  2. Modelo acustico. Texto → espectrograma mel. Tacotron 2 (2017), FastSpeech 2 (2020), VITS (2021), F5-TTS (2024), Kokoro (2024).
  3. 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, FastSpeech, VITS, F5/Kokoro lado a lado

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

  1. 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.
  2. Medio. Instale o Kokoro, sintetize a mesma frase nas vozes af_bella e am_adam. Compare as duracoes de audio e a qualidade subjetiva.
  3. 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

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).