← Todo el material
Curso Intermedio 24 de agosto de 2026

Voz e IA — Módulo 4: síntesis de voz (TTS) — de texto a audio

Cuarto módulo del Curso de Voz e IA en tiempo real: cómo una máquina convierte texto en voz que suena humana. Del enfoque concatenativo al neural, la arquitectura acústico + vocoder (Tacotron, VITS), los modelos modernos basados en LLM y códecs de audio, la clonación de voz y sus implicaciones éticas.

☰ Índice del contenido

En el módulo 3 cerramos el lado de escuchar: Whisper convierte una onda de audio en texto, y con eso el agente ya entiende lo que le dijeron. Pero un asistente de voz que solo escucha es media conversación. Falta el otro lado: hablar. Este módulo trata de la síntesis de voz — TTS (Text-To-Speech, texto a voz) — el proceso inverso al del módulo anterior: en vez de onda → texto, ahora es texto → onda. Y aunque suene simétrico, el problema es más difícil de lo que parece: reconocer requiere elegir entre un número finito de palabras; sintetizar requiere inventar una señal continua, muestra por muestra, que un oído humano acepte como una voz real y no como un robot.

La tesis del módulo

La síntesis de voz moderna es el ASR al revés — de texto a espectrograma a onda — pero el salto de calidad vino de dos ideas: separar “qué decir” (el modelo acústico) de “cómo suena la onda” (el vocoder), y luego, en la generación más reciente, tratar el audio como una secuencia de tokens que un modelo tipo LLM predice. Entender esas dos rupturas es entender por qué la voz sintética pasó de sonar a contestador telefónico a ser indistinguible de una persona.

Tres generaciones en una frase cada una

Antes de la arquitectura, la historia, porque explica qué problema resolvía cada avance:

  1. Concatenativo. Se graba a una persona diciendo miles de fragmentos (fonemas, sílabas, palabras), y al sintetizar se pegan los fragmentos que corresponden al texto. Un fonema es la unidad mínima de sonido de un idioma (la /s/, la /a/). Suena a la voz real de esa persona en cada trozo, pero las uniones chirrían: el tono salta entre fragmento y fragmento, y basta pedir una frase con una entonación que no se grabó para que se note el pegote. Es el “robot” clásico de los GPS antiguos.
  2. Paramétrico. En vez de guardar audio, se guarda un modelo estadístico que predice parámetros de la voz (frecuencia fundamental, duración, timbre) y un vocoder clásico los convierte en sonido. Es más flexible y ocupa menos, pero la voz sale apagada, con un zumbido característico. Nunca sonó natural.
  3. Neural. Redes neuronales aprenden directamente de horas de audio a producir la señal. Aquí sí llegó la naturalidad, y es donde vive todo el TTS actual. El resto del módulo es este tercer mundo.

La arquitectura neural clásica: dos etapas

El TTS neural que dominó de 2017 a 2022 separa el problema en dos redes, y esa separación es la primera gran idea del módulo. La razón de partirlo en dos es la misma que en tantos sistemas: desacoplar el “qué” del “cómo”.

  • Etapa 1 — el modelo acústico. Toma el texto (o su versión en fonemas) y produce un mel-espectrograma: una imagen del sonido. Un espectrograma es una representación tiempo-frecuencia — en el eje horizontal el tiempo, en el vertical las frecuencias, y el color la energía en cada punto (ya lo vimos en el módulo 2 como entrada de Whisper). El prefijo mel indica que las frecuencias están en una escala perceptual, comprimida como la oye el humano. Este modelo decide la prosodia: el ritmo, la entonación, dónde va el énfasis, cuánto dura cada sílaba. Es el “qué decir y con qué melodía”. Ejemplos: Tacotron 2 (autorregresivo, con atención, genera el espectrograma cuadro a cuadro) y FastSpeech (paralelo, predice la duración de cada fonema de una vez, muchísimo más rápido porque no espera a que salga cada cuadro para producir el siguiente).
  • Etapa 2 — el vocoder. Toma el mel-espectrograma y sintetiza la onda final, muestra por muestra (los ~24.000 números por segundo que salen al parlante). Este modelo decide el timbre fino, la textura, lo que hace que suene a voz y no a síntesis. Es el “cómo suena de verdad”. Ejemplos: WaveNet (el pionero de Google, calidad altísima pero lentísimo porque generaba muestra a muestra de forma autorregresiva) y HiFi-GAN (basado en GAN — Generative Adversarial Network, dos redes que compiten, una que genera y otra que juzga si es real; produce audio de alta fidelidad en tiempo real).

¿Por qué separarlos y no una sola red de texto a onda? Porque son dos problemas de naturaleza distinta. El espectrograma es información relativamente compacta y “lenta” (unos 80 valores cada ~12 milisegundos); la onda es densísima y “rápida” (miles de valores por segundo). Entrenar una red para saltar directo del texto a la onda es difícil y frágil. Separar deja que cada red se especialice, y además te permite cambiar el vocoder sin reentrenar el modelo acústico, o reusar un mismo vocoder para muchas voces.

      PIPELINE CLÁSICO EN DOS ETAPAS

  "hola"    ┌─────────────┐  mel-    ┌───────────┐
  texto ──► │   modelo    │ ───────► │  vocoder  │ ──► onda
  /fonemas  │  acústico   │ espectro │(HiFi-GAN) │    (audio)
            │ (Tacotron2) │ grama    └───────────┘
            └─────────────┘
             qué + prosodia          cómo suena


      VITS: UNA SOLA RED (end-to-end)

  "hola"    ┌─────────────────────────────┐
  texto ──► │  texto a latente a onda,    │ ──► onda
  /fonemas  │  sin mel-espectrograma      │    (audio)
            │  explícito                  │
            └─────────────────────────────┘

VITS cierra la brecha: es un modelo end-to-end (de punta a punta, sin etapa intermedia expuesta) que va de texto a onda en una sola red, entrenada de golpe. Por dentro sigue habiendo una representación latente y una generación tipo GAN, pero ya no hay un mel-espectrograma que tú produzcas y pases a mano al vocoder: el modelo lo aprende todo junto. VITS suele dar voz muy natural con un factor de tiempo real bajo (sintetiza más rápido de lo que dura el audio, incluso en CPU), y fue durante años la referencia libre para montar una voz propia.

Ojo: “dos etapas” no es sinónimo de “peor”. Un Tacotron 2 + HiFi-GAN bien entrenado suena excelente, y separar te da control: puedes intervenir el espectrograma en el medio (subir el tono, estirar una pausa) antes de vocodearlo. La ventaja de VITS es de ingeniería (un solo modelo que mantener, menos piezas que se desalinean), no necesariamente de calidad bruta.

El giro moderno: el audio como tokens de un LLM

Aquí viene la segunda ruptura, la que explica las voces de 2024-2025 que asustan de lo naturales que son. La idea es tan simple de enunciar como poderosa: si un LLM predice el siguiente token de texto, ¿por qué no predecir el siguiente token de audio?

Para eso hace falta convertir el audio continuo en tokens discretos, como las palabras del vocabulario de un LLM. Esa pieza es el códec de audio neural: una red que comprime la onda a una secuencia de enteros (los tokens) y sabe reconstruir la onda de vuelta desde ellos. El ejemplo canónico es EnCodec (de Meta), que usa RVQ (Residual Vector Quantization, cuantización vectorial residual — varios “libros de código” en cascada, donde cada uno afina lo que el anterior no capturó). El resultado: un segundo de voz deja de ser 24.000 números continuos y pasa a ser, digamos, unos cientos de tokens de un vocabulario cerrado.

Con el audio ya tokenizado, el TTS se vuelve un problema de modelado de lenguaje: un modelo autorregresivo tipo LLM (decoder-only) recibe el texto y predice, uno tras otro, los tokens de audio; el códec los decodifica a onda. VALL-E (Microsoft) fue el trabajo que popularizó este enfoque, tratándolo explícitamente como “modelos de lenguaje de códec neural”. Y esta reformulación desbloqueó tres cosas que el pipeline clásico no daba fácil:

  • Naturalidad y variabilidad. Como cualquier LLM, muestrea: la misma frase sale distinta cada vez, con micro-variaciones humanas (respiraciones, dudas, énfasis). No es una lectura plana.
  • Control de estilo y emoción por instrucción. Igual que le pides a un LLM “responde formal”, puedes condicionar el habla: alegre, susurrado, apurado. La voz se vuelve dirigible (steerable).
  • Clonación de voz zero-shot. Esto es lo más disruptivo. Zero-shot significa “sin entrenar nada nuevo”: le das al modelo unos segundos de audio de una persona como referencia (un prompt de audio), y a partir de ahí sintetiza cualquier texto con esa voz. VALL-E mostró clonación con ~3 segundos de referencia. Modelos como XTTS (Coqui) llevaron esto a algo que corre en un servidor propio con ~6 segundos de audio y 17 idiomas.
        TTS POR TOKENS DE AUDIO (tipo LLM)

  referencia (unos seg.)  texto a decir
        │                      │
        ▼                      ▼
  ┌───────────────────────────────────┐
  │   modelo autorregresivo (LLM)     │
  │   predice tokens de audio uno     │
  │   tras otro, condicionado en la   │
  │   voz de referencia               │
  └────────────────┬──────────────────┘
                   │ tokens de audio
                   ▼
             ┌───────────┐
             │  códec    │ ──► onda (con la voz clonada)
             │ (EnCodec) │
             └───────────┘

Fíjate en el paralelo con el pipeline clásico: el modelo autorregresivo hace el papel del modelo acústico (decide el “qué”) y el decodificador del códec hace el papel del vocoder (produce la onda). La diferencia es que el intermediario ya no es un mel-espectrograma continuo sino una secuencia de tokens discretos, y eso es justo lo que permite reusar toda la maquinaria de los LLM.

Los proveedores comerciales: TTS como una llamada de API

En producción, la mayoría no entrena nada de esto. Se consume un modelo cerrado por API. El caso de OpenAI es representativo: su modelo gpt-4o-mini-tts (anunciado en marzo de 2025) es un TTS dirigible por instrucción, con voces predefinidas (alloy, echo, nova, shimmer, y otras), y expone la característica moderna clave — el parámetro instructions para controlar tono y estilo en texto plano, algo que los modelos previos tts-1/tts-1-hd no soportaban.

"""Generar voz con la API de TTS de OpenAI y escribir un archivo.

Verificado contra la doc oficial (developers.openai.com, TTS):
- endpoint: client.audio.speech.create(...)
- 'instructions' controla estilo/tono; NO funciona con tts-1/tts-1-hd.
- formatos: mp3, opus, aac, flac, wav, pcm. Máx. 4096 caracteres de input.
"""
from pathlib import Path
from openai import OpenAI

client = OpenAI()  # lee OPENAI_API_KEY del entorno

respuesta = client.audio.speech.create(
    model="gpt-4o-mini-tts",
    voice="nova",
    input="Hola, soy el asistente. ¿En qué te puedo ayudar hoy?",
    instructions="Habla con calidez y calma, tono de servicio al cliente.",
    response_format="mp3",
)

# `.content` son los bytes del audio; los escribimos tal cual.
Path("saludo.mp3").write_bytes(respuesta.content)

Para un asistente de voz eso no basta: esperar a que se genere el archivo completo antes de reproducir mata la conversación. Hace falta streaming — empezar a mandar audio al parlante mientras el resto todavía se sintetiza. La librería lo expone con with_streaming_response:

"""Streaming de audio: reproducir mientras se genera.

Verificado contra la doc oficial: se usa el context manager
`with_streaming_response.create(...)` y se consume por chunks.
`stream_to_file` vuelca directo a disco sin cargar todo en memoria.
"""
from pathlib import Path
from openai import OpenAI

client = OpenAI()

with client.audio.speech.with_streaming_response.create(
    model="gpt-4o-mini-tts",
    voice="nova",
    input="Este audio se va escribiendo por partes, sin esperar al final.",
    instructions="Tono conversacional, natural.",
    response_format="pcm",   # PCM crudo: ideal para enviar a un parlante
) as respuesta:
    # Opción A: volcar a archivo por chunks.
    respuesta.stream_to_file(Path("salida.pcm"))

    # Opción B (comentada): empujar cada chunk a un reproductor/altavoz.
    # for chunk in respuesta.iter_bytes(chunk_size=4096):
    #     altavoz.write(chunk)   # cada chunk suena apenas llega

Si en cambio necesitas clonar una voz propia o correr sin depender de un proveedor, la opción local típica es XTTS v2 de Coqui. El paquete original quedó sin mantenimiento a inicios de 2024; el fork vivo se instala con pip install coqui-tts:

"""Clonación de voz zero-shot en local con XTTS v2 (Coqui, fork mantenido).

Verificado contra la doc de coqui-tts:
- speaker_wav: audio de referencia (una ruta o una lista de rutas).
- ~6 s de audio limpio bastan; varias clips dan un clon más estable.
- 17 idiomas, 24 kHz; corre en ~4-5 GB de VRAM.
USO ÉTICO: clona SOLO voces sobre las que tienes consentimiento explícito.
"""
from TTS.api import TTS

tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to("cuda")

tts.tts_to_file(
    text="Esta frase se dice con la voz de la muestra de referencia.",
    file_path="clon.wav",
    speaker_wav="referencia_con_consentimiento.wav",  # la voz a imitar
    language="es",
)

Cuidado (esto es serio): el código de arriba es el mismo mecanismo con el que se cometen fraudes. Con segundos de audio — sacados de un video público, una nota de voz, una llamada — hoy se clona una voz lo bastante bien como para engañar a un familiar por teléfono (“mamá, tuve un accidente, necesito plata”) o para burlar la verificación por voz de un banco. Clonar la voz de una persona sin su consentimiento explícito es, según dónde estés, ilegal, y en todas partes es una traición. Reglas mínimas si trabajas con esto: (1) clona solo voces con consentimiento por escrito; (2) marca todo audio sintético con watermarking (marca de agua — una señal imperceptible incrustada en la onda que permite después probar que ese audio fue generado por máquina); (3) nunca uses una voz clonada para hacer decir a alguien algo que esa persona no dijo. Esto conecta con la línea de privacidad y seguridad de este sitio: la voz es un dato biométrico, tan sensible como una huella, y se protege como tal.

Enfoques de TTS, uno al lado del otro

EnfoqueNaturalidadControl (estilo/voz)VelocidadCuándo
ConcatenativoBaja (uniones que chirrían)Casi nuloRápidoLegado; GPS/anuncios antiguos
Dos etapas (acústico + vocoder)AltaMedio (editas el mel)Rápido con FastSpeech + HiFi-GANVoz propia estable, control fino, on-premise
End-to-end (VITS)AltaMedioMuy rápido (incluso CPU)Una voz libre, servidor propio, pocas piezas
Por tokens / LLM (VALL-E, XTTS, APIs)Muy altaAlto (emoción + clon zero-shot)Media; pesa másMáxima naturalidad, clonación, estilo dirigible

La lectura de la tabla: si quieres máxima naturalidad, control de emoción y clonar voces, vas a un modelo por tokens (propio o por API). Si quieres una voz fija, predecible y barata de servir sin sorpresas, un VITS o un dos-etapas cumple de sobra y con menos cómputo. No hay un ganador universal; hay un enfoque por caso de uso.

Errores comunes

  • Sintetizar el texto completo antes de reproducir. En un asistente de voz, eso agrega segundos de silencio antes de que el usuario oiga algo. Se usa streaming desde el primer chunk; la latencia percibida es lo que se optimiza en el módulo 5.
  • Pasar texto crudo con números, siglas y símbolos. “$1.500” o “Dr.” o “12/8” no se leen solos bien. La normalización de texto (expandir a “mil quinientos pesos”, “doctor”, “doce de agosto”) es un paso previo que la gente olvida y que arruina la naturalidad más que el modelo.
  • Confundir “dos etapas” con “anticuado”. El pipeline acústico + vocoder sigue siendo la opción correcta cuando necesitas una voz fija, editable y barata de servir. Lo moderno no siempre es lo que toca.
  • Elegir un modelo por tokens para una voz que nunca cambia. Si tu producto usa una sola voz de marca, pagar el costo y la latencia de un modelo tipo LLM con clonación zero-shot es sobreingeniería: un VITS entrenado en esa voz es más liviano y más predecible.
  • Clonar sin consentimiento “porque es solo una demo”. Una demo se filtra, se reusa, se convierte en producto. El consentimiento y el watermarking no son un paso final: son requisito desde la primera línea de código.
  • Ignorar el formato de audio de salida. Pedir mp3 cuando tu pipeline de telefonía quiere PCM crudo obliga a decodificar y recodificar, agregando latencia. Elige el formato que tu canal consume directo.

La frase para llevarse

“Sintetizar voz no es leer texto en voz alta: es inventar una onda que un oído humano acepte. El salto de robot a persona vino de separar el qué del cómo, y luego de darse cuenta de que el audio, troceado en tokens, es un idioma más que un LLM puede aprender a hablar.”

Qué viene

Ya sabemos escuchar (Whisper) y hablar (TTS). Pero un asistente de voz que tarda tres segundos en responder no sirve, por perfecta que sea la voz. El módulo 5 ataca el enemigo número uno de la voz en tiempo real: la latencia. Cómo se suma el retardo a lo largo de toda la cadena (captura → ASR → LLM → TTS → parlante), por qué el streaming en cada etapa es obligatorio y no opcional, y cómo se mide y se recorta ese presupuesto de milisegundos para que la conversación se sienta natural.

Material relacionado

VozTTSSíntesis de vozVocoderClonación de voz

Preguntas sobre este curso

Regístrate gratis para hacer preguntas y guardar tu progreso.

✉ Entérate de lo nuevo

Recibe un aviso cuando publique nuevos cursos, workshops o investigaciones. Sin spam.