Communitygithub.com

hyperframes-audio

Use quando o áudio já posicionado em uma composição HyperFrames precisa ser mixado: fade-in/fade-out, crossfade, ganho ou volume de faixa, automação de volume, ducking, uma base musical que compete com uma narração (voiceover carve), efeitos em uma faixa (EQ, compressor, limitador, gate, saturação, delay, reverb, chorus, phaser, bitcrush), envelopes de automação desenhados no volume de uma faixa ou em qualquer parâmetro de efeito, ou um barramento de submix carregando uma cadeia, um fader e um relógio de automação para várias faixas ao mesmo tempo (`<hf-audio-group>`). Não use para obtenção ou geração de áudio — encontrar BGM, SFX ou fazer uma narração é `/media-use`. Não use para temporização de clipes ou layout de faixas, que é `/hyperframes-core`.

O que é hyperframes-audio?

A skill hyperframes-audio é um assistente de mixagem especializado para o ecossistema HyperFrames, projetado para resolver conflitos sonoros em composições de áudio e vídeo. Ela lida com fade-in/fade-out, crossfade, automação de volume e parâmetros de efeitos, ducking e o recurso de "voiceover carve" (escultura de narração) — que reduz faixas específicas de uma base musical para abrir espaço para a voz, sem simplesmente abaixar todo o volume. A skill opera inteiramente no navegador, usando o mesmo Web Audio Graph tanto para pré-visualização quanto para renderização final, garantindo que o que o usuário ouve durante a edição seja exatamente o que será exportado. Ela suporta uma ampla gama de efeitos (ganho, EQ, compressor, limitador, gate, saturação, delay, reverb, chorus, phaser, bitcrush) e pode ser aplicada a elementos de áudio/vídeo individuais ou a barramentos de grupo (`<hf-audio-group>`) que controlam várias faixas simultaneamente. A skill é complementar a `/hyperframes-core` (que gerencia temporização e layout de clipes) e `/media-use` (que gerencia obtenção e geração de áudio), focando exclusivamente na mixagem e no relacionamento entre faixas.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Instalação de plugins: Antes de comandos de configuração ou atualização, siga as regras de execução de plugin quando esta skill estiver dentro de um plugin HyperFrames. Instalações independentes mantêm as instruções de atualização abaixo.

HyperFrames Audio

Uma mixagem é um conjunto de relacionamentos, não uma pilha de processadores. Duas faixas que soam bem isoladamente podem ser inaudíveis juntas, e a correção quase nunca é "abaixar uma" — é descobrir pelo que elas estão competindo e dar isso a quem precisa. Cada ferramenta aqui existe para expressar um desses relacionamentos.

Os efeitos residem no elemento como data-fx-chain, e a pré-visualização e a renderização usam o mesmo Web Audio Graph — o estúdio em um contexto ao vivo, o motor em um contexto offline dentro do navegador que ele já dirige. Há uma única implementação de cada efeito, então o que você ouve enquanto ajusta é o que será gravado. Você nunca ajusta duas vezes.

A temporização de clipes permanece em /hyperframes-core: cortes de áudio/vídeo e intervalos de origem usam data-start, data-duration e data-media-start, e crossfades sobrepõem clipes em faixas diferentes. Esta skill lida com fade-in/fade-out de faixa posicionada, envelopes de crossfade, ganho de faixa/volume de faixa, automação de volume e efeitos, ducking/voiceover carve e a cadeia de efeitos. /media-use lida com obtenção, geração e pré-processamento.

A constante data-playback-rate (0.1..10) é segura para renderização de imagem e som com preservação de tom quando elementos de áudio/vídeo correspondentes usam a mesma temporização, deslocamento de origem e taxa. Uma rampa de velocidade é uma faixa rate em data-automation (veja docs/reference/speed-ramps); ela prevalece sobre a constante e mantém o tom na pré-visualização e na renderização. O HyperFrames não fornece sincronização automática de forma de onda ou correção de deriva. Para receitas copiáveis de corte/crossfade/re-temporização, use /hyperframes-core → references/creator-editing-recipes.md.

Três atributos carregam tudo, no próprio elemento de áudio/vídeo — ou, para os dois primeiros, em um barramento <hf-audio-group> (veja "Um barramento para muitas faixas"):

AtributoContém
data-fx-chainos efeitos, na ordem de sinal
data-automationenvelopes no volume desta faixa ou em seus parâmetros de efeito
data-fx-carveas configurações da escultura, para que possa ser rederivada

As famílias de efeitos disponíveis são ganho, EQ (passa-altas, passa-baixas, pico, prateleiras), compressor, limitador, gate, saturar, delay, reverb, chorus, phaser e bitcrush.

JSON exato para cada um, e as regras que uma faixa deve satisfazer: references/attributes.md. Cada efeito com seus parâmetros, intervalos e unidades: references/fx-registry.md. Como descobrir o que está errado com um arquivo que você não pode ouvir: references/diagnosis.md. Presets, trabalhos nomeados e perfis de um knob, além de uma tabela de sintoma para correção: references/presets.md — leia isso antes de construir uma cadeia manualmente, porque um dos presets ou trabalhos nomeados geralmente já nomeia o problema.

Como tudo se encaixa

Duas superfícies de autoria escrevem esses atributos; dois tempos de execução os leem através dos mesmos construtores. Esse meio compartilhado é o motivo pelo qual a pré-visualização prevê a renderização.

flowchart TB
  voice["faixa de voz<br/>arquivo de mídia"]
  bed["base musical<br/>arquivo de mídia"]

  subgraph AUTHOR["Autoria — as únicas coisas que escrevem atributos"]
    panel["Studio<br/>Controle de voiceover carve"]
    script["scripts/carve.mjs<br/>detecta o par"]
    analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
    panel --> analysis
    script --> analysis
  end

  voice --> analysis
  bed --> analysis

  subgraph ATTRS["Escrito no elemento da base musical"]
    carveAttr["data-fx-carve<br/>fontes · intensidade"]
    chainAttr["data-fx-chain<br/>pico xN + ganho, marcado fromCarve"]
    autoAttr["data-automation<br/>uma faixa por parâmetro esculpido"]
  end

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

  subgraph SHARED["Uma implementação, lida por ambos"]
    build["audioFxGraph.ts · buildFxChain"]
    sched["audioFxAutomation.ts · scheduleChainAutomation"]
  end

  chainAttr --> build
  autoAttr --> sched

  build --> preview["Pré-visualização<br/>AudioContext ao vivo<br/>attachElementFxChain"]
  sched --> preview
  build --> render["Renderização<br/>OfflineAudioContext no navegador headless<br/>applyAudioFxChain"]
  sched --> render

  preview --> heard["o que você ouve enquanto ajusta"]
  render --> wav["WAV processado<br/>+ chainTailSeconds para que a mixagem deixe a cauda passar"]
  wav --> mix["motor · audioMixer<br/>faixa de volume assada no PCM aqui, não no grafo"]
  mix --> out["a mixagem renderizada"]

  edit["editando o atributo durante a reprodução"] -.->|MutationObserver| preview

As configurações da escultura nunca são lidas durante a reprodução — a cadeia e as faixas que ela produziu são o que toca. data-fx-carve existe para que a intensidade possa ser alterada em uma escultura existente, em vez de ser adivinhada de volta a partir dos filtros.

Dentro de uma base musical esculpida, o sinal passa primeiro pelos cortes, depois pelo ajuste de nível, depois por tudo que você construiu — que é o motivo pelo qual um limitador que você adiciona ainda atua como o teto final:

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["ganho<br/>ajuste de nível"]
  g --> hand["seus próprios efeitos<br/>ex.: limitador"]
  hand --> dest["ganho da faixa, depois saída"]

  l1["faixa fx.n1.gain"] -.->|"envelope do nível da voz<br/>naquela banda"| p1
  l4["faixa fx.n4.gain"] -.->|"o quanto a base<br/>abaixa no geral"| g

Primeiro, descubra o que está errado

A tabela abaixo parte de "soa encorpado" — o que pressupõe que alguém já ouviu e disse isso. Ao receber um arquivo e "consertar isso", você não tem essa frase e não pode ouvir, então precisa medir. Uma regra governa tudo:

O espectro absoluto de uma única voz desconhecida não pode ser diagnosticado. Formantes são ±10 dB, fundamentais variam de 85 a 255 Hz, e as frases caem 5–6 dB à medida que terminam. Cada uma dessas coisas parece um defeito por si só, e todas elas são o falante.

Portanto, compare, e compare com algo dentro do mesmo arquivo: o original limpo se existir, caso contrário, as pausas — o que for audível em uma lacuna é aditivo, e o espectro da lacuna é o canal, não a voz. Comparar com um espectro médio publicado ou uma voz de controle sintetizada não funciona: dois falantes diferem mais do que a maioria dos defeitos, e ambas as respostas erradas na avaliação por trás desta orientação vieram exatamente disso.

Quando não há original e nem silêncio utilizável, um defeito tonal estático é genuinamente subdeterminado. Diga isso e ofereça as leituras que se encaixam, em vez de escolher uma e construir uma cadeia nela.

Comandos, armadilhas e receitas práticas: references/diagnosis.md. Leia antes de diagnosticar um arquivo que ninguém descreveu.

Comece pelo sintoma

Depois de saber a banda e o tipo, nomeie o que está errado com o áudio. A maioria dos áudios ruins é um ou dois destes, e cada um tem uma resposta pronta:

Parece queUse
Zumbido ou ruído grave por baixorumble-cut, ou um highpass a 80 Hz
Encorpado, peitoralTame Boominess trabalho (200 Hz)
Abafado, atrás de papelãoReduce Mud trabalho (250 Hz)
Palavras difíceis de entenderAdd Clarity trabalho (3 kHz), ou escultura base musical
Áspero e cansativoSoften Harshness trabalho (3.2 kHz)
Algumas palavras muito mais altas que outrasEvenness em um compressor, ou Even Out Levels
Ruído ambiente entre frasesroom-gate
Voz e música competindoVoiceover carve — não um EQ em nenhum dos dois
Seco, gravado em lugar nenhumroom-tight ou room-natural
Apenas "amador"voice-clean, que é quatro dos acima em ordem

Catálogo completo, o que cada preset contém, o vocabulário de bandas e o que é deliberadamente NÃO coberto (de-essing, remoção de ruído, correspondência de tom): references/presets.md.

Subtraia antes de adicionar, nivele depois de filtrar, relacionamentos depois do nível, caráter e teto por último. Cada etapa muda o que a próxima ouve — um compressor configurado antes de um passa-altas gasta seu tempo perseguindo ruídos graves.

Escolha uma família pelo problema, não pelo nome

Filtros (highpass, lowpass, peaking, lowshelf, highshelf) decidem quais frequências uma faixa pode ocupar. Esta é a primeira ferramenta para colisões entre duas fontes, porque as colisões acontecem em bandas: uma base musical e uma voz querem ambas 1–3 kHz, e tirar isso da base custa muito menos à base do que abaixar tudo custa à mixagem. Um passa-altas em uma voz é a correção padrão para ruídos graves; um passa-baixas escurece ou abafa deliberadamente.

Dinâmicos (gain, compressor, limiter, gate) decidem como o nível de uma faixa se comporta ao longo do tempo. A compressão diminui a distância entre o alto e o baixo para que as partes baixas possam subir. Um limitador é um teto — não molda nada, garante que nada passe. Um gate remove o que está abaixo de um limiar, que é como se silencia o ruído ambiente entre frases. gain é um estágio de nível simples, e é o que uma faixa de automação monta quando uma faixa precisa se mover.

Não lineares (saturate, bitcrush) mudam a forma da onda, o que adiciona harmônicos que não estavam lá. Use quando uma faixa precisar de caráter ou aspereza em vez de correção — e lembre-se de que é generativo: torna uma fonte fina mais densa, não mais limpa.

Tempo (delay, reverb, chorus, phaser) coloca uma faixa em um espaço ou dá largura a ela. Estes são os que mais facilmente estragam uma mixagem, porque uma cauda ou uma cópia desafinada ocupa o mesmo espaço que uma voz precisa. Use-os na coisa que deve ficar atrás de algo, e mantenha a quantidade de efeito molhado mais baixa do que parece correto isoladamente.

A cadeia é serial: cada efeito processa o que o anterior produziu. Portanto, a filtragem corretiva vai no início, o caráter no meio, e um limitador por último, onde pode realmente atuar como um teto.

Voiceover carve (Escultura de narração)

O problema que resolve. Uma base musical sob uma voz dificulta o acompanhamento da voz. O reflexo é abaixar toda a base, o que funciona, mas custa à base toda a sua presença — a música fica mole durante toda a narração. Mas a voz não precisa de todo o espectro. Ela precisa das poucas bandas que realmente ocupa. A escultura tira apenas essas, e a base mantém suas frequências graves e agudas, então ainda é música enquanto a voz ainda é inteligível.

É um relacionamento, não um efeito. As configurações ficam na base — a faixa que é processada — e nomeiam as vozes para ouvir, exatamente como um compressor sidechain faz: você seleciona a faixa que fica mais baixa e escolhe o que a deixa mais baixa. Nunca coloque uma escultura em uma faixa de voz. Uma voz esculpida contra si mesma é um erro, não uma escolha sutil de mixagem.

Cada voz, não apenas uma delas. sources é uma lista, porque uma base geralmente toca sob uma sequência inteira — um narrador, uma resposta de entrevista, um segundo apresentador. Elas são somadas no próprio relógio da base antes que qualquer coisa seja medida (mixCarveSources), então uma análise cobre todas elas: as bandas vêm de toda a fala que existe, e os envelopes sobem onde quer que algo esteja acontecendo. Vozes que nunca tocam enquanto a base toca são deixadas de fora; elas não podem mascará-la.

Uma escultura contra mais de um id de clipe está errada. Agrupe os clipes e faça a escultura contra o grupo. Isso é um invariante, não uma dica. Nomear clipes um por um tem que estar exaustivamente correto e só permanece correto até a próxima edição — um quarto clipe de narração adicionado depois toca fora do conhecimento da escultura, e a base falha em abaixar sob ele silenciosamente. Nomear o grupo resolve a associação no momento da análise, então um clipe adicionado ao grupo depois é coberto sem tocar em sources:

<!-- agrupe a narração, depois faça a escultura da base contra o grupo -->
<audio id="vo-intro" data-audio-group="voz" …></audio>
<audio id="vo-middle" data-audio-group="voz" …></audio>
<audio id="vo-outro" data-audio-group="voz" …></audio>

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

Uma lista sources nomeando dois ou mais ids de clipe simples em vez de um grupo é detectada pela regra de lint audio_carve_ungrouped_sources — ainda funciona, mas é a versão que silenciosamente se degrada quando um clipe é adicionado.

Mantenha o grupo de escultura como um grupo de voz: sem base musical, sem SFX, sem música. Um id de grupo em sources resolve para todos os membros atuais em cada análise, então o grupo que você nomeia é o grupo que você obtém depois — não as faixas que foram medidas quando foi escrito. Duas maneiras pelas quais isso morde:

  • A base musical em seu próprio grupo de origem. Ela é passada para si mesma como uma voz e esculpida contra seu próprio conteúdo — a regra "nunca esculpir uma faixa contra si mesma" chegando uma reanálise depois.
  • Um clipe SFX ou de música no grupo de voz. Ele entra no sidechain na próxima análise e a base começa a abaixar sob um whoosh, mesmo que a execução que escreveu o atributo nunca o tenha medido.

Ambos são invisíveis no momento em que a escultura é escrita: a análise soma as vozes que detectou e nunca passa pela resolução do grupo, então a primeira passagem é genuinamente correta e apenas a próxima está errada. Portanto, dê a cada função seu próprio grupo — musica para a base, voz para a narração, sfx para os efeitos sonoros — e mantenha o grupo nomeado em sources contendo apenas vozes.

carve.mjs se recusa a escrever a forma de grupo quando vê qualquer um dos casos, registra ids de clipe e diz em stderr qual membro o bloqueou. A regra audio_carve_ungrouped_sources então aponta para o arranjo.

Individual skills in this repo

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

Habilidades Relacionadas