Installation du plugin : Avant les commandes de configuration ou de fraîcheur, suivez les règles d'exécution du plugin lorsque cette compétence se trouve dans un plugin HyperFrames. Les installations autonomes conservent les instructions de mise à jour ci-dessous.
HyperFrames Audio
Un mixage est un ensemble de relations, pas une pile de processeurs. Deux pistes qui sonnent correctement seules peuvent être inécoutables ensemble, et la solution n'est presque jamais "baisser l'une" — il s'agit de trouver sur quoi elles se battent et de le donner à celle qui en a besoin. Chaque outil ici existe pour exprimer une de ces relations.
Les effets vivent sur l'élément en tant que data-fx-chain, et l'aperçu et le rendu exécutent le même graphe audio Web Audio — le studio dans un contexte en direct, le moteur dans un contexte hors ligne dans le navigateur qu'il pilote déjà. Il n'y a qu'une implémentation de chaque effet, donc ce que vous entendez en défilant est ce qui est écrit. Vous ne réglez jamais deux fois.
Le timing des clips reste du ressort de /hyperframes-core : les coupures audio/vidéo et les plages source utilisent data-start, data-duration et data-media-start, et les fondus enchaînés chevauchent les clips sur différentes pistes. Cette compétence gère le fondu d'ouverture/fermeture des pistes placées, les enveloppes de fondu enchaîné, le gain/volume de piste, l'automatisation du volume et des effets, le ducking/voix-over, et la chaîne d'effets. /media-use gère le sourçage, la génération et le prétraitement.
La constante data-playback-rate (0.1..10) est sûre pour le rendu de l'image et du son à hauteur préservée lorsque les éléments audio/vidéo correspondants utilisent le même timing, le même décalage source et la même vitesse. Une rampe de vitesse est une piste rate dans data-automation (voir docs/reference/speed-ramps) ; elle l'emporte sur la constante et préserve la hauteur sonore dans l'aperçu et le rendu. HyperFrames ne fournit pas de synchronisation de forme d'onde automatique ou de correction de dérive.
Pour des recettes de coupure/fondu enchaîné/re-timing copiables, utilisez /hyperframes-core → references/creator-editing-recipes.md.
Trois attributs contiennent tout, sur l'élément audio/vidéo lui-même — ou, pour les deux premiers, sur un bus <hf-audio-group> (voir "Un bus pour plusieurs pistes") :
| Attribut | Contient |
|---|---|
data-fx-chain | les effets, dans l'ordre du signal |
data-automation | les enveloppes sur le volume de cette piste ou ses paramètres d'effet |
data-fx-carve | les propres réglages du carve, pour pouvoir les dériver à nouveau |
Les familles d'effets livrées sont le gain, l'EQ (passe-haut, passe-bas, peak, shelfs), le compresseur, le limiteur, la porte, la saturation, le délai, la réverbération, le chorus, le phaser et le bitcrush.
Le JSON exact pour chacun, et les règles qu'une piste doit satisfaire : references/attributes.md.
Chaque effet avec ses paramètres, plages et unités : references/fx-registry.md.
Comment déterminer ce qui ne va pas avec un fichier que vous ne pouvez pas entendre : references/diagnosis.md.
Préréglages, tâches nommées et profils à un bouton, ainsi qu'un tableau symptôme-solution : references/presets.md — lisez-le avant de construire une chaîne à la main, car l'un des préréglages ou des tâches nommées nomme généralement déjà le problème.
Comment tout s'assemble
Deux surfaces d'édition écrivent ces attributs ; deux exécutants les lisent via les mêmes constructeurs. Ce milieu partagé est la raison pour laquelle l'aperçu prédit le rendu.
flowchart TB
voice["piste vocale<br/>fichier média"]
bed["fond musical<br/>fichier média"]
subgraph AUTEUR["Édition — les seules choses qui écrivent les attributs"]
panel["Studio<br/>Contrôle du carve voix-over"]
script["scripts/carve.mjs<br/>détecte la paire, dynamique par défaut"]
analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
panel --> analysis
script --> analysis
end
voice --> analysis
bed --> analysis
subgraph ATTR["Écrits sur l'élément du fond"]
carveAttr["data-fx-carve<br/>source · force · dynamique"]
chainAttr["data-fx-chain<br/>peaking xN + gain, tagué fromCarve"]
autoAttr["data-automation<br/>une piste par paramètre sculpté"]
end
analysis --> carveAttr
analysis --> chainAttr
analysis --> autoAttr
subgraph PARTAGE["Une implémentation, lue par les deux"]
build["audioFxGraph.ts · buildFxChain"]
sched["audioFxAutomation.ts · scheduleChainAutomation"]
end
chainAttr --> build
autoAttr --> sched
build --> apercu["Aperçu<br/>AudioContext en direct<br/>attachElementFxChain"]
sched --> apercu
build --> rendu["Rendu<br/>OfflineAudioContext dans le navigateur headless<br/>applyAudioFxChain"]
sched --> rendu
apercu --> entendu["ce que vous entendez en défilant"]
rendu --> wav["WAV traité<br/>+ chainTailSeconds pour que le mix laisse passer le tail"]
wav --> mix["moteur · audioMixer<br/>la piste de volume est cuite dans le PCM ici, pas dans le graphe"]
mix --> out["le mix rendu"]
edit["éditer l'attribut en pleine lecture"] -.->|MutationObserver| apercu
Les réglages propres du carve ne sont jamais lus lors de la lecture — la chaîne et les pistes qu'il a produites sont ce qui joue. data-fx-carve existe pour que la force puisse être modifiée sur un carve existant au lieu d'être devinée à partir des filtres.
À l'intérieur d'un fond sculpté, le signal traverse d'abord les creux, puis l'adaptation de niveau, puis tout ce que vous avez construit vous-même — c'est pourquoi un limiteur que vous ajoutez agit toujours comme le plafond final :
flowchart LR
src["fond décodé"] --> p1["peaking<br/>400 Hz"]
p1 --> p2["peaking<br/>1 kHz"]
p2 --> p3["peaking<br/>1.6 kHz"]
p3 --> g["gain<br/>adaptation de niveau"]
g --> main["vos propres effets<br/>ex. limiteur"]
main --> dest["gain de piste, puis sortie"]
l1["piste fx.n1.gain"] -.->|"enveloppe du niveau<br/>de la voix dans cette bande"| p1
l4["piste fx.n4.gain"] -.->|"à quel point le fond<br/>s'abaisse globalement"| g
Un carve statique est le même graphe avec des valeurs fixes et aucune piste du tout.
D'abord, déterminer ce qui ne va pas
Le tableau ci-dessous part de "ça sonne sourd" — ce qui suppose que quelqu'un a déjà écouté et l'a dit. On vous donne un fichier et "réparez ça", vous n'avez pas cette phrase et vous ne pouvez pas écouter, donc vous devez mesurer. Une règle gouverne tout cela :
Le spectre absolu d'une seule voix inconnue ne peut pas être diagnostiqué. Les formants sont de ±10 dB, les fondamentaux vont de 85 à 255 Hz, et les phrases chutent de 5 à 6 dB en se terminant. Chacun de ces éléments ressemble à un défaut en soi, et chacun est le locuteur.
Comparez donc, et comparez à quelque chose dans le même fichier : l'original propre s'il existe, sinon les pauses — tout ce qui est audible dans un silence est additif, et le spectre du silence est celui du canal, pas de la voix. Comparer à un spectre moyen publié ou à une voix de contrôle synthétisée ne fonctionne pas : deux locuteurs diffèrent plus que la plupart des défauts, et les deux mauvaises réponses dans l'évaluation qui a guidé cette directive provenaient exactement de cela.
Lorsqu'il n'y a ni original ni silence utilisable, un défaut tonal statique est véritablement sous-déterminé. Dites-le et proposez les lectures qui correspondent, plutôt que d'en choisir une et de construire une chaîne dessus.
Commandes, pièges et recettes pratiques : references/diagnosis.md. Lisez-le avant de diagnostiquer un fichier que personne n'a décrit.
Partez du symptôme
Une fois que vous connaissez la bande et le type, nommez ce qui ne va pas avec l'audio. La plupart des mauvais audios sont un ou deux de ceux-ci, et chacun a une réponse fournie :
| Ça ressemble à | Utilisez |
|---|---|
| Bourdonnement ou bruit sourd en dessous | rumble-cut, ou un highpass à 80 Hz |
| Sourd, caverneux | Tame Boominess job (200 Hz) |
| Étouffé, comme derrière du carton | Reduce Mud job (250 Hz) |
| Mots difficiles à comprendre | Add Clarity job (3 kHz), ou sculptez le fond |
| Dur et fatiguant | Soften Harshness job (3.2 kHz) |
| Certains mots beaucoup plus forts que d'autres | Evenness sur un compresseur, ou Even Out Levels |
| Son de pièce entre les phrases | room-gate |
| La voix et la musique se battent | Voix-over carve — pas un EQ sur l'un ou l'autre |
| Sec, enregistré nulle part | room-tight ou room-natural |
| Juste "amateur" | voice-clean, qui est quatre des ci-dessus dans l'ordre |
Catalogue complet, contenu de chaque préréglage, vocabulaire des bandes et ce qui est délibérément PAS couvert (dé-ess, suppression de bruit, correspondance de tonalité) : references/presets.md.
Soustrayez avant d'ajouter, nivelez après avoir filtré, les relations après le niveau, le caractère et le plafond en dernier. Chaque étape change ce que la suivante entend — un compresseur réglé avant un passe-haut passe son temps à poursuivre le grondement.
Choisissez une famille par le problème, pas par le nom
Filtres (highpass, lowpass, peaking, lowshelf, highshelf) décident quelles fréquences une piste peut occuper. C'est le premier outil pour deux sources qui entrent en collision, car les collisions se produisent par bandes : un fond et une voix veulent tous deux 1–3 kHz, et retirer cela du fond coûte bien moins au fond que de baisser le tout ne coûte au mix. Un passe-haut sur une voix est la solution standard pour le grondement ; un passe-bas assombrit ou étouffe délibérément.
Dynamiques (gain, compressor, limiter, gate) décident comment le niveau d'une piste se comporte dans le temps. La compression réduit la distance entre le fort et le faible pour que les parties faibles puissent remonter. Un limiteur est un plafond — il ne façonne rien, il garantit que rien ne dépasse. Une porte supprime ce qui est en dessous d'un seuil, ce qui est la façon de faire taire le son de pièce entre les phrases. gain est un étage de niveau simple, et c'est ce qu'une piste d'automatisation pilote lorsqu'une piste doit se déplacer.
Non linéaires (saturate, bitcrush) modifient la forme d'onde, ce qui ajoute des harmoniques qui n'étaient pas là. Utilisez-les lorsqu'une piste a besoin de caractère ou de grain plutôt que de correction — et rappelez-vous qu'elles sont génératives : elles rendent une source fine plus dense, pas plus propre.
Temporels (delay, reverb, chorus, phaser) placent une piste dans un espace ou lui donnent de la largeur. Ce sont ceux qui détruisent le plus facilement un mix, car une queue ou une copie désaccordée occupe le même espace dont une voix a besoin. Utilisez-les sur la chose qui doit se trouver derrière quelque chose d'autre, et gardez la quantité humide plus basse qu'elle ne sonne correctement en isolation.
La chaîne est en série : chaque effet traite ce que le précédent a produit. Donc le filtrage correctif va tôt, le caractère au milieu, et un limiteur en dernier où il peut réellement agir comme un plafond.
Voix-over carve
Le problème qu'il résout. Un fond musical sous une voix rend la voix difficile à suivre. Le réflexe est de baisser tout le fond, ce qui fonctionne mais coûte au fond toute sa présence — la musique devient molle pour toute la durée de la voix-over. Mais la voix n'a pas besoin de tout le spectre. Elle a besoin des quelques bandes qu'elle occupe réellement. Le carve ne prend que celles-ci, et le fond garde ses graves et ses aigus, donc il reste de la musique pendant que la voix est toujours intelligible.
C'est une relation, pas un effet. Les réglages vivent sur le fond — la piste qui est traitée — et ils nomment les voix à écouter, exactement comme un compresseur sidechain : vous sélectionnez la piste qui devient plus silencieuse et choisissez ce qui la rend plus silencieuse. Ne mettez jamais un carve sur une piste vocale. Une voix sculptée contre elle-même est un bug, pas un choix de mix subtil.
Chaque voix, pas une seule d'entre elles. sources est une liste, car un fond musical passe généralement sous une séquence entière — un narrateur, une réponse d'interview, un deuxième présentateur. Elles sont additionnées sur la propre horloge du fond avant que quoi que ce soit ne soit mesuré (mixCarveSources), donc une analyse couvre toutes : les bandes proviennent de toute la parole présente, et les enveloppes montent là où l'une d'elles se produit. Les voix qui ne jouent jamais pendant le fond sont laissées de côté ; elles ne peuvent pas le masquer.
Un carve contre plus d'un identifiant de clip est faux. Groupez les clips et sculptez contre le groupe. C'est un invariant, pas un conseil. Nommer les clips un par un doit être exhaustivement correct et ne reste correct que jusqu'à la prochaine édition — un quatrième clip de narration ajouté plus tard joue en dehors de la conscience du carve, et le fond ne s'abaisse pas silencieusement. Nommer le groupe à la place résout l'appartenance au moment de l'analyse, donc un clip ajouté au groupe plus tard est couvert sans toucher à sources du tout :
<!-- grouper la narration, puis sculpter le fond contre le groupe -->
<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>
Une liste sources nommant deux identifiants de clip simples ou plus au lieu d'un groupe est attrapée par la règle de lint audio_carve_ungrouped_sources — cela fonctionne toujours, mais c'est la version qui pourrit silencieusement lorsqu'un clip est ajouté.
Gardez le groupe de carve comme un groupe vocal : pas de fond, pas de bruitage, pas de musique. Un identifiant de groupe dans sources se résout en chaque membre actuel à chaque analyse, donc le groupe que vous nommez est le groupe que vous obtenez plus tard — pas les pistes qui ont été mesurées lorsqu'il a été écrit. Deux façons dont cela mord :
- Le fond dans son propre groupe source. Il est donné à lui-même comme une voix et sculpté contre son propre contenu — la règle "ne jamais sculpter une piste contre elle-même" arrive une réanalyse plus tard.
- Un clip de bruitage ou de musique dans le groupe vocal. Il entre dans la sidechain à l'analyse suivante et le fond commence à s'abaisser sous un whoosh, même si l'exécution qui a écrit l'attribut ne l'a jamais mesuré.
Les deux sont invisibles au moment où le carve est écrit : l'analyse additionne les voix qu'elle a détectées et ne passe jamais par la résolution de groupe, donc le premier passage est réellement correct et seul le suivant est erroné. Donnez donc à chaque rôle son propre groupe — music pour le fond, voiceover pour la narration, sfx pour les effets — et gardez le groupe nommé dans sources ne contenant que des voix.
carve.mjs refuse d'écrire la forme de groupe lorsqu'il voit l'un ou l'autre cas, enregistre les identifiants de clip et dit
…
[tronqué pour la traduction]