Texto a voz con SSML
La síntesis de voz con texto plano elige por su cuenta dónde pausar y qué acentuar, lo cual funciona bien hasta que necesita resaltar una palabra específica, que un número se lea de cierta forma, o una pausa de dos segundos antes del remate. Esta API de texto a voz con SSML recibe texto marcado y le da ese control directamente, en vez de confiar en que el modelo adivine bien.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Qué es SSML y por qué existe
Speech Synthesis Markup Language es un estándar del W3C creado específicamente para que quien escribe le indique al motor de voz cómo decir algo, no solo qué decir: dónde pausar, qué sílaba acentuar, cómo pronunciar una sigla o un nombre propio, si una cadena de dígitos es una fecha, un teléfono o una cantidad simple. Ha sido la forma estándar de la industria para controlar el habla sintetizada durante años, precisamente porque el texto plano es genuinamente ambiguo: '2/3' puede ser una fecha, una fracción o un marcador, y solo el marcado resuelve eso de forma confiable.
Cómo funcionan la solicitud y la respuesta
Envía texto marcado con etiquetas SSML en el cuerpo de la solicitud en lugar de texto plano, usando etiquetas estándar para pausas, énfasis, pronunciación fonética y prosodia. La tarea se pone en cola de forma asíncrona y devuelve un task_id de inmediato; el audio renderizado, respetando cada pausa y acento que marcó, se entrega después por webhook firmado o por un enlace firmado válido por 24 horas. El marcado mal formado se detecta y se reporta como un error claro en vez de ignorarse en silencio, así sabe de inmediato si una etiqueta necesita corrección.
Dónde importa realmente ese control
El texto a voz plano funciona bien para una notificación; el SSML se justifica cuando lo que está en juego es mayor: un narrador de audiolibro que necesita una pausa dramática, un mensaje farmacéutico que debe pronunciar el nombre de un medicamento exactamente bien, un módulo de e-learning que resalta la palabra que nadie debe pasar por alto, o un anuncio de vuelos donde la ambigüedad no es aceptable. Quien construye voz donde el énfasis equivocado cambia el sentido recurre al marcado.
Cómo encaja en contenido automatizado
Como SSML es simplemente texto estructurado, es fácil generarlo de forma programática: un flujo de contenido puede envolver números en las etiquetas correctas, insertar pausas entre secciones o marcar un nombre con una pista fonética, sin intervención humana. Ese es el público de este endpoint: equipos que ya generan guiones de forma algorítmica y necesitan que el audio resultante suene deliberado. El precio refleja ese uso más preciso: una base pequeña por solicitud más una tarifa por cada 1000 caracteres, y las tareas fallidas nunca se cobran tras los reintentos automáticos.
Acceso y manejo de resultados
Este endpoint requiere saldo prepago, igual que todos los demás de la API; una solicitud sin saldo devuelve HTTP 402 en vez de un resultado parcial o degradado. El marcado enviado y el audio generado se eliminan al finalizar el período de retención y nunca se usan para entrenar modelos; la entrega es estrictamente por su webhook o por un enlace firmado temporal, y nada se conserva más allá de esa ventana.
Qué puede hacer con ella
Narración de audiolibros con ritmo
Marque el texto de un capítulo con pausas y énfasis deliberados para que la narración suene dirigida y no plana.
Mensajes farmacéuticos y médicos
Use etiquetas de fonema para garantizar que el nombre de un medicamento o ingrediente se pronuncie exactamente bien en un mensaje de voz automatizado.
Anuncios de vuelos y transporte
Marque números de vuelo, horarios y puertas de embarque para que se lean sin ambigüedad en vez de que un motor de texto plano los adivine.
Énfasis en materiales de e-learning
Resalte la palabra específica de una lección que quien estudia no debe pasar por alto, usando etiquetas de énfasis en vez de reescribir la frase.
Preguntas frecuentes
¿Qué es SSML y cómo lo usa esta api?
SSML es un estándar de marcado para controlar la síntesis de voz; este endpoint recibe texto marcado con SSML y genera audio que respeta las pausas, el énfasis y la pronunciación que especifique.
¿Qué etiquetas SSML soporta?
Se soportan etiquetas estándar para pausas, énfasis, pronunciación fonética y prosodia; las etiquetas mal formadas se rechazan con un error claro en vez de ignorarse en silencio.
¿Es gratuita la api de texto a voz con ssml?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cuánto cuesta el texto a voz con ssml?
Cuesta $0.002 por solicitud más $0.0025 por cada 1000 caracteres de texto marcado, un precio menor por carácter que el texto a voz plano debido a su uso más específico.
¿Necesito ssml para un texto a voz básico?
No, si solo necesita audio con voz natural a partir de texto plano sin controlar pausas ni pronunciación, el endpoint estándar de texto a voz es más simple y suficiente.
¿Cómo recibo el audio generado?
La tarea es asíncrona y devuelve un task_id de inmediato; el audio final se entrega por webhook firmado o por un enlace firmado válido por 24 horas.
¿Qué pasa si mi marcado ssml es inválido?
La solicitud falla con un error claro que describe el problema del marcado, y las tareas fallidas nunca se cobran.
¿Puedo usar ssml para controlar la pronunciación de nombres o siglas?
Sí, las etiquetas de fonema permiten especificar la pronunciación exacta de nombres, siglas o términos técnicos que un modelo de voz por defecto podría adivinar mal.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/voice/tts-ssml \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/voice/tts-ssml", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/voice/tts-ssml",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/voice/tts-ssml", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/voice/tts-ssml", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "voice.tts_ssml",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 200 |
max_minutes | 180 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |