¿Qué hace real-sound?
Eres el supervisor de sonido de una película que no puedes escuchar. La banda sonora se construye ÚNICAMENTE a partir de audio real, grabado o producido profesionalmente (una pista musical con licencia, foley y SFX reales, ambientes reales), colocados en los fotogramas clave de la imagen mediante un mezclador determinista, medidos en lugar de escuchados, analizados a través de cinco lentes, corregidos por un agente, masterizados, acreditados y multiplexados. El código selecciona, recorta, coloca, nivela, panea, ecualiza, ajusta el tono mediante remuestreo, estira el tiempo de la música y masteriza; el código nunca genera un sonido.
El estándar es un video promocional profesional: cada sonido causado por algo en pantalla, una paleta de materiales consistente, el clímax musical en la revelación del héroe, contención en el resto, un logotipo resuelto, una cola hacia el silencio. Reglas:
references/sound-design.md (y el repositorio earshot con docs/launch-video-sound.md para el perfil de referencia empaquetado: 7 videos promocionales profesionales).
<skill> a continuación es esta carpeta. Python: {{PY}} a continuación (y en cada plantilla de prompt) es UN intérprete que tiene numpy, scipy, soundfile y el paquete earshot: el venv del repositorio earshot
(<earshot repo>/.venv/Scripts/python.exe en Windows, <earshot repo>/.venv/bin/python en otros lugares), o cualquier Python donde <python> -c "import earshot" funcione. Un simple python en Windows suele ser el stub de Microsoft Store y falla. Sustituye la ruta completa por {{PY}} cuando ejecutes un comando o le pases un prompt a un sub-agente (los otros marcadores de posición se enumeran en references/process.md). Ejecuta los scripts con -I (aislado: los archivos descargados nunca pueden ocultar un módulo); todos los scripts, excepto scripts/licences.py (el módulo de política de licencias que importan audit.py y credits.py), imprimen --help.
El proceso
| paso | quién | salida | compuerta |
|---|---|---|---|
| 0. lista de cues | líder | out/cues.json | fotogramas de sincronización calculados a partir del código de la imagen |
| 1. brief | líder | audio/SOUND_BRIEF.md | cada cue tiene una necesidad de sonido (o "nada") |
| 2. obtención (por categoría, en paralelo) | agentes de obtención | audio/assets/<cat>/, manifiestos | cada archivo medido + realness de earshot "real o producido profesionalmente" en el recorte utilizado (un "incierto" solo con su evidencia y una re-verificación a nivel de recorte escrita en el manifiesto) |
| 3. auditoría de licencias | auditor | audit.json | audit.py exit 0 para lo que la película usa |
| 4. edición musical | supervisor musical | audio/design/music.json | rejilla verificada, clímax en la revelación, empalmes limpios |
| 5. fragmentos de diseño (por categoría, en paralelo) | diseñadores | audio/design/<cat>.json | renderizado en solitario + QA limpio |
| 6. integrar | líder | banda sonora, pistas, informe, traza | compuerta de masterización (±0.5 LU, <= -1.5 dBTP) |
| 7. QA + escucha | líder | out/qa/qa.json, timeline de earshot / hoja / crítica | sin fallo de QA |
| 8. crítica (5 lentes, en paralelo, solo lectura) | críticos | problemas clasificados + operaciones probadas | |
| 9. corregir | UN corrector | el diseño | QA: sin regresión |
| 10. masterizar, acreditar, multiplexar | líder | CREDITS.md, texto de descripción, la película | créditos exit 0, retardo 0 |
El detalle de cada paso, los roles y lo que mide cada crítico: references/process.md. Cada prompt de sub-agente es un brief listo para rellenar en templates/prompts/.
0. Lista de cues a partir de la imagen
Cada sonido se sitúa en un fotograma que el código de la imagen calcula: un fotograma de contacto, el 50 % de una aparición, el pico de velocidad de un movimiento, el golpe de un riser, el fotograma en que la marca se hace legible. Las películas cinéticas ya tienen out/cues.json (export-cues.ts); para cualquier otro, escribe el mismo formato (templates/cues.json) a partir de las constantes de la línea de tiempo. Los ids estables (act:thing:n) permiten que las reglas coincidan con clases de acción mediante una expresión regular.
1. Brief
Copia templates/SOUND_BRIEF.md a audio/SOUND_BRIEF.md: concepto (paleta, arco musical, lugares), el mapa de la imagen (cada cue: qué hay en pantalla, la necesidad de sonido), zonas de ambiente, licencias permitidas, nivel de calidad, diseño de archivos. Es el contrato que cada sub-agente recibe textualmente. Elige la fila de personalidad de la marca (references/sound-design.md §3).
2. Obtención, por categoría (templates/prompts/sourcing.md)
Categorías típicas de un video promocional: ui (clics, toques, conmutadores, pops), keyboard (teclado), motion (whooshes, risers), impacts (golpes de revelación, el logotipo), ambience (ambiente), music (música); una película de personajes añade foley (foley), sus mundos, sus objetos. Freesound (CC0 / CC BY; vista previa HQ cdn.freesound.org/previews/<id//1000>/<id>_<user>-hq.ogg), Mixkit (WAV assets.mixkit.co/active_storage/sfx/<id>/<id>.wav), bibliotecas de compositores para música; las licencias se leen en la página de cada elemento (references/licences.md); descargas secuenciales corteses; cada archivo medido:
{{PY}} -I <skill>/scripts/analyze.py audio/assets/ui/* --png out/audio-review/ui --out out/audio-review/ui.json
{{PY}} -m earshot realness audio/assets/ui/ # compuerta: "real o producido profesionalmente" (re-verificar recortes: --start --end)
{{PY}} -m earshot rank "un solo clic de trackpad nítido" audio/assets/ui/ --top 5
{{PY}} -m earshot match <file> "un pop de corcho suave" --alts "un disparo" "una explosión de globo"
{{PY}} -m earshot find <long take> "una sola pulsación de tecla mecánica" --top 8 # recortes; saltar los marcados como corte de cabeza / corte de cola
3. Auditoría de licencias (templates/prompts/licence_audit.md)
El auditor registra lo que dice cada página (licence_seen, licence_confirmed) en audio/assets/manifests/audit.json; el script verifica el resto (clasificación, ids vs URLs, archivos decodificables, duraciones, líneas de crédito):
{{PY}} -I <skill>/scripts/audit.py --root . --report out/qa/mix_report.json [--fetch]
Permitidas: CC0, dominio público, CC BY 2.0-4.0, licencias gratuitas de Mixkit, Pixabay. Prohibidas: NC, ND, SA, Sampling+, personal, personalizada, en disputa. No verificada = bloqueada.
4. Música (templates/prompts/music_supervisor.md)
Una pista con licencia cuya estructura encaje con la película. Escribe el arco por compás de la película (templates/arc.json), luego:
{{PY}} -I <skill>/scripts/arrange.py audio/assets/music/<track> --film-bpm 120 --arc audio/arc.json --out out/audio-review/music/arrange.json
Ajusta el tempo, mueve la rejilla sobre los ataques medidos (los seguidores de tiempo tienen un retardo de 20-50 ms), propone la fase del tiempo fuerte, ancla el clímax del compás en el candidato a clímax más fuerte y redacta segmentos en las líneas de compás (un bloque music listo para pegar). El tiempo fuerte es el punto débil: cuando imprime confianza BAJA (en una de las dos pistas en las que se probó, se desvió medio compás), decide entre las dos rejillas impresas a partir de la primera nota, las entradas de sección y los cambios de acorde en la tabla de compases, y vuelve a ejecutar con --phase N. Luego edita según el criterio: la armonía continúa a través de cada empalme, el tiempo fuerte del clímax en el fotograma del héroe, el acorde final en el logotipo, tail_fade hacia el final.
5. Fragmentos de diseño, por categoría (templates/prompts/designer.md)
audio/design/<category>.json con muestras (recortes), cortes (cortar una toma de muchos golpes en golpes individuales), grupos, reglas sobre eventos de cue, colocaciones libres, camas de ambiente, el bloque de música. Referencia con cada clave y ejemplos reales: references/design-format.md; un ejemplo completo de video promocional: templates/design_fragment.json (sus nombres de archivo son marcadores de posición como mk-0000_mouse-click.wav: se renderiza una vez que cada uno se reemplaza por una grabación real de tus manifiestos; mix.py se detiene y lista los archivos faltantes hasta entonces). Verificar solo:
{{PY}} -I <skill>/scripts/mix.py --only ui --dump out/audio-review/ui/dump # cada recorte como WAV + números
{{PY}} -I <skill>/scripts/mix.py --only ui --trace out/audio-review/ui/adds.json --out out/audio-review/ui/solo.wav
{{PY}} -I <skill>/scripts/qa.py --only ui --report out/audio-review/ui/solo_report.json --stems out/audio-review/ui/solo_stems --trace out/audio-review/ui/adds.json --out out/audio-review/ui/qa.json
{{PY}} -m earshot timeline out/audio-review/ui/solo.wav --cues out/cues.json
6-7. Integrar, QA, escuchar
{{PY}} -I <skill>/scripts/mix.py --root . --design audio/sounddesign.json --cues out/cues.json --trace out/qa/adds.json
{{PY}} -I <skill>/scripts/qa.py --layers # clics, bordes, audibilidad, aspereza, sonoridad, cobertura, sincronía, densidad
{{PY}} -I <skill>/scripts/qa.py --listen --realness --video out/film.mp4 # + timeline de earshot, hoja, crítica, realness
{{PY}} -m earshot critique out/audio/soundtrack.wav --video out/film.mp4 # tarjeta de puntuación vs videos promocionales profesionales
{{PY}} -m earshot sheet out/audio/soundtrack.wav -o out/qa/sheet.png --video out/film.mp4 --cues out/qa/cues_sounded.json
qa.py vincula cada hallazgo a la regla y la muestra que lo causaron (la traza). Es utilizable sin los modelos; --listen añade la transcripción de earshot (out/qa/qa_timeline.txt), hoja anotada y tarjeta de puntuación.
8-9. Crítica y corrección
Cinco críticos de solo lectura en paralelo, cada uno con su prompt: critic_sync.md, critic_edges.md, critic_masking.md, critic_tonal.md, critic_director.md. Cada uno prueba sus correcciones como una variante en su propia carpeta:
{{PY}} -I <skill>/scripts/variant.py --ops out/audio-review/critic_tonal/ops_v1.json --out out/audio-review/critic_tonal/v1 --render --qa
y devuelve problemas clasificados con operaciones exactas y números antes -> después. Luego UN corrector (fixer.md) fusiona las operaciones, resuelve conflictos, verifica la variante fusionada contra el qa.json anterior y la aplica (variant.py --apply, originales respaldados). Reconoce las excepciones deliberadas confirmadas con "qa_ok": "<razón>". Al menos una ronda; una segunda cuando los niveles o la edición musical cambiaron.
10. Masterizar, acreditar, multiplexar
mix.py masteriza con master.py (-14 LUFS, limitador de pico verdadero, techo 0.77 lineal; compuerta ±0.5 LU y <= -1.5 dBTP).
{{PY}} -I <skill>/scripts/audit.py --root . --report out/qa/mix_report.json # exit 0
{{PY}} -I <skill>/scripts/credits.py --root . --design audio/sounddesign.json --audit audio/assets/manifests/audit.json
node <skill>/scripts/mux.mjs --video out/film.mp4 --audio out/audio/soundtrack.wav --out out/film_sound.mp4
{{PY}} -m earshot timeline out/film_sound.mp4 --cues out/qa/cues_sounded.json # el archivo terminado, escuchado
CREDITS.md + out/CREDITS_description.txt (pegar en la descripción del video: los créditos CC BY son obligatorios allí). mux.mjs copia en flujo la imagen y corta el audio AAC a la duración de la imagen.
Videos promocionales: el mapa de sonido
| imagen | sonido | se sitúa en |
|---|---|---|
| cursor se mueve, sobrevuela, desplaza, progreso, texto en flujo | nada (la música lo lleva) | |
| clic / toque | UNA voz de clic real para la película, pulsación + liberación ~85 ms después, mismo nivel cada vez | el fotograma de pulsación |
| escritura | un teclado real, cortado; <= ~12 teclas/s, una por palabra por encima de ~25 caracteres/s; la música baja 6-10 dB | cada carácter sonado |
| aparece una tarjeta / chip / insignia | un pop o tic real suave, que asciende a lo largo de una secuencia | 50 % de su recorrido |
| conmutador, bloqueo, valor final de un contador | un pestillo / clic / tic nítido real | el fotograma de contacto / bloqueo |
| movimiento de cámara a escala, latigazo, zoom (~2 por película) | un swish real, ápice en el pico de velocidad | pico de velocidad |
| cortes duros | nada | |
| tensión hacia la revelación | la construcción de la música, o un riser real que termina 30-250 ms antes del golpe | el golpe |
| revelación del héroe | el CLÍMAX de la música (edita la pista para que su tiempo fuerte aterrice aquí) + opcionalmente un impacto real | el fotograma |
| logotipo / bloqueo | la música se detiene en una línea de compás o se filtra, 0.2-0.7 s de casi silencio, UNA nota suave en clave, cola al silencio | el fotograma en que se lee la marca |
Niveles: -14 LUFS, pico verdadero <= -1 dBTP después de AAC, LRA 5-9 LU, el momento más fuerte en el clímax (30-60 % de entrada), el logotipo 8-20 dB por debajo, aproximadamente 5 efectos diseñados por cada 10 s, efectos secos y centrados. Normas medidas y las pistas baratas: references/sound-design.md.
Herramientas
| necesidad | herramienta |
|---|---|
| medir grabaciones (formato, piso, ancho de banda, ataques, picos, tempo / tonalidad) + PNGs de espectrograma | scripts/analyze.py |
| escuchar grabaciones: real vs sintetizado, cómo suena, mejor coincidencia, mejor toma dentro de un archivo largo | {{PY}} -m earshot realness / describe / match / rank / find / compare / ab |
niveles / brillo / ataques de un archivo o un tramo del mismo (--start --end) | {{PY}} -m earshot measure (Python: from earshot import api; api.measure(...), igualmente api.find, api.realness ...) |
| auditoría de licencias + archivos | scripts/audit.py (política en scripts/licences.py) |
| rejilla musical, tiempos fuertes, borrador de edición en líneas de compás | scripts/arrange.py |
renderizar el diseño (+ solo --only, --dump recortes, --trace para QA) | scripts/mix.py |
| masterización y medición de sonoridad | scripts/master.py (--measure) |
| QA objetivo vinculado a las colocaciones | scripts/qa.py (--layers, --listen, --realness) |
| variantes de críticos, la aplicación del corrector | scripts/variant.py |
| créditos para CREDITS.md y la descripción del video | scripts/credits.py |
| poner la banda sonora en la imagen | scripts/mux.mjs |
| escuchar una mezcla / película completa; imagen anotada; tarjeta de puntuación de video promocional | {{PY}} -m earshot timeline / sheet / critique |
Archivos
audio/SOUND_BRIEF.md el contrato (templates/SOUND_BRIEF.md)
audio/assets/<category>/ grabaciones descargadas (<source>-<id>_<slug>.<ext>; nunca confirmar ni publicar)
audio/assets/manifests/<cat>.json una entrada por grabación (templates/manifest_entry.json)
audio/assets/manifests/audit.json auditoría de licencias (templates/audit_entry.json)
audio/sounddesign.json nivel superior: incluye, buses, master (templates/sounddesign.json)
audio/design/<category>.json un fragmento por diseñador (templates/design_fragment.json)
out/cues.json los eventos de cue de la imagen (templates/cues.json)
out/audio/soundtrack.wav, stems/ el master y sus pistas
out/qa/ mix_report.json, adds.json, cues_sounded.json, master.json, qa.json
out/audio-review/ trabajo por categoría y por crítico, variantes, volcados (la pista de auditoría)
CREDITS.md, out/CREDITS_description.txt
Referencias
references/process.md: roles, pasos, lo que mide cada crítico, umbrales y su origen
…
[truncado para la traducción]