Instalación del plugin: Antes de los comandos de configuración o frescura, sigue las reglas de ejecución del plugin cuando este skill esté dentro de un plugin de HyperFrames. Las instalaciones independientes mantienen 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 inaudibles juntas, y la solución casi nunca es "bajar una" — se trata de encontrar por qué están compitiendo y asignarlo 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 previsualización y el renderizado ejecutan el mismo gráfico de Web Audio — el estudio en un contexto en vivo, el motor en uno offline dentro del navegador que ya maneja. Hay una única implementación de cada efecto, por lo que lo que escuchas al desplazarte es lo que se escribe. Nunca ajustas dos veces.
El tiempo de los clips sigue siendo /hyperframes-core: los recortes de audio/video y los rangos de origen usan data-start, data-duration y data-media-start, y los crossfades superponen clips en diferentes pistas. Este skill posee el fundido de entrada/salida de pistas colocadas, envolventes de crossfade, ganancia/volumen de pista, automatización de volumen y efectos, ducking/voiceover carve y la cadena de efectos. /media-use posee la búsqueda, generación y preprocesamiento.
La constante data-playback-rate (0.1..10) es segura para renderizado de imagen y sonido con preservación de tono cuando los elementos de audio/video coincidentes usan el mismo tiempo, 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 previsualización y el renderizado. HyperFrames no proporciona sincronización automática de formas de onda ni corrección de deriva.
Para recetas de corte/crossfade/re-tiempo copiables, usa /hyperframes-core → references/creator-editing-recipes.md.
Tres atributos lo llevan todo, en el propio elemento de audio/video — o, para los dos primeros, en un bus <hf-audio-group> (ver "Un bus para muchas pistas"):
| Atributo | Contiene |
|---|---|
data-fx-chain | los efectos, en orden de señal |
data-automation | envolventes en el volumen de esta pista o sus parámetros de efecto |
data-fx-carve | la configuración del carve para que pueda ser re-derivado |
Las familias de efectos incluidas son ganancia, EQ (highpass, lowpass, peaking, shelves), compresor, limitador, puerta, saturación, delay, reverberación, coro, 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.
Presets, trabajos con nombre 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 presets o trabajos con nombre 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. E ese punto intermedio compartido es la razón por la que la previsualización predice el renderizado.
flowchart TB
voice["pista de voz<br/>archivo de audio"]
bed["pista de música de fondo<br/>archivo de audio"]
subgraph AUTORIA["Autoría — las únicas cosas que escriben atributos"]
panel["Estudio<br/>Control de voiceover carve"]
script["scripts/carve.mjs<br/>detecta el par, dinámico por defecto"]
analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
panel --> analysis
script --> analysis
end
voice --> analysis
bed --> analysis
subgraph ATTRS["Escrito en el elemento de la música de fondo"]
carveAttr["data-fx-carve<br/>origen · fuerza · dinámica"]
chainAttr["data-fx-chain<br/>peaking 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 --> previsualizacion["Previsualización<br/>AudioContext en vivo<br/>attachElementFxChain"]
sched --> previsualizacion
build --> renderizado["Renderizado<br/>OfflineAudioContext en el navegador sin cabeza<br/>applyAudioFxChain"]
sched --> renderizado
previsualizacion --> escuchado["lo que escuchas al desplazarte"]
renderizado --> wav["WAV procesado<br/>+ chainTailSeconds para que la mezcla deje pasar la cola"]
wav --> mezcla["motor · audioMixer<br/>el carril de volumen se hornea en el PCM aquí, no en el gráfico"]
mezcla --> salida["la mezcla renderizada"]
editar["editar el atributo durante la reproducción"] -.->|MutationObserver| previsualizacion
La configuración propia del carve nunca se lee durante la reproducción — la cadena y los carriles que produjo son lo que se reproduce. data-fx-carve existe para que se pueda cambiar la fuerza en un carve existente en lugar de tener que adivinarla a partir de los filtros.
Dentro de una pista de fondo tallada, la señal pasa primero por las atenuaciones, luego por la coincidencia de nivel, y luego por lo que hayas construido tú mismo — por eso un limitador que añadas sigue actuando como el último techo:
flowchart LR
src["pista de fondo decodificada"] --> p1["peaking<br/>400 Hz"]
p1 --> p2["peaking<br/>1 kHz"]
p2 --> p3["peaking<br/>1.6 kHz"]
p3 --> g["ganancia<br/>coincidencia de nivel"]
g --> mano["tus propios efectos<br/>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 se<br/>atenúa la pista de fondo en general"| g
Un carve estático es el mismo gráfico con valores fijos y sin carriles.
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 la instrucción "arréglalo", no tienes esa frase y no puedes escuchar, por lo que tienes que medir. Una regla lo gobierna todo:
El espectro absoluto de una sola voz desconocida no se puede diagnosticar. Los formantes son de ±10 dB, los fundamentales van de 85 a 255 Hz, y las oraciones bajan de 5 a 6 dB al final. Cada uno de esos se lee como un defecto por sí solo, y cada uno de ellos es el hablante.
Por lo tanto, compara, y compara con 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 indeterminado. Dilo y ofrece las lecturas que encajen, 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.
Empieza por el síntoma
Una vez que conozcas la banda y el tipo, nombra lo que 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 a | Recurre a |
|---|---|
| Zumbido o golpeteo debajo | rumble-cut, o un highpass a 80 Hz |
| Retumbante, pectoral | Tame Boominess trabajo (200 Hz) |
| Apagado, detrás de cartón | Reduce Mud trabajo (250 Hz) |
| Palabras difíciles de entender | Add Clarity trabajo (3 kHz), o talla la pista de fondo |
| Áspero y cansino | Soften Harshness trabajo (3.2 kHz) |
| Algunas palabras mucho más fuertes que otras | Evenness en un compresor, o Even Out Levels |
| Ruido de sala entre frases | room-gate |
| Voz y música compitiendo | Voiceover carve — no un EQ en ninguno |
| Seco, grabado en ninguna parte | room-tight o room-natural |
| Simplemente "amateur" | voice-clean, que es cuatro de los anteriores en orden |
Catálogo completo, qué contiene cada preset, el vocabulario de bandas y lo que deliberadamente NO está 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 configurado antes de un high-pass 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 puede ocupar una pista. Esta es la primera herramienta para dos fuentes que chocan, porque las colisiones ocurren en bandas: una pista de fondo y una voz quieren ambas 1–3 kHz, y quitar eso de la pista de fondo le cuesta mucho menos que bajar todo el volumen le cuesta a la mezcla. Un high-pass en una voz es la solución estándar para el retumbo; un low-pass oscurece o apaga deliberadamente.
Dinámicos (gain, compressor, limiter, gate) deciden cómo se comporta el nivel de una pista a lo largo del 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 lo supere. Una puerta elimina lo que está por debajo de un umbral, así es como se silencia el ruido de sala entre frases. gain es una etapa de nivel simple, y es lo que monta un carril de automatización cuando una pista tiene que hacerse a un lado.
No lineales (saturate, bitcrush) cambian la forma de la forma de onda, lo que añade armónicos que no estaban allí. Recurre a ellos cuando una pista necesita carácter o granulosidad en lugar de corrección — y recuerda que es generativo: hace que una fuente delgada sea más densa, no más limpia.
Tiempo (delay, reverb, chorus, phaser) coloca una pista en un espacio o le da 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 la cosa que debe estar detrás de otra, y mantén la cantidad de efecto más baja de lo que suena bien en aislamiento.
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 medio, y un limitador al final, donde puede actuar realmente como un techo.
Voiceover carve
El problema que resuelve. Una pista de música de fondo debajo de una voz dificulta seguir la voz. El reflejo es atenuar toda la pista de fondo, lo que funciona pero le cuesta a la pista de fondo 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 carve toma solo esas, y la pista de fondo conserva sus graves y sus 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 pista de fondo — 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 carve en una pista de voz. Una voz tallada contra sí misma es un error, no una elección sutil de mezcla.
Cada voz, no una de ellas. sources es una lista, porque una pista de fondo suele ir debajo de una secuencia completa — un narrador, una respuesta de entrevista, un segundo presentador. Se suman en el propio reloj de la pista de fondo antes de medir nada (mixCarveSources), por lo que un análisis las cubre a todas: las bandas provienen de todo el discurso que hay, y las envolventes se elevan dondequiera que esté sucediendo algo. Las voces que nunca suenan mientras la pista de fondo está activa se omiten; no pueden enmascararla.
Un carve 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 tiene que ser exhaustivamente correcto y sigue siendo correcto solo hasta la próxima edición — un cuarto clip de narración añadido más tarde se reproduce fuera del conocimiento del carve, y la pista de fondo no se atenúa debajo de él silenciosamente. Nombrar el grupo en su lugar resuelve la pertenencia en el momento del análisis, por lo que un clip añadido al grupo más tarde está cubierto sin tocar sources en absoluto:
<!-- agrupa la narración, luego talla la pista de fondo contra el grupo -->
<audio id="vo-intro" data-audio-group="voiceover" …></audio>
<audio id="vo-middle" data-audio-group="voiceover" …></audio>
<audio id="vo-outro" data-audio-group="voiceover" …></audio>
<audio id="music" data-fx-carve='{"enabled":true,"sources":["voiceover"],"strength":0.8}' …></audio>
Una lista sources que nombra dos o más ids de clip simples en lugar de un grupo es detectada por la regla de lint audio_carve_ungrouped_sources — sigue funcionando, pero es la versión que se estropea silenciosamente cuando se añade un clip.
Mantén el grupo de tallado como un grupo de voz: sin pista de fondo, 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 pista de fondo en su propio grupo de origen. 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 el sidechain en el siguiente análisis y la pista de fondo comienza a atenuarse 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 del grupo, por lo que la primera pasada es genuinamente correcta y solo la siguiente es incorrecta. Por lo tanto, asigna a cada función su propio grupo — music para la pista de fondo, voiceover para la narración, sfx para los golpes — y mantén el grupo nombrado en sources conteniendo solo voces.
carve.mjs se niega a escribir la forma de grupo cuando ve cualquiera de los casos, registra los ids de clip y dice
…[truncado para traducción]