Voces
Las rutas de los scripts son relativas a este SKILL.md, y speak.py se ejecuta desde la carpeta de la película. Este paso es opcional: también funcionan grabaciones o audio de cualquier otra herramienta. Colócalos en audio/voice/<id de línea>.wav, o establece file en la línea.
Háblale a la persona en su propio idioma.
Configurar la clave (una vez)
Los costos corren por cuenta de la persona. Pídele que ejecute esto en su propia terminal:
python <carpeta-dula-start>/scripts/configure.py
En Claude Code, pueden escribir ! python <ruta>/configure.py.
Nunca pidas la clave en la conversación, y nunca leas ni imprimas ~/.dula-craft/config.env. Para comprobar si hay una configurada, usa configure.py --status. Si alguien pega una clave en la conversación, indícale que la revoque en la consola y cree una nueva.
Diseñar las voces
Agrega voices al nivel superior de config/film.json:
"voices": {
"mochi": {"desc": "Un niño de unos ocho años, vivaz y animado, ritmo rápido, respiración ligera"},
"gran": {"desc": "Una mujer de setenta, cálida y ligeramente ronca, lenta, dicción muy clara"}
}
Las líneas pueden tener un delivery:
{"id": "l03", "who": "mochi", "text": "¿De-de verdad?", "delivery": "Sorprendido y encantado, un temblor en la primera palabra, subiendo al final"}
Campos opcionales de voz: lang establece el idioma (por defecto, el idioma de la línea); speaker establece un ID de voz oficial de Volcano; reference apunta a audio de referencia que la persona tenga derechos de uso.
Escribe desc y delivery en inglés, o en el idioma de las líneas. Describe la voz en sí misma: edad, tensión, respiración, ritmo y peso. "Feliz" por sí solo no cambiará una voz. No escribas "suena como tal actor o personaje", ni elijas voces que imiten personajes conocidos o personas reales. Las voces también conllevan riesgos de parecido y derechos de autor.
Generar
python <carpeta de este>/scripts/speak.py --dry-run # Ver las indicaciones sin gastar nada
python <carpeta de este>/scripts/speak.py
La primera línea de cada personaje se convierte en la referencia de voz para sus líneas posteriores, por lo que escucha la primera línea primero. Si no es correcta, cambia desc y repítela. Después de cambiar una primera línea, usa --only para rehacer las líneas posteriores de ese personaje y que sigan la nueva voz.
Cuando cambias una línea o una voz y vuelves a ejecutarlo, solo se regenera lo que ha cambiado.
Ambiente y efectos de sonido
python <carpeta de este>/scripts/speak.py --sound "Una habitación vieja y tranquila, un pájaro a lo lejos de vez en cuando" --seconds 10 --out audio/sfx/habitacion.wav
Siempre indica --seconds. La facturación sigue la duración, y sin él un clip puede durar 30 segundos o más. Es aproximado, y las solicitudes muy cortas tienden a volverse más largas. Los clips generados suelen ser bajos, así que asigna un level_db a los sonidos de la historia en film.json (consulta la referencia de film.json).
Genera una cosa a la vez. No pidas una sola indicación para diálogos, efectos y música juntos, o no podrás ajustar los niveles por separado y las bocas estarán mal.
Verificar el resultado
- Escucha si puedes. Si no puedes, dile a la persona "este audio no ha sido verificado al oído".
- Cosas que puedes hacer tú mismo: comprobar que las duraciones tengan sentido (5 segundos para una línea corta es un problema). Si hay disponible una herramienta de transcripción como Whisper, compara su texto con el guion. Pueden faltar palabras muy bajas, lo que es señal de repetirlas.
deliveryes una solicitud, no un control exacto. Las pausas en particular no son fiables, así que acorta la línea o regenérala si el ritmo es incorrecto.- La misma indicación da un resultado diferente cada vez, así que regenera en caso de errores.
Problemas comunes
| Síntoma | Solución |
|---|---|
Clave rechazada, o Audio Generation 1.0 no está habilitado | Verifica que el servicio esté habilitado. La clave debe venir de la consola de voz, y las claves Ark no funcionan |
| Una palabra se lee mal | Regenera, o reformula la línea |
| Las líneas no suenan como una sola persona | Asegúrate de que la primera línea sea correcta, luego repite las posteriores con --only, o establece un speaker |
| El final de una línea se corta | Pide una delivery más lenta, o regenera |