El texto a voz con emoción es una voz sintética que suena contenta, preocupada, arrepentida o molesta cuando el momento lo pide, en lugar de leerlo todo con el mismo tono educado y plano. Los modelos actuales ya hacen buena parte de esto por su cuenta: leen la frase y deciden cómo debe sonar. Los controles que añades encima sirven para matizar, no para rescatar una frase escrita sin emoción.
Ese orden resume la guía. Si creas agentes de voz o aplicaciones, la mayor parte de la calidad emocional que oyes sale de las palabras que escribe tu sistema y de la voz que eliges. Las etiquetas y los parámetros ajustan lo que queda. A continuación verás cómo funciona cada enfoque, cómo lo exponen las principales API, código que funciona con Sonic de Cartesia y cómo saber si el resultado es bueno.
De dónde sale la emoción en el TTS
Una frase no define una única interpretación correcta. “I can’t believe it” puede ser alegría, furia, pena o sarcasmo. Nuestro equipo de investigación describe el texto a voz como un problema de uno a muchos: el modelo tiene que decidir dónde hacer pausas, qué palabras acentuar, a qué velocidad hablar y qué sentimiento transmitir, a menudo a partir de un texto que no lo dice.
Un modelo puede tomar esa decisión de cuatro maneras:
- La deduce del texto. El modelo lee las palabras y la puntuación que rodean la frase y elige una interpretación. Es el comportamiento por defecto en todos los modelos actuales y el que más importa.
- Tú la nombras. Un parámetro o una etiqueta dice
angryocalm. El modelo se inclina hacia ahí, dentro de lo razonable. - Eliges un estilo. Algunas voces traen estilos de habla con nombre, como uno de atención al cliente o uno de noticiario, cada uno grabado o entrenado como una interpretación propia.
- La describes. Un prompt en lenguaje natural dice “dilo con calidez, como si tranquilizaras a un amigo”. El modelo interpreta la descripción.
Todas las API mezclan estas opciones. Lo que cambia es cuál tratan como control principal.
Cómo reciben las principales API la dirección emocional
Según la documentación de cada proveedor, consultada el 12 de octubre de 2026:
| API | Cómo diriges la emoción | Conviene saber |
|---|---|---|
| Cartesia Sonic 3.6 | Por defecto, la deduce del texto. generation_config.emotion por solicitud, o una etiqueta <emotion value="..."/> en línea. [laughter] para reír. | 58 valores, 6 de ellos principales. Las etiquetas están en beta y solo en inglés; en todos los idiomas, Sonic sigue leyendo la emoción del texto. Funciona cuando la etiqueta coincide con las palabras. La emoción puede cambiar en mitad del stream. |
| ElevenLabs v4 y v3 | Etiquetas de audio entre corchetes dentro del texto, como [sarcastic], [whispers] o [laughs]. | Las etiquetas son instrucciones libres, no una lista fija. v4 y v3 no admiten las etiquetas SSML de pausa. |
| Azure Speech | SSML <mstts:express-as style="..."> con un styledegree de 0,01 a 2. Las voces HD también aceptan marcadores de estilo como [whispering]. | Los estilos de las voces neuronales existen solo para algunas voces. Compruébalo antes de diseñar en torno a un estilo. |
| Gemini TTS | Un campo prompt en lenguaje natural junto al texto, más etiquetas en línea como [laughs] y [sigh]. | Los modelos TTS preview 2.5 y 3.1 salen de la API de Gemini como pronto el 17 de noviembre de 2026. |
| OpenAI gpt-4o-mini-tts | Una cadena instructions, como “Speak in a cheerful and positive tone.” | Obsoleto. OpenAI retira todos los modelos del endpoint de voz el 6 de enero de 2027. |
| Amazon Polly | Sin etiquetas de emoción. Un estilo de locutor de noticias en algunas voces neuronales. | La interpretación depende sobre todo de la voz y del texto. |
Octave, de Hume, que aceptaba instrucciones de actuación en lenguaje natural, estaba en esta tabla hasta hace poco. Hume cierra sus API de TTS y EVI el 13 de noviembre de 2026. Si estás migrando, nuestra guía de alternativas a Hume explica qué guardar primero.
Hay un patrón que importa en producción. Los controles tipo prompt (Gemini y el modelo de OpenAI que se retira) son texto libre, así que no hay un vocabulario fijo con el que probar: para reproducir una interpretación hay que guardar la redacción exacta de la instrucción y volver a probar cada vez que cambie. Un valor con nombre (la lista de emociones de Sonic, los estilos de Azure) es un ajuste que puedes versionar, probar y revertir, que es lo que quieres cuando 10.000 llamadas al día pasan por el mismo agente.
Escribe primero la emoción en las palabras
Es el paso que más equipos se saltan, y el que mejor funciona.
Sonic 3.6 ajusta su ritmo y su entonación al contexto emocional del texto, sin etiquetas. En pruebas ciegas cara a cara en inglés de EE. UU., los oyentes prefirieron Sonic 3.6 frente a Eleven v3 el 92% de las veces, y el motivo fue una entonación mejor y una emoción guiada por el contexto. Es decir, el modelo ya escucha tus palabras. Dale palabras que merezcan la pena.
En un agente de voz, eso significa que la emoción vive en el prompt del LLM. Si quieres un tono empático, el LLM tiene que escribir un texto empático. Compara dos respuestas a un cliente cuyo pedido llega tarde:
- “Tu pedido se ha retrasado. La nueva fecha de entrega es el jueves.”
- “Lo siento mucho, sé que contabas con ello. Ahora llegará el jueves.”
Ninguna etiqueta hará que la primera suene a disculpa. La segunda suena a disculpa sin etiqueta alguna. Nuestra guía para elegir modelos de IA de voz dice lo mismo desde el otro lado: Sonic se expresa de acuerdo con el texto e ignora una configuración que lo contradiga.
Algunos hábitos de escritura que ayudan a cualquier modelo:
- Mantén la puntuación normal. Un signo de interrogación, una coma antes de “pero” o un signo de exclamación aportan información sobre la interpretación. Quitar la puntuación para “limpiar” la salida del LLM aplana la voz.
- Deja que el agente dude donde lo haría una persona. Sonic interpreta las muletillas del texto, como “uh” o “hmm”, como un ritmo natural de pensar. Úsalas con moderación, antes de un número consultado o después de una pregunta difícil, no en cada frase.
- No narres la emoción. “Dijo ella, enfadada” se lee en voz alta. Pon el enfado en lo que dice.
Elige una voz con el temperamento adecuado
Las voces tienen un estado de ánimo por defecto. Una voz diseñada para sonar como alguien alegre que lo arregla todo no sonará como un confidente de confianza, la etiquetes como la etiquetes. Ajusta primero la voz al trabajo y después afina.
En Cartesia, la biblioteca de voces marca las voces expresivas con la etiqueta Emotive, y los controles de emoción responden mejor con ellas. La documentación cita a Leo, Jace, Kyle, Gavin, Maya, Tessa, Dana y Marian como las voces con más rango emocional. Si clonas una voz, el clon conserva la interpretación de la grabación original, así que graba la muestra con el estado de ánimo que quieres que tenga el agente.
Controla la emoción con Sonic
Cuando las palabras y la voz están bien, así se empuja más la interpretación. Estos ejemplos usan el SDK de Python de Cartesia en la versión 4.2.0 y sonic-3.6. Define primero CARTESIA_API_KEY en tu entorno e instala cartesia[websockets] para el ejemplo de streaming. Nuestro tutorial de texto a voz en Python explica la configuración.
Una emoción para toda la solicitud
import os
from cartesia import Cartesia
with Cartesia(api_key=os.environ["CARTESIA_API_KEY"]) as client:
response = client.tts.generate(
model_id="sonic-3.6",
transcript="I'm sorry, I know you were counting on this. It's now arriving Thursday.",
voice="6ccbfb76-1fc6-48f7-b71d-91ac6298247b", # Tessa, an Emotive voice
language="en",
output_format={"container": "wav", "encoding": "pcm_s16le", "sample_rate": 44100},
generation_config={"emotion": "sympathetic", "speed": 0.95},
)
response.write_to_file("apology.wav")
generation_config se aplica solo a esa solicitud; no hay un ajuste para toda la cuenta. speed va de 0,6 a 1,5 y volume de 0,5 a 2,0, y Sonic trata los tres como una guía, no como multiplicadores estrictos, para que el habla siga sonando natural. Si quieres un cambio claramente audible, haz un ajuste mayor: 0,7 en lugar de 0,9.
Cambia la emoción dentro de un texto
transcript = (
'<emotion value="calm"/> I can help with that. '
'<emotion value="excited"/> Good news, your refund went through this morning!'
)
Las etiquetas en línea son útiles para una frase con guion que tiene un giro claro. Los cambios en mitad del texto son la parte más experimental de la función, así que, cuando el cambio importa, envía cada parte en su propio contexto de generación.
Cambia la emoción durante el streaming
En la API WebSocket, cada fragmento de texto que envías puede llevar sus propios ajustes. Es el patrón de un agente que pasa a voz los tokens del LLM a medida que llegan:
with client.tts.websocket_connect() as ws:
ctx = ws.context(
model_id="sonic-3.6",
voice="6ccbfb76-1fc6-48f7-b71d-91ac6298247b",
output_format={"container": "raw", "encoding": "pcm_s16le", "sample_rate": 44100},
language="en",
)
ctx.push("Well, maybe if you just ")
ctx.push("loosen up a little!", generation_config={"emotion": "angry"})
ctx.no_more_inputs()
for response in ctx.receive():
if response.type == "chunk" and response.audio:
... # play or buffer the audio
Ese ejemplo viene del ejemplo de emoción por WebSocket de nuestra documentación. Para una risa, escribe [laughter] en el texto. Para una pausa exacta, usa <break time="1s"/>, aunque una coma o un punto suelen dar una pausa mejor.
Qué valor elegir
Empieza por las seis emociones principales: neutral, calm, angry, content, sad y scared. Son las que tienen más datos de entrenamiento detrás. Las otras 52 (sympathetic, apologetic, curious, skeptical, determined, sarcastic y el resto) están en la lista completa y merece la pena probarlas cuando un valor principal se acerca pero no acierta. Muchos agentes de soporte se apañan con tres: calm por defecto, sympathetic para las malas noticias y content cuando el problema está resuelto.
Cómo saber si la emoción es la correcta
La emoción es la parte de la calidad del TTS que ninguna métrica capta. Una comprobación basada en la transcripción, como la tasa de error de palabras, puntúa como perfecta una lectura furiosa de “Gracias por esperar”. Hay que escuchar, y hay que escuchar pensando en la situación.
- Explica el escenario a quien escucha. “Un agente de soporte le dice a un cliente que su vuelo está cancelado” da un juicio útil. “Valora este clip” da un juicio sobre la voz.
- Prueba conversaciones completas, no frases sueltas. Una emoción que encaja en un turno puede resultar rara tres turnos después, y una voz que cambia de ánimo a lo largo de una llamada es un fallo que solo se oye en contexto.
- Cuenta con que los oyentes no estén de acuerdo. A algunas personas les gusta un agente expresivo; a otras, la misma interpretación les parece exagerada y cansina. Informa de esa división en lugar de promediarla. Nuestra guía del mean opinion score explica por qué un solo número la esconde.
- Escucha por la ruta real de streaming. Un modelo que elige la emoción equivocada en el primer fragmento de audio a veces no se recupera. Eso no se oye en un render offline.
Dónde encaja Cartesia
Sonic está hecho para voz en tiempo real: agentes de voz, llamadas telefónicas y aplicaciones que responden hablando. Por defecto, la emoción sale del texto, los controles funcionan durante el streaming y el ajuste de emoción es un valor con nombre que puedes probar y versionar como el resto de tu agente. Si estás creando un agente telefónico y no quieres conectar tú mismo el reconocimiento de voz, un LLM y el TTS, Managed Agents ejecuta todo el ciclo con Sonic como voz.
Si produces un audiolibro o una locución de vídeo y quieres editar la interpretación línea a línea en una línea de tiempo, un editor de estudio encaja mejor que una API. Nuestra guía de alternativas a ElevenLabs recoge varios.
Para oír la diferencia, abre el playground, elige una voz Emotive y lee la misma frase con calm y después con sympathetic. Luego reescribe la frase para que suene a disculpa sin ninguna etiqueta. El segundo experimento suele ser el que más enseña.