HyperFrames Áudio
Uma mixagem é um conjunto de relacionamentos, não uma pilha de processadores. Duas faixas que soam corretas isoladamente podem ser insuportá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 executam o mesmo grafo de áudio Web — 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 examina é o que é gravado. Você nunca ajusta duas vezes.
Três atributos carregam tudo, todos no próprio elemento de áudio/vídeo:
| Atributo | Contém |
|---|---|
data-fx-chain | os efeitos, em ordem de sinal |
data-automation | envelopes no volume desta faixa ou em seus parâmetros de efeito |
data-fx-carve | as configurações da própria escultura, para que possa ser rederivada |
O JSON exato para cada um, e as regras que uma faixa deve satisfazer: references/attributes.md.
Cada efeito com seus parâmetros, faixas e unidades: references/fx-registry.md.
Como descobrir o que está errado em um arquivo que você não pode ouvir:
references/diagnosis.md.
Presets, jobs nomeados e perfis de um botão, 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 jobs nomeados geralmente já nomeia o problema.
Como tudo se encaixa
Duas superfícies de autoria escrevem esses atributos; dois runtimes 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["faixa de fundo musical<br/>arquivo de mídia"]
subgraph AUTHOR["Autoria — as únicas coisas que escrevem atributos"]
panel["Estúdio<br/>Controle de escultura de narração"]
script["scripts/carve.mjs<br/>detecta o par, dinâmico por padrão"]
analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
painel --> analysis
script --> analysis
end
voice --> analysis
bed --> analysis
subgraph ATTRS["Escrito no elemento do fundo musical"]
carveAttr["data-fx-carve<br/>fonte · intensidade · dinâmico"]
chainAttr["data-fx-chain<br/>peaking xN + gain, 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 --> previsualização["Pré-visualização<br/>AudioContext ao vivo<br/>attachElementFxChain"]
sched --> previsualização
build --> renderização["Renderização<br/>OfflineAudioContext no navegador headless<br/>applyAudioFxChain"]
sched --> renderização
previsualização --> ouvido["o que você ouve enquanto examina"]
renderização --> wav["WAV processado<br/>+ chainTailSeconds para que a mixagem deixe a cauda passar"]
wav --> mixer["motor · audioMixer<br/>faixa de volume assada no PCM aqui, não no grafo"]
mixer --> saida["a mixagem renderizada"]
editar["editar o atributo durante a reprodução"] -.->|MutationObserver| previsualização
As configurações da própria 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 um fundo musical esculpido, o sinal passa primeiro pelos cortes, depois pelo ajuste de nível, e então por qualquer coisa que você mesmo construiu — que é o motivo pelo qual um limitador que você adiciona ainda atua como o último teto:
flowchart LR
src["fundo musical decodificado"] --> p1["peaking<br/>400 Hz"]
p1 --> p2["peaking<br/>1 kHz"]
p2 --> p3["peaking<br/>1.6 kHz"]
p3 --> g["ganho<br/>ajuste de nível"]
g --> mao["seus próprios efeitos<br/>ex.: limitador"]
mao --> destino["ganho da faixa, depois saída"]
l1["faixa fx.n1.gain"] -.->|"envelope do nível<br/>da voz nessa banda"| p1
l4["faixa fx.n4.gain"] -.->|"o quanto o fundo musical<br/>reduz no geral"| g
Uma escultura estática é o mesmo grafo com valores fixos e nenhuma faixa.
Primeiro, descubra o que está errado
A tabela abaixo começa com "soa encorpado" — o que pressupõe que alguém já ouviu e disse isso. Se receber um arquivo e "consertar isso", você não tem essa frase e não pode ouvir, então tem que medir. Uma regra rege 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 sentenças declinam de 5 a 6 dB à medida que terminam. Cada um desses é lido como um defeito por si só, e cada um deles é do locutor.
Então compare, e compare com algo dentro do mesmo arquivo: o original limpo se existir, caso contrário, as pausas — o que é audível em uma lacuna é aditivo, e o espectro da lacuna é o canal em vez da voz. Comparar com um espectro médio publicado ou uma voz de controle sintetizada não funciona: dois locutores 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 nenhum 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 testadas: references/diagnosis.md. Leia-o 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:
| Soa como | Recorra a |
|---|---|
| Zumbido ou baque por baixo | rumble-cut, ou um highpass a 80 Hz |
| Encorpado, peitoral | Domar Encorpado job (200 Hz) |
| Abafado, atrás de papelão | Reduzir Lama job (250 Hz) |
| Palavras difíceis de entender | Adicionar Clareza job (3 kHz), ou esculpa o fundo musical |
| Áspero e cansativo | Suavizar Aspereza job (3.2 kHz) |
| Algumas palavras muito mais altas que outras | Uniformidade em um compressor, ou Uniformizar Níveis |
| Tom de ambiente entre frases | room-gate |
| Voz e música competindo | Escultura de narração — não um EQ em nenhum |
| Seco, gravado em lugar nenhum | room-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 definido antes de um high-pass passa seu tempo perseguindo o zumbido.
Recorra a 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 duas fontes colidindo, porque as colisões acontecem em bandas: um fundo musical e uma voz ambos querem 1–3 kHz, e tirar isso do fundo musical custa muito menos para ele do que abaixar tudo custa para a mixagem. Um high-pass em uma voz é a correção padrão para zumbido; um low-pass escurece ou abafa deliberadamente.
Dinâmicas (gain, compressor, limiter, gate) decidem como o nível de uma faixa se comporta ao longo do tempo. A compressão estreita a distância entre o alto e o baixo para que as partes baixas possam subir. Um limitador é um teto — ele não molda nada, garante que nada passe. Um gate remove o que está abaixo de um limiar, que é como você silencia o tom de ambiente entre frases. gain é um estágio de nível simples, e é o que uma faixa de automação monta quando uma faixa tem que sair do caminho.
Não lineares (saturate, bitcrush) mudam a forma da forma de onda, o que adiciona harmônicos que não estavam lá. Recorra a eles quando uma faixa precisa de caráter ou granulação 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á a ela largura. 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 outra coisa e mantenha a quantidade de efeito menor do que soa bem isoladamente.
A cadeia é serial: cada efeito processa o que o anterior produziu. Portanto, a filtragem corretiva vai cedo, o caráter no meio e um limitador por último, onde pode realmente atuar como um teto.
Escultura de narração
O problema que resolve. Um fundo musical sob uma voz torna a voz difícil de seguir. O reflexo é abaixar todo o fundo musical, o que funciona e custa a ele toda a sua presença — a música fica sem vida 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 pega apenas essas, e o fundo musical 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 residem no fundo musical — 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 torna 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. sources é uma lista, porque um fundo musical 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 do fundo musical 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 alguma esteja acontecendo. Vozes que nunca tocam enquanto o fundo musical toca são deixadas de fora; elas não podem mascará-lo.
Um botão. strength é 0..1 e deriva tudo: o quão profundo cortar, quantas bandas, o quão largas, o quanto favorecer a inteligibilidade sobre a energia bruta da voz, o quanto o nível pode cair, o quão abaixo da voz mirar. Esses seis andam juntos em qualquer mixagem real — uma escultura suave é um corte raso em poucas bandas com pouca redução, uma forte é mais profunda em mais bandas com mais — então eles são um relacionamento escrito uma vez, em carveProfile. O padrão é 0,25 — um corte de 6 dB em três bandas com 6 dB de margem de nível, audível sem soar como um buraco. Em 0,5 o corte atinge 10 dB, que é onde uma escultura começa a ser ouvida como um efeito em vez de espaço para a voz; acima disso é território deliberado para um fundo musical alto sob uma voz baixa. 0 é apenas espectral — uma banda, sem ajuste de nível.
Esculpir por padrão. Um fundo musical tocando sob narração quer uma escultura; não é uma etapa de polimento para chegar se houver tempo. Coloque ambas as faixas, execute o comando abaixo, ouça. Pule apenas quando não houver narração para a música se sentar — um videoclipe, um cartão de título, um corte de montagem ao ritmo da faixa.
Ela sempre segue a voz. Não há modo estático: uma profundidade fixa enfraquece o fundo musical através de cada pausa, e depois que você ouviu ambos, não há razão para querê-la. Cada valor se torna um envelope do próprio nível da fala — o silêncio deixa o fundo musical em paz, uma passagem alta empurra a escultura para a profundidade total — escrito como automação comum, que é o motivo pelo qual as faixas aparecem na linha do tempo e podem ser editadas depois.
O ajuste de nível faz parte dela. A escultura espectral não pode corrigir um fundo musical que é simplesmente mais alto que a voz. Então a escultura também mede o quanto o fundo musical está acima da voz e escreve um estágio gain: mantido em um valor para uma escultura estática, conduzido por um envelope para uma dinâmica. Esse envelope libera lentamente de propósito — música que volta ao máximo no instante em que uma palavra termina soa como uma máquina fazendo isso.
Executando-a. No Estúdio, a escultura é um módulo no topo do rack de efeitos de uma faixa — voz, intensidade, dinâmico e a análise que produziu, em um cartão. Está lá sempre que outra faixa poderia ser a voz, e um fundo musical com exatamente um candidato acima dele é esculpido por padrão, dinamicamente, na intensidade padrão: isso é o que um fundo musical sob narração quer, e o módulo é onde você muda ou desliga. Vários candidatos deixam o seletor esperando em vez de adivinhar. Headless — que é o caminho quando você está criando uma composição em vez de editando uma:
node <SKILL_DIR>/scripts/carve.mjs --comp index.html
Esse é o comando inteiro. Ele encontra a voz e o fundo musical, esculpe dinamicamente na intensidade padrão e imprime o que decidiu:
bed music-bed (nome parece música)
voice narration (única faixa restante)
carve strength 0.25 dynamic
bands 400Hz -6dB q1.4, 1000Hz -3dB q1.4, 1600Hz -3.17dB q1.4
level 216-point envelope, floor -6 dB
Nomeie as faixas com --bed / --voice (repetível) quando a escolha automática estiver errada, --strength para empurrá-la, --dry-run para ver esse relatório e não escrever nada.
Como ele escolhe as faixas. Nomes primeiro, porque é o que você já disse a ele e a resposta é explicável — classifyAudioName em core, o mesmo classificador que o seletor do próprio Estúdio usa, então os dois não podem discordar. Uma faixa cujo id ou nome de arquivo parece música (music, bgm, bed, score…) é o fundo musical; todo o resto que toca sobre ela e não tem forma de SFX é uma voz. Elementos de áudio são preferidos: o vídeo conta apenas quando nenhuma faixa de áudio resta para ser a voz, ou cada clipe B-roll na composição pareceria alguém falando. Ele recusa quando não pode distinguir: duas faixas que parecem música ou nenhuma que pareça música, e imprime um erro em vez de adivinhar.
Efeitos e presets
Referência completa de parâmetros, unidades e faixas: references/fx-registry.md. Abra isso antes de construir qualquer cadeia manualmente, porque as faixas de parâmetros não são padronizadas entre efeitos — uma largura de 0.5 para um peaking é um corte estreito, para um shelving é um suave — e o ID de parâmetro que uma automação faz referência no JSON é o nome oficial, não o rótulo amigável.
Presets nomeados, jobs e perfis de um botão: references/presets.md. Um preset é uma cadeia de efeitos completa com valores, que é o que você alcança quando o som está errado de uma forma que já tem nome. Um job nomeado é um subconjunto — uma etapa de cadeia, não a cadeia inteira. Um perfil de um botão é uma única abstração que define vários parâmetros em um movimento (como strength na escultura). A tabela de sintoma para correção na seção Comece pelo sintoma acima aponta para este arquivo.
Efeitos por tipo:
Filtros (primeiro) — highpass, lowpass, peaking, lowshelf, highshelf. Todos paramétricos com frequência, Q e ganho onde aplicável.
Dinâmicas (segundo, depois que as bandas são corrigidas) — gain (estágio de nível simples), compressor (threshold, ratio, attack, release, knee, makeup-gain), limiter (apenas threshold), gate (threshold, attack, hold, release).
Não lineares (terceiro, se a faixa precisar de caráter) — saturate (drive, output-gain), bitcrush (bits, sample-rate-reduction, mix).
Tempo (último, se a faixa deve ficar atrás de outra coisa) — delay (time, feedback, mix), reverb (decay, pre-delay, damping, size, mix), chorus (rate, depth, delay, mix), phaser (rate, depth, feedback, stages, mix).
A cadeia é serial. Cada efeito processa o que o anterior produziu. Portanto, a filtragem corretiva vai cedo, o caráter no meio e um limitador por último.
Automação
Automação não é uma peça de efeito. É uma propriedade de um parâmetro, expressa como um conjunto de pontos-chave ou uma função de envelope, em JSON dentro de data-automation. Qualquer parâmetro de qualquer efeito na cadeia pode ser automatizado — volume da faixa, frequência de um peaking, threshold de um compressor, taxa de um chorus. A automação de escultura sempre escreve em data-automation para que os envelopes apareçam e possam ser editados posteriormente. Especificação completa: references/attributes.md.
Cauda de mixagem
Uma cauda de reverberação ou delay que continua após o final de uma faixa não deve ser cortada. O motor de renderização permite que você especifique segundos extras (padrão 0.5) como chainTailSeconds na mixagem, que é somado ao contêiner de áudio para que a cauda passe. O valor padrão cobre a maioria dos reverbs de sala e delays de quarto de nota; um reverb de cauda longa ou delay com feedback alto pode precisar de 1.0–2.0.
Se falhar
A skill imprime JSON em stderr. O motivo está sempre na primeira chave: "error". Possibilidades:
- Nenhuma faixa de áudio encontrada (a composição pode não ter sido renderizada ainda para um elemento de áudio).
- A classificação não conseguiu distinguir o fundo musical da voz (duas faixas parecem música ou nenhuma parece música).
- A faixa do fundo musical não tinha áudio decodificado (pode precisar de um ciclo de renderização).
- Um atributo é JSON inválido (um efeito com parâmetros ausentes).
Para problemas de diagnóstico de áudio, execute node <SKILL_DIR>/scripts/diagnose.mjs --comp index.html --track-id <id>, que executa a análise de espectro e imprime as leituras.