Identificar hablantes
Una transcripción responde qué se dijo; este endpoint da un primer paso al dividir una grabación en turnos.
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.
Escucha las pausas entre tramos de habla y corta el audio en segmentos, etiquetándolos como turnos alternos (Hablante 1, Hablante 2) con tiempo de inicio y fin. Lea el límite con honestidad: segmenta turnos por silencio, no identifica las voces ni deduce el número real de hablantes distintos.
Qué hace realmente esta tarea
Ejecuta una segmentación ligera de turnos, no un reconocimiento acústico de hablantes. La grabación se transcribe y, allí donde hay una pausa lo bastante larga entre segmentos, la etiqueta cambia al siguiente turno, alternando entre dos marcas. Eso le da una estructura segmentada y con tiempos —un ida y vuelta legible en lugar de un bloque sin diferenciar— que resulta genuinamente útil como primer paso en una conversación de dos personas. Lo que no es es un modelo que escuche las características de la voz y decida quién es quién: las etiquetas salen del ritmo de las pausas, no de distinguir una voz de otra.
Qué devuelve la tarea
Envíe un archivo de audio por POST a /audio/diarize y la tarea devuelve una lista de turnos: cada turno lleva una etiqueta de hablante (Hablante 1 o Hablante 2), el texto de ese tramo y su tiempo de inicio y fin. También informa cuántas etiquetas distintas usó, que en este enfoque por pausas son como mucho dos: esa cuenta es una propiedad de la segmentación, no una medición de cuántas personas hay realmente en la sala. Combinada con una transcripción, obtiene una estructura tipo guion, con tiempos, fácil de repasar.
Dónde encaja el enfoque por pausas y dónde no
Encaja en un intercambio limpio de dos personas —una entrevista, una llamada uno a uno— donde los hablantes se turnan casi siempre y las pausas coinciden con el cambio de voz. No encaja en un panel con varios participantes, con mucho solapamiento de voces, ni en un caso donde necesite seguir a cada persona real de forma consistente en toda la grabación: alternar dos etiquetas por silencio los etiquetará mal. Si su flujo necesita que se determine el número real de hablantes o que se relacionen las voces con identidades, esa es una tarea distinta y más pesada que la que hace este endpoint, y esta página no fingirá lo contrario.
Para qué sirve aún una segmentación de turnos
Aun sin reconocimiento real de hablantes, dividir una grabación de dos personas en turnos con tiempos ahorra trabajo de verdad: convierte un muro de transcripción en un intercambio legible que puede repasar, citar por su tiempo o pasar a un paso de notas. Un equipo de soporte que revisa una sola llamada de agente y cliente, un periodista que limpia una entrevista uno a uno o un productor que trocea un segmento de dos presentadores en turnos legibles obtienen valor de una estructura de primer paso que pueden corregir a mano donde importe, en lugar de partir de un bloque sin diferenciar.
Precio y cómo se factura
El costo es una tarifa base pequeña por solicitud más una tarifa por minuto según la duración de la grabación, publicada en esta página. La tarea procesa de forma asíncrona: envíe el audio, reciba un task_id de inmediato y recolecte el resultado segmentado por turnos mediante webhook firmado o desde un enlace firmado válido por 24 horas; una tarea fallida reintenta automáticamente hasta tres veces y nunca se cobra si sigue sin completarse.
Qué puede hacer con ella
Turnos de una entrevista de dos personas
Un periodista procesa una entrevista grabada uno a uno para dividirla en turnos con tiempos, convirtiendo una transcripción en bruto en un ida y vuelta legible que corregir a mano.
Revisión de una llamada de agente y cliente
Un equipo de soporte divide una sola llamada grabada en turnos alternos para agilizar la revisión, sin esperar que la herramienta identifique quién es quién por la voz.
Limpieza de un segmento de dos presentadores
Un productor trocea una grabación de dos presentadores en turnos con tiempos como primer paso antes de editar las notas del episodio, corrigiendo a mano las etiquetas equivocadas.
Estructura de primer paso antes de las notas
Un flujo segmenta una conversación en turnos y tiempos antes de un paso de resumen, dándole a la etapa siguiente una entrada estructurada en vez de un bloque plano.
Preguntas frecuentes
¿Qué hace exactamente este endpoint?
Segmenta una grabación en turnos detectando las pausas entre tramos de habla, y los etiqueta como turnos alternos (Hablante 1, Hablante 2) con tiempo de inicio y fin. Es una segmentación de turnos por pausas, no un reconocimiento acústico de hablantes.
¿Determina cuántos hablantes hay en la grabación?
No. Alterna entre dos etiquetas según las pausas, así que no deduce el número real de hablantes distintos. La cuenta de etiquetas que informa es una propiedad de la segmentación, no una medición de cuántas personas están presentes.
¿Identifica qué persona concreta está hablando?
No. Las etiquetas salen del ritmo de las pausas, no de distinguir una voz de otra, así que no identifica a los hablantes ni relaciona voces con identidades. En un intercambio limpio de dos personas las etiquetas alternas suelen coincidir con los dos hablantes; con más voces o mucho solapamiento, no.
¿En qué se diferencia de la transcripción?
La transcripción produce las palabras que se dijeron; esta tarea añade encima una estructura de turnos y tiempos, dividiendo el texto en segmentos alternos con marca de tiempo para que una grabación de dos personas se lea como un intercambio y no como un bloque.
¿Este endpoint es gratuito?
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.
¿Cómo recibo el resultado?
La tarea devuelve un task_id de inmediato y procesa de forma asíncrona; los resultados llegan por webhook firmado o desde un enlace firmado válido por 24 horas.
¿Cuándo saldrán mal los turnos?
En grabaciones con más de dos hablantes, con mucho solapamiento o con pausas largas dentro del habla de una misma persona, alternar dos etiquetas por silencio etiquetará mal los turnos. Trate la salida como un primer paso a corregir, no como una atribución definitiva.
¿Qué pasa si la tarea falla?
La tarea reintenta automáticamente hasta tres veces antes de devolver un error claro, y una solicitud fallida nunca se cobra.
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, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/audio/diarize \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"audio":"https://ejemplo.com/audio.mp3"}'const res = await fetch("https://api.kit.forhosting.com/audio/diarize", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"audio": "https://ejemplo.com/audio.mp3"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/audio/diarize",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"audio": "https://ejemplo.com/audio.mp3"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/audio/diarize", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"audio":"https://ejemplo.com/audio.mp3"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"audio":"https://ejemplo.com/audio.mp3"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/audio/diarize", 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
{
"audio": "https://ejemplo.com/audio.mp3"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "audio.diarize",
"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. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |