Phase 06 - Lesson 07

Text-to-Speech (TTS) — de Tacotron a F5 y Kokoro

El ASR invierte el habla a texto; el TTS invierte el texto a habla. El stack de 2026 tiene tres partes: texto → tokens, tokens → mel, mel → forma de onda. Cada parte tiene un modelo por defecto que cabe en una laptop.

Tipo: Build Lenguajes: Python Requisitos previos: Fase 6 · 02 (Espectrogramas y Mel), Fase 5 · 09 (Seq2Seq), Fase 7 · 05 (Transformer Completo) Tiempo: ~75 minutos

El Problema

Tienes una cadena: "Please remind me to water the plants at 6 pm." Necesitas un clip de audio de 3 segundos que suene natural, tenga la prosodia correcta (pausas, enfasis), pronuncie "plants" con la vocal correcta y se ejecute en menos de 300 ms en una CPU para un asistente de voz en vivo. Tambien necesitas cambiar de voces, manejar entradas con cambio de codigo ("remind me at 6 pm, daijoubu?") y no hacer el ridiculo con nombres propios.

Los pipelines modernos de TTS lucen asi:

  1. Frontend de texto. Normaliza el texto (fechas, numeros, correos), convierte a fonemas o tokens de subpalabra, predice 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 en 2024+.

En 2026 la division acustico + vocoder se difumina con modelos end-to-end de difusion y flow-matching. Pero el modelo mental de tres partes sigue siendo valido para depurar.

El Concepto

Tacotron, FastSpeech, VITS, F5/Kokoro lado a lado

Tacotron 2 (2017). Seq2seq: char-embedding → encoder BiLSTM → atencion sensible a la ubicacion → decoder LSTM autorregresivo que emite frames de mel. Lento (AR), inestable en textos largos. Aun se cita como baseline.

FastSpeech 2 (2020). No autorregresivo. El predictor de duracion genera cuantos frames de mel recibe cada fonema. Una sola pasada, 10x mas rapido que Tacotron. Pierde algo de naturalidad (alineamiento monotonico) pero se despliega en todas partes.

VITS (2021). Entrena conjuntamente encoder + duracion basada en flow + vocoder HiFi-GAN end-to-end con inferencia variacional. Alta calidad, modelo unico. TTS open-source dominante en 2022–2024. Variantes: YourTTS (multi-hablante zero-shot), XTTS v2 (2024, Coqui).

F5-TTS (2024). Transformer de difusion sobre flow matching. Prosodia natural, clonacion de voz zero-shot con 5 segundos de audio de referencia. En la cima de los rankings de TTS open-source de 2026. 335M de parametros.

Kokoro (2024). Pequeno (82M), ejecutable en CPU, el mejor TTS de ingles de su categoria para uso en tiempo real. Solo ingles con vocabulario cerrado, apache-2.0.

OpenAI TTS-1-HD, ElevenLabs v2.5, Google Chirp-3. Estado del arte comercial. Las etiquetas de emocion de ElevenLabs v2.5 ("[whispered]", "[laughing]") y las voces de personaje dominan la produccion de audiolibros en 2026.

Evolucion del vocoder

Era Vocoder Latencia Calidad
2016 WaveNet solo offline SOTA al lanzamiento
2018 WaveRNN ~tiempo real buena
2020 HiFi-GAN 100x tiempo real casi humana
2022 BigVGAN 50x tiempo real generaliza entre hablantes/lenguas
2024 SNAC, DAC (codecs neuronales) integrados con modelos AR tokens discretos, eficientes en bits

Para 2026 la mayoria de los modelos de "TTS" son end-to-end de texto a forma de onda; el espectrograma mel es una representacion interna.

Evaluacion

  • MOS (Mean Opinion Score). Escala de 1–5, obtenida por crowdsourcing. Sigue siendo el estandar de oro; dolorosamente lento.
  • CMOS (Comparative MOS). Preferencia A-vs-B. Intervalos de confianza mas ajustados por anotacion.
  • UTMOS, DNSMOS. Predictores neuronales de MOS sin referencia. Usados en rankings.
  • CER (Character Error Rate) via ASR. Pasa la salida del TTS por Whisper, calcula el CER contra el texto de entrada. Proxy de inteligibilidad.
  • SECS (Speaker Embedding Cosine Similarity). Calidad de la clonacion de voz.

Numeros de 2026 en LibriTTS test-clean:

Modelo UTMOS CER (via Whisper) Tamano
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

Construyelo

Paso 1: fonemiza la entrada

from phonemizer import phonemize
ph = phonemize("Hello world", language="en-us", backend="espeak")
# 'həloʊ wɜːld'

Los fonemas son el puente universal. Evita alimentar texto crudo a cualquier cosa por debajo del nivel de calidad de VITS.

Paso 2: ejecuta Kokoro (por defecto para CPU en 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

Se ejecuta offline, archivo unico, 82M de parametros.

Paso 3: ejecuta F5-TTS con clonacion 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.",
)

Pasa un clip de referencia de 5 segundos + su transcripcion; F5 clona prosodia y timbre.

Paso 4: vocoder HiFi-GAN desde cero

Demasiado grande para caber en un script de tutorial, pero la forma es:

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

Entrenamiento: adversarial (discriminador sobre ventanas cortas) + perdida de reconstruccion del espectrograma mel + perdida de feature-matching. Comoditizado — usa checkpoints preentrenados del repo hifi-gan o de nvidia-NeMo.

Paso 5: el 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)

Usalo

El stack de 2026:

Situacion Eleccion
Asistente de voz en ingles en tiempo real Kokoro (CPU) o XTTS v2 (GPU)
Clonacion de voz desde referencia de 5 s F5-TTS
Voces comerciales de personaje ElevenLabs v2.5
Narracion de audiolibro ElevenLabs v2.5 o XTTS v2 + fine-tune
Lengua de pocos recursos Entrena VITS con 5–20 h de datos en la lengua objetivo
Etiquetas expresivas / de emocion ElevenLabs v2.5 o fine-tune de StyleTTS 2

Lider open-source en 2026: F5-TTS para calidad, Kokoro para eficiencia. No recurras a Tacotron a menos que seas un historiador.

Errores Comunes

  • Sin normalizador de texto. "Dr. Smith" se lee como "Doctor" o "Drive"? "2026" como "twenty twenty six" o "two zero two six"? Normaliza ANTES del fonemizador.
  • Nombres propios fuera de vocabulario (OOV). "Ghumare" → "ghyu-mair"? Despliega un modelo de fallback grafema-a-fonema para tokens desconocidos.
  • Clipping. La salida del vocoder rara vez satura, pero un desajuste de escala del mel en la inferencia puede sobrepasar ±1.0. Usa siempre np.clip(wav, -1, 1).
  • Desajuste de tasa de muestreo. Kokoro genera 24 kHz; tu pipeline downstream espera 16 kHz → remuestrea o tendras aliasing.

Entregalo

Guarda como outputs/skill-tts-designer.md. Diseña un pipeline de TTS para un objetivo especifico de voz, latencia y lengua.

Ejercicios

  1. Facil. Ejecuta code/main.py. Construye un diccionario de fonemas a partir de un vocabulario de juguete, estima la duracion por fonema e imprime un cronograma "mel" falso.
  2. Medio. Instala Kokoro, sintetiza la misma frase en las voces af_bella y am_adam. Compara las duraciones de audio y la calidad subjetiva.
  3. Dificil. Graba un clip de referencia de 5 segundos de ti mismo. Usa F5-TTS para clonarlo. Reporta el SECS entre la referencia y la salida clonada.

Terminos Clave

Termino Lo que dice la gente Lo que realmente significa
Fonema Unidad de sonido Clase sonora abstracta; 39 en ingles (ARPABet).
Predictor de duracion Cuanto dura cada fonema Salida de modelo no-AR; frames enteros por fonema.
Vocoder Mel → forma de onda Red neuronal que mapea espectrograma mel a muestras crudas.
HiFi-GAN Vocoder estandar Basado en GAN; dominante en 2020–2024.
MOS Calidad subjetiva Mean opinion score de 1–5 de evaluadores humanos.
SECS Metrica de clonacion de voz Similaridad de coseno entre el embedding de hablante objetivo y el de salida.
F5-TTS SOTA open-source de 2024 Difusion con flow-matching; clonacion zero-shot.
Kokoro Lider en ingles en CPU Modelo de 82M de parametros, Apache 2.0.

Lecturas Adicionales

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