Communitygithub.com

hyperframes-audio

Úsalo cuando el audio ya colocado en una composición de HyperFrames necesite mezclarse: fundidos de entrada/salida, crossfades, ganancia o volumen de pista, automatización de volumen, ducking, una base musical que compite con una locución (tallado de locución), efectos en una pista (EQ, compresor, limitador, puerta, saturación, delay, reverb, chorus, phaser, bitcrush), envolventes de automatización dibujadas en el volumen de una pista o en cualquier parámetro de efecto, o un bus de submezcla que transporta una cadena, un fader y un reloj de automatización para varias pistas a la vez (`<hf-audio-group>`). No lo uses para obtener o generar audio (encontrar BGM, SFX o hacer una locución es `/media-use`). No lo uses para sincronización de clips o diseño de pistas, que es `/hyperframes-core`.

¿Qué es hyperframes-audio?

HyperFrames Audio es una habilidad especializada para mezclar audio dentro del framework HyperFrames, enfocándose en establecer relaciones entre pistas en lugar de apilar procesadores. Proporciona un conjunto completo de herramientas para dar forma al sonido, incluyendo efectos como EQ, compresor y reverberación, automatización de volumen y parámetros, ducking y tallado de locución para bases musicales que compiten con voces. La habilidad opera a través de tres atributos clave (`data-fx-chain`, `data-automation`, `data-fx-carve`) que se aplican directamente a los elementos de audio o a los buses `hf-audio-group`. Una característica central es que la vista previa y la renderización utilizan la misma implementación del grafo de audio, asegurando que lo que se escucha durante la edición coincida exactamente con el resultado final. El tallado de locución es una relación avanzada que analiza las bandas de frecuencia de una locución y las sustrae dinámicamente de una pista de música, preservando la integridad musical mientras se mantiene la inteligibilidad vocal. La habilidad también incluye guías de diagnóstico detalladas y ajustes preestablecidos para síntomas de audio comunes, desde retumbar y apagado hasta dureza y lucha entre voz y música.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/maddysjarvisv1/claude-code-video-skills/tree/main/skills/hyperframes-audio

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Instalación de complementos: Antes de ejecutar los comandos de configuración o actualización, sigue las reglas de ejecución de complementos cuando esta habilidad esté dentro de un complemento de HyperFrames. Las instalaciones independientes conservan las instrucciones de actualización a continuación.

HyperFrames Audio

Una mezcla es un conjunto de relaciones, no una pila de procesadores. Dos pistas que suenan bien por separado pueden ser insoportables juntas, y la solución casi nunca es "bajar una" — se trata de encontrar por qué están peleando y dárselo a quien lo necesita. Cada herramienta aquí existe para expresar una de esas relaciones.

Los efectos viven en el elemento como data-fx-chain, y la vista previa y la renderización ejecutan el mismo grafo de audio Web Audio — el estudio en un contexto en vivo, el motor en uno fuera de línea dentro del navegador que ya maneja. Hay una sola implementación de cada efecto, por lo que lo que escuchas mientras desplazas es lo que se escribe. Nunca ajustas dos veces.

El tiempo de los clips sigue siendo /hyperframes-core: los recortes de audio/vídeo y los rangos de origen usan data-start, data-duration y data-media-start, y los crossfades superponen clips en diferentes pistas. Esta habilidad gestiona los fundidos de entrada/salida de pistas colocadas, las envolventes de crossfade, la ganancia/volumen de pista, la automatización de volumen y efectos, el ducking/tallado de locución y la cadena de efectos. /media-use gestiona la obtención, generación y preprocesamiento de fuentes.

La constante data-playback-rate (0.1..10) es segura para renderización de imagen y sonido con conservación de tono cuando los elementos de audio/vídeo coincidentes usan la misma sincronización, desplazamiento de origen y velocidad. Una rampa de velocidad es un carril rate en data-automation (ver docs/reference/speed-ramps); prevalece sobre la constante y mantiene el tono en la vista previa y la renderización. HyperFrames no proporciona sincronización automática de formas de onda ni corrección de deriva. Para recetas reutilizables de corte/crossfade/reajuste de tiempo, usa /hyperframes-core → references/creator-editing-recipes.md.

Tres atributos lo llevan todo, en el propio elemento de audio/vídeo — o, para los dos primeros, en un bus <hf-audio-group> (ver "Un bus para muchas pistas"):

AtributoAlmacena
data-fx-chainlos efectos, en orden de señal
data-automationenvolventes en el volumen de esta pista o en sus parámetros de efecto
data-fx-carvela configuración del tallado en sí, para que pueda ser re-derivado

Las familias de efectos incluidas son ganancia, EQ (paso alto, paso bajo, pico, estantería), compresor, limitador, puerta, saturar, delay, reverb, chorus, phaser y bitcrush.

JSON exacto para cada uno, y las reglas que debe cumplir un carril: references/attributes.md. Cada efecto con sus parámetros, rangos y unidades: references/fx-registry.md. Cómo determinar qué está mal en un archivo que no puedes escuchar: references/diagnosis.md. Ajustes preestablecidos, trabajos nombrados y perfiles de un solo mando, además de una tabla de síntoma a solución: references/presets.md — léelo antes de construir una cadena manualmente, porque uno de los ajustes preestablecidos o trabajos nombrados suele nombrar el problema.

Cómo encaja

Dos superficies de autoría escriben esos atributos; dos tiempos de ejecución los leen a través de los mismos constructores. Eso medio compartido es por lo que la vista previa predice la renderización.

flowchart TB
  voice["pista de voz<br/>archivo de medios"]
  bed["base musical<br/>archivo de medios"]

  subgraph AUTOR["Autoría — las únicas cosas que escriben atributos"]
    panel["Studio<br/>Control de tallado de locución"]
    script["scripts/carve.mjs<br/>detecta el par"]
    analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
    panel --> analysis
    script --> analysis
  end

  voice --> analysis
  bed --> analysis

  subgraph ATTRS["Escritos en el elemento de la base musical"]
    carveAttr["data-fx-carve<br/>fuentes · intensidad"]
    chainAttr["data-fx-chain<br/>pico xN + ganancia, etiquetado fromCarve"]
    autoAttr["data-automation<br/>un carril por parámetro tallado"]
  end

  analysis --> carveAttr
  analysis --> chainAttr
  analysis --> autoAttr

  subgraph COMPARTIDO["Una implementación, leída por ambos"]
    build["audioFxGraph.ts · buildFxChain"]
    sched["audioFxAutomation.ts · scheduleChainAutomation"]
  end

  chainAttr --> build
  autoAttr --> sched

  build --> previz["Vista previa<br/>AudioContext en vivo<br/>attachElementFxChain"]
  sched --> previz
  build --> render["Renderización<br/>OfflineAudioContext en el navegador sin cabeza<br/>applyAudioFxChain"]
  sched --> render

  previz --> oido["lo que escuchas al desplazar"]
  render --> wav["WAV procesado<br/>+ chainTailSeconds para que la mezcla deje pasar la cola"]
  wav --> mezcla["motor · audioMixer<br/>el carril de volumen horneado en el PCM aquí, no en el grafo"]
  mezcla --> salida["la mezcla renderizada"]

  edit["editar el atributo durante la reproducción"] -.->|MutationObserver| previz

La configuración del tallado en sí nunca se lee durante la reproducción — la cadena y los carriles que produjo son lo que suena. data-fx-carve existe para que la intensidad se pueda cambiar en un tallado existente en lugar de adivinarse a partir de los filtros.

Dentro de una base musical tallada, la señal pasa primero por las muescas, luego por la igualación de nivel, luego por cualquier cosa que hayas construido tú mismo — por lo que un limitador que agregues aún actúa como el último techo:

flowchart LR
  src["base musical decodificada"] --> p1["pico<br/>400 Hz"]
  p1 --> p2["pico<br/>1 kHz"]
  p2 --> p3["pico<br/>1.6 kHz"]
  p3 --> g["ganancia<br/>igualación de nivel"]
  g --> mano["tus propios efectos<br/>p. ej. limitador"]
  mano --> dest["ganancia de pista, luego salida"]

  l1["carril fx.n1.gain"] -.->|"envolvente del nivel<br/>de la voz en esa banda"| p1
  l4["carril fx.n4.gain"] -.->|"cuánto<br/>enmascara la base musical en general"| g

Primero, determina qué está mal

La tabla a continuación comienza con "suena retumbante" — lo que presupone que alguien ya escuchó y lo dijo. Si te dan un archivo y "arréglalo", no tienes esa frase y no puedes escuchar, por lo que debes medir. Una regla gobierna todo:

El espectro absoluto de una sola voz desconocida no se puede diagnosticar. Los formantes son ±10 dB, los fundamentales van de 85 a 255 Hz, y las oraciones decaen 5–6 dB al final. Cada uno de esos se lee como un defecto por sí mismo, y cada uno de ellos es el hablante.

Por lo tanto, compara, y compara contra algo dentro del mismo archivo: el original limpio si existe, de lo contrario las pausas — lo que sea audible en un silencio es aditivo, y el espectro del silencio es el canal en lugar de la voz. Comparar contra un espectro promedio publicado o una voz de control sintetizada no funciona: dos hablantes difieren más que la mayoría de los defectos, y ambas respuestas incorrectas en la evaluación detrás de esta guía provinieron exactamente de eso.

Cuando no hay original ni silencio utilizable, un defecto tonal estático está genuinamente subdeterminado. Dilo y ofrece las lecturas que encajan, en lugar de elegir una y construir una cadena sobre ella.

Comandos, trampas y recetas prácticas: references/diagnosis.md. Léelo antes de diagnosticar un archivo que nadie ha descrito.

Comienza por el síntoma

Una vez que conoces la banda y el tipo, nombra qué está mal con el audio. La mayoría del audio deficiente es uno o dos de estos, y cada uno tiene una respuesta incluida:

Suena comoRecurre a
Zumbido o golpeteo debajorumble-cut, o un highpass a 80 Hz
Retumbante, pectoralDomar retumbo trabajo (200 Hz)
Apagado, detrás de cartónReducir barro trabajo (250 Hz)
Palabras difíciles de distinguirAñadir claridad trabajo (3 kHz), o talla la base musical
Áspero y cansinoSuavizar aspereza trabajo (3.2 kHz)
Algunas palabras mucho más fuertesUniformidad en un compresor, o Igualar niveles
Sonido de ambiente entre frasesroom-gate
Voz y música compitiendoTallado de locución — no un EQ en ninguna
Seco, grabado en ninguna parteroom-tight o room-natural
Simplemente "amateur"voice-clean, que son cuatro de los anteriores en orden

Catálogo completo, qué contiene cada ajuste preestablecido, el vocabulario de bandas y qué está DELIBERADAMENTE NO CUBIERTO (de-essing, eliminación de ruido, coincidencia de tono): references/presets.md.

Resta antes de sumar, nivela después de filtrar, relaciones después del nivel, carácter y techo al final. Cada paso cambia lo que el siguiente escucha — un compresor ajustado antes de un paso alto pasa su tiempo persiguiendo el retumbo.

Recurre a una familia por el problema, no por el nombre

Filtros (highpass, lowpass, peaking, lowshelf, highshelf) deciden qué frecuencias se le permite ocupar a una pista. Esta es la primera herramienta para dos fuentes que chocan, porque las colisiones ocurren en bandas: una base musical y una voz quieren ambos 1–3 kHz, y quitarle eso a la base musical le cuesta mucho menos que bajar todo a la mezcla. Un paso alto en una voz es la solución estándar para el retumbo; un paso bajo oscurece o amortigua deliberadamente.

Dinámicas (gain, compressor, limiter, gate) deciden cómo se comporta el nivel de una pista en el tiempo. La compresión reduce la distancia entre lo fuerte y lo suave para que las partes suaves puedan subir. Un limitador es un techo — no da forma a nada, garantiza que nada pase. Una puerta elimina lo que está por debajo de un umbral, que es cómo silencias el sonido de ambiente entre frases. gain es una etapa de nivel simple, y es lo que monta un carril de automatización cuando una pista tiene que apartarse.

No lineales (saturate, bitcrush) cambian la forma de la onda, lo que añade armónicos que no estaban allí. Recurre a ello cuando una pista necesita carácter o grano en lugar de corrección — y recuerda que es generativo: hace que una fuente delgada sea más densa, no más limpia.

Temporales (delay, reverb, chorus, phaser) ponen una pista en un espacio o le dan anchura. Estos son los que más fácilmente arruinan una mezcla, porque una cola o una copia desafinada ocupa el mismo espacio que necesita una voz. Úsalos en lo que debería estar detrás de otra cosa, y mantén la cantidad de efecto húmedo más baja de lo que suena bien de forma aislada.

La cadena es en serie: cada efecto procesa lo que produjo el anterior. Por lo tanto, el filtrado correctivo va temprano, el carácter en el medio y un limitador al final donde pueda actuar realmente como techo.

Tallado de locución

El problema que resuelve. Una base musical debajo de una voz dificulta seguir la voz. El reflejo es enmascarar toda la base musical, lo que funciona pero le cuesta a la base musical toda su presencia — la música se vuelve débil durante toda la locución. Pero la voz no necesita todo el espectro. Necesita las pocas bandas que realmente ocupa. El tallado toma solo esas, y la base musical conserva sus graves y agudos, por lo que sigue siendo música mientras la voz sigue siendo inteligible.

Es una relación, no un efecto. La configuración vive en la base musical — la pista que se procesa — y nombra las voces a las que escuchar, exactamente como lo hace un compresor de sidechain: seleccionas la pista que se vuelve más silenciosa y eliges qué la vuelve más silenciosa. Nunca pongas un tallado en una pista de voz. Una voz tallada contra sí misma es un error, no una elección sutil de mezcla.

Cada voz, no solo una de ellas. sources es una lista, porque una base musical suele ir debajo de una secuencia completa — un narrador, una respuesta de entrevista, un segundo presentador. Se suman en el propio reloj de la base musical antes de medir cualquier cosa (mixCarveSources), por lo que un análisis las cubre todas: las bandas provienen de todo el discurso que hay, y las envolventes se elevan dondequiera que algo esté sucediendo. Las voces que nunca suenan mientras la base musical está activa se dejan fuera; no pueden enmascararla.

Un tallado contra más de un id de clip está mal. Agrupa los clips y talla contra el grupo. Esto es un invariante, no un consejo. Nombrar clips uno por uno debe ser exhaustivamente correcto y se mantiene correcto solo hasta la siguiente edición — un cuarto clip de narración agregado más tarde suena fuera del alcance del tallado, y la base musical no se enmascara silenciosamente debajo de él. Nombrar el grupo en su lugar resuelve la pertenencia en el momento del análisis, por lo que un clip agregado al grupo más tarde está cubierto sin tocar sources en absoluto:

<!-- agrupa la narración, luego talla la base musical contra el grupo -->
<audio id="vo-intro" data-audio-group="locucion" …></audio>
<audio id="vo-middle" data-audio-group="locucion" …></audio>
<audio id="vo-outro" data-audio-group="locucion" …></audio>

<audio id="musica" data-fx-carve='{"enabled":true,"sources":["locucion"],"strength":0.8}' …></audio>

Una lista sources que nombra dos o más id de clip simples en lugar de un grupo es detectada por la regla de lint audio_carve_ungrouped_sources — todavía funciona, pero es la versión que se pudre silenciosamente cuando se agrega un clip.

Mantén el grupo de tallado como un grupo de voces: sin base musical, sin SFX, sin música. Un id de grupo en sources se resuelve a cada miembro actual en cada análisis, por lo que el grupo que nombras es el grupo que obtienes después — no las pistas que se midieron cuando se escribió. Dos formas en que esto muerde:

  • La base musical en su propio grupo fuente. Se entrega a sí misma como una voz y se talla contra su propio contenido — la regla "nunca talles una pista contra sí misma" llega un re-análisis después.
  • Un clip de SFX o música en el grupo de voz. Entra en la cadena lateral en el siguiente análisis y la base musical comienza a enmascararse bajo un "whoosh", aunque la ejecución que escribió el atributo nunca lo midió.

Ambos son invisibles en el momento en que se escribe el tallado: el análisis suma las voces que detectó y nunca recorre la resolución de grupos, por lo que la primera pasada es genuinamente correcta y solo la siguiente es incorrecta. Por lo tanto, asigna a cada rol su propio grupo — musica para la base musical, locucion para la narración, sfx para los golpes — y mantén el grupo nombrado en sources que contiene solo voces.

carve.mjs se niega a escribir la forma de grupo cuando ve cualquiera de los dos casos, registra los id de clip y dice en stderr qué miembro lo bloqueó. La regla audio_carve_ungrouped_sources luego apunta al arreglo...

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills relacionados