Lección 5 · 5 min · Gratis
Implementación de doblaje con ElevenLabs (Next.js)
Antes de escribir cualquier código, invoca la habilidad /text-to-speech para aprender los patrones correctos del SDK de ElevenLabs.
Este ejemplo usa la API de Proyectos de Doblaje (dubbing v2): un proyecto contiene el medio fuente y su transcripción, y cada idioma objetivo produce una salida doblada en un solo idioma.
1. app/api/dubbing/route.ts
Endpoint POST seguro que inicia un proyecto de doblaje a partir de una grabación subida.
- Lee
ELEVENLABS_API_KEYdeprocess.env. Devuelve 500 si falta. - Acepta
audio(File),targetLang(string), y opcionalsourceLang(string, predeterminadoauto) de la solicitudFormData. - Devuelve 400 si el audio falta o es inválido, o si falta
targetLang. - Usa
ElevenLabsClienty llama aclient.dubbing.project.create({ file: audio, targetLanguage: targetLang, sourceLanguage: sourceLang === "auto" ? undefined : sourceLang, reference: "Browser dubbing demo" }). El atajotargetLanguagetambién pone en cola un idioma objetivo que comienza a generarse automáticamente una vez que el proyecto termina de transcribir. - Devuelve JSON
{ projectId, languageId }, leyendolanguageIddeproject.languageIds?.[0] ?? null. - Envuelve los fallos en errores JSON legibles.
2. app/api/dubbing/[projectId]/route.ts
Endpoint GET seguro que devuelve el estado combinado del proyecto y del idioma para el sondeo.
- Lee y valida
projectIdde los parámetros de la ruta. - Llama a
client.dubbing.project.get(projectId). Los estados del proyecto sonqueued,preparing,processing,ready, ofailed. - Si el proyecto tiene un idioma objetivo (
project.languageIds?.[0]), también llama aclient.dubbing.project.language.get(projectId, languageId). Los estados del idioma sonqueued,processing,completed,stale, ofailed. - Devuelve JSON con
projectStatus,languageId, ylanguageStatus. - Mantén la respuesta pequeña y amigable para el sondeo del cliente.
3. app/api/dubbing/[projectId]/audio/[languageId]/route.ts
Endpoint GET seguro que actúa como proxy de la salida de audio doblado.
- Lee y valida
projectIdylanguageIdde los parámetros de la ruta. - Llama a
client.dubbing.project.language.get(projectId, languageId). Una vez que el idioma escompleted,outputs.losslessAudiocontiene una URL de descarga firmada que expira después de aproximadamente una hora; al obtener el idioma de nuevo, se devuelve una nueva. - Devuelve 503 con un error JSON legible si el idioma aún no es
completedo no tiene una URL de salida. - Obtén la URL firmada en el lado del servidor y transmite el cuerpo de vuelta con el tipo de contenido original (predeterminado
audio/wav).
4. app/page.tsx
Grabadora de voz en el navegador y página de doblaje.
- Usa una lista de idiomas compacta y seleccionada en la página:
autopara la detección de la fuente más inglés, español, francés, alemán, italiano, portugués, japonés, coreano e hindi. - Graba desde el micrófono con
navigator.mediaDevices.getUserMedia({ audio: true })yMediaRecorder, usando un tipo mime compatible con el navegador (prefiereaudio/webm;codecs=opus, luegoaudio/webm, luegoaudio/mp4). - Después de detener, convierte el blob grabado a un WAV
Fileen el navegador antes de subirlo. No envíesaudio/webm;codecs=opussin procesar a/api/dubbing, porque la API de Doblaje rechaza ese tipo de contenido. - Muestra estados claros: inactivo, grabando, preparando, sondeando, listo y error. Mientras grabas, muestra el tiempo transcurrido y un indicador rojo pulsante.
- Después de grabar, muestra el reproductor de audio original más los selectores de idioma fuente y idioma objetivo. Evita elegir el mismo idioma fuente y objetivo explícito.
- Al hacer clic en Dub Recording,
POSTFormDatacon el archivo WAV convertido a/api/dubbingy guarda elprojectIddevuelto. - Sondea
/api/dubbing/${projectId}cada 5 segundos. Mientras sondeas, muestra "Transcribiendo tu grabación…" hasta queprojectStatusseaready, luego "Generando el audio doblado…". Detente con un error siprojectStatusolanguageStatusesfailed. - Cuando
languageStatusseacompleted, obtén/api/dubbing/${projectId}/audio/${languageId}, crea una URL de objeto y renderiza un reproductor<audio>doblado con controles más un enlace de descarga WAV. - Muestra errores en línea para la denegación del micrófono, fallos de carga y fallos de doblaje.
- Mantén la interfaz de usuario mínima y fácil de escanear.
Lección del curso «ElevenLabs Examples» de ElevenLabs, publicado con licencia MIT. Traducción y adaptación al español de IA con Clase. IA con Clase no está afiliado a ElevenLabs. Ver el original · Licencia
Esta lección es gratuita. El resto del curso se abre con la Membresía de IA con Clase, que incluye todos los cursos del catálogo. Ver precios