⚠ Statut du contrat : le savoir-faire est actuel, le code ne l'est pas
Le framework de sortie de cette pile est Remotion + React (
/hyperframes-core). Le savoir-faire en animation s'applique toujours : timing, choix d'easing, la forme d'un mouvement, les règles nommées et les plans. Le code ne s'applique pas : les exemples et adaptateurs sont écrits pour le runtime retiré HTML + timeline GSAP en pause.Traduction en lisant :
Ici Dans Remotion gsap.fromTo(el, {x:-40}, {x:0, duration:0.5})interpolate(frame, [0, SEC(0.5)], [-40, 0], {…"clamp"})ease: "back.out(1.7)"spring({frame, fps, config:{damping}}), réglé à l'œilune timeline en pause à window.__timelines[id]rien ; chaque valeur est une fonction de useCurrentFrame()data-start/data-durationsur un clip<Sequence from>/durationInFrames, en tramesune keyframe CSS ou une transition styleen ligne dérivé de la trame (l'animation CSS ne se rend pas)Ne collez jamais un exemple de ce skill dans un projet Remotion sans le modifier.
HyperFrames Audio
Un mix est un ensemble de relations, pas une pile de processeurs. Deux pistes qui sonnent bien chacune de leur côté peuvent être inécoutables ensemble, et la solution n'est presque jamais « baisser l'une » — c'est trouver ce sur quoi elles se disputent et 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
utilisent le même graphe Web Audio — le studio dans un contexte en direct, le moteur
dans un contexte hors ligne à l'intérieur du navigateur qu'il pilote déjà. Il y a une
seule implémentation pour chaque effet, donc ce que vous entendez en scrubbant est ce
qui sera écrit. Vous ne réglez jamais deux fois.
Le timing des clips reste /hyperframes-core : les coupes audio/vidéo et les plages
source utilisent data-start, data-duration et data-media-start, et les fondus
enchaînés superposent les clips sur différentes pistes. Ce skill gère le fondu
d'ouverture/fermeture des pistes placées, les enveloppes de fondu enchaîné, le gain
de piste/volume de piste, l'automation du volume et des effets, le ducking/carving de
voix, 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..5) est sûre pour le rendu de l'image et du
son préservé en hauteur lorsque les éléments audio/vidéo correspondants utilisent le
même timing, le même décalage source et la même vitesse. Les variations de vitesse de
la source ne sont pas prises en charge car il n'y a pas d'enveloppe de vitesse ;
prétraitez un actif synchronisé dérivé. HyperFrames ne fournit pas de synchronisation
de forme d'onde automatique ni de correction de dérive. Pour les recettes copiables de
coupe/fondu enchaîné/re-timing, utilisez /hyperframes-core →
references/editing-recipes.md.
Trois attributs portent tout, directement sur l'élément audio/vidéo :
| 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'effets |
data-fx-carve | les paramètres propres du carve, pour pouvoir le redériver |
Les familles d'effets livrées sont le gain, l'égalisation (passe-haut, passe-bas, escent, étagères), le compresseur, le limiteur, le gate, la saturation, le delay, la réverbération, le chorus, le phaser et le bitcrush.
Le JSON exact pour chacun, et les règles qu'une voie 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, travaux nommés et profils à un seul bouton, plus 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 travaux nommés nomme généralement déjà
le problème.
Comment tout s'assemble
Deux surfaces de création écrivent ces attributs ; deux runtimes les lisent à travers les mêmes constructeurs. Ce milieu partagé est la raison pour laquelle l'aperçu prédit le rendu.
flowchart TB
voice["piste voix<br/>fichier média"]
bed["lit musical<br/>fichier média"]
subgraph AUTHOR["Création — les seules choses qui écrivent les attributs"]
panel["Studio<br/>Contrôle du carve de voix"]
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 ATTRS["Écrits sur l'élément du lit musical"]
carveAttr["data-fx-carve<br/>source · intensité · dynamique"]
chainAttr["data-fx-chain<br/>peaking xN + gain, tagués fromCarve"]
autoAttr["data-automation<br/>une voie par paramètre carvé"]
end
analysis --> carveAttr
analysis --> chainAttr
analysis --> autoAttr
subgraph SHARED["Une seule implémentation, lue par les deux"]
build["audioFxGraph.ts · buildFxChain"]
sched["audioFxAutomation.ts · scheduleChainAutomation"]
end
chainAttr --> build
autoAttr --> sched
build --> preview["Aperçu<br/>AudioContext en direct<br/>attachElementFxChain"]
sched --> preview
build --> render["Rendu<br/>OfflineAudioContext dans le navigateur sans tête<br/>applyAudioFxChain"]
sched --> render
preview --> heard["ce que vous entendez en scrubbant"]
render --> wav["WAV traité<br/>+ chainTailSeconds pour que le mix laisse passer la queue"]
wav --> mix["moteur · audioMixer<br/>la piste de volume est intégrée dans le PCM ici, pas dans le graphe"]
mix --> out["le mix rendu"]
edit["édition de l'attribut pendant la lecture"] -.->|MutationObserver| preview
Les propres paramètres du carve ne sont jamais lus à la lecture — la chaîne et les
voies qu'il a produites sont ce qui est joué. data-fx-carve existe pour que
l'intensité puisse être modifiée sur un carve existant plutôt que d'être devinée à
partir des filtres.
À l'intérieur d'un lit musical carvé, le signal passe d'abord par les creux, puis l'égalisation de niveau, puis tout ce que vous avez construit vous-même — c'est pourquoi un limiteur que vous ajoutez agit toujours comme le dernier plafond :
flowchart LR
src["lit musical décodé"] --> p1["peaking<br/>400 Hz"]
p1 --> p2["peaking<br/>1 kHz"]
p2 --> p3["peaking<br/>1.6 kHz"]
p3 --> g["gain<br/>égalisation de niveau"]
g --> hand["vos propres effets<br/>ex. limiteur"]
hand --> dest["gain de piste, puis sortie"]
l1["voie fx.n1.gain"] -.->|"enveloppe du niveau<br/>de la voix dans cette bande"| p1
l4["voie fx.n4.gain"] -.->|"à quel point le lit<br/>baisse globalement"| g
Un carve statique est le même graphe avec des valeurs fixes et aucune voie.
D'abord, déterminer ce qui ne va pas
Le tableau ci-dessous part de « ça sonne creux » — ce qui présuppose que quelqu'un a déjà écouté et l'a dit. Si on vous remet un fichier et vous dit « corrigez ça », vous n'avez pas cette phrase et vous ne pouvez pas écouter, donc vous devez mesurer. Une règle régit tout :
Le spectre absolu d'une seule voix inconnue ne peut être diagnostiqué. Les formants sont à ±10 dB, les fondamentaux vont de 85 à 255 Hz, et les phrases diminuent de 5 à 6 dB à mesure qu'elles se terminent. Chacune de ces variations ressemble à un défaut en soi, et chacune est due au locuteur.
Donc comparez, et comparez par rapport à 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 plutôt que 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 derrière ces conseils proviennent exactement de cela.
Lorsqu'il n'y a pas d'original ni de 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 éprouvées : references/diagnosis.md. Lisez-le
avant de diagnostiquer un fichier que personne n'a décrit.
Partir du symptôme
Une fois que vous connaissez la bande et le type, nommez ce qui ne va pas avec audio. La plupart des mauvais audios sont un ou deux de ceux-ci, et chacun a une réponse intégrée :
| Ça ressemble à | Utilisez |
|---|---|
| Bourdonnement ou bruit sourd en dessous | rumble-cut, ou un highpass à 80 Hz |
| Creux, poitrinant | Tame Boominess travail (200 Hz) |
| Sourd, derrière du carton | Reduce Mud travail (250 Hz) |
| Mots difficiles à distinguer | Add Clarity travail (3 kHz), ou carvez le lit |
| Âpre et fatigant | Soften Harshness travail (3.2 kHz) |
| Certains mots beaucoup plus forts que d'autres | Evenness sur un compresseur, ou Even Out Levels |
| Bruit de pièce entre les phrases | room-gate |
| Voix et musique qui se battent | Carve de voix — 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
n'est DÉLIBÉRÉMENT PAS couvert (dé-essing, suppression de bruit, correspondance
de tonalité) : references/presets.md.
Soustrayez avant d'ajouter, nivelez après avoir filtré, relations après le niveau, caractère et plafond en dernier. Chaque étape change ce que la suivante entend — un compresseur réglé avant un passe-haut passe son temps à courir après le grondement.
Utilisez une famille en fonction du problème, pas du nom
Filtres (highpass, lowpass, peaking, lowshelf, highshelf) décident
quelles fréquences une piste est autorisée à occuper. C'est le premier outil pour
deux sources qui se heurtent, car les collisions se produisent dans des bandes :
un lit musical et une voix veulent tous deux 1–3 kHz, et retirer cela du lit coûte
bien moins au lit 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 l'écart 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 le dépasse. Un gate supprime
ce qui est en dessous d'un seuil, ce qui est la façon de faire taire le bruit de
pièce entre les phrases. gain est un simple étage de niveau, et c'est ce qu'une
piste d'automation utilise lorsqu'une piste doit se déplacer.
Non linéaires (saturate, bitcrush) modifient la forme de l'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 que
c'est génératif : cela rend 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 gâchent le plus facilement
un mix, car une queue ou une copie désaccordée occupe la même pièce qu'une voix
qui en a besoin. Utilisez-les sur ce qui doit se trouver derrière autre chose,
et gardez la quantité de wet plus faible que ce qui sonne bien isolément.
La chaîne est en série : chaque effet traite ce que le précédent a produit. Donc les filtres correctifs vont tôt, le caractère au milieu, et un limiteur en dernier là où il peut réellement agir comme un plafond.
Carve de voix
Le problème qu'il résout. Un lit musical sous une voix rend la voix difficile à suivre. Le réflexe est de baisser tout le lit, ce qui fonctionne mais coûte au lit toute sa présence — la musique devient molle pendant toute la voix off. 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 lit conserve ses basses fréquences et ses aigus, donc il reste musical tout en rendant la voix intelligible.
C'est une relation, pas un effet. Les paramètres vivent sur le lit — 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 vous choisissez ce qui la rend plus silencieuse. Ne mettez jamais un carve sur une piste de voix. Une voix carvée contre elle-même est un bug, pas un choix de mix subtil.
Toutes les voix, pas une seule d'entre elles. sources est une liste, car un
lit musical passe généralement sous une séquence entière — un narrateur, la réponse
d'une interview, un second présentateur. Elles sont additionnées sur l'horloge
propre du lit avant que quoi que ce soit ne soit mesuré (mixCarveSources), donc
une analyse les couvre toutes : les bandes proviennent de toute la parole présente,
et les enveloppes montent partout où elle se produit. Les voix qui ne jouent jamais
pendant que le lit joue sont laissées de côté ; elles ne peuvent pas le masquer.
Un seul bouton. strength va de 0 à 1 et dérive tout : la profondeur de la
coupe, le nombre de bandes, la largeur, à quel point favoriser l'intelligibilité
par rapport à l'énergie vocale brute, à quel point le niveau peut chuter, à quel
point viser en dessous de la voix. Ces six éléments bougent ensemble dans tout
mix réel — un carve doux est une coupe peu profonde dans peu de bandes avec peu
de ducking, un fort est plus profond dans plus de bandes avec plus — donc ils
forment une seule relation écrite une fois, dans carveProfile. La valeur par
défaut est 0.25 — une baisse de 6 dB dans trois bandes avec 6 dB de marge de
niveau, audible sans sonner comme un trou. À 0.5, la baisse atteint 10 dB, ce
qui est le point où un carve commence à être perçu comme un effet plutôt que
comme un espace pour la voix ; au-dessus, c'est un territoire délibéré pour un
lit musical fort sous une voix faible. 0 est spectral uniquement — une bande,
pas d'égalisation de niveau du tout.
Carvez par défaut. Un lit musical jouant sous une narration mérite un carve ; ce n'est pas une étape de polissage à faire s'il y a du temps. Placez les deux pistes, exécutez la commande ci-dessous, écoutez. Sautez-le uniquement lorsqu'il n'y a pas de narration sous laquelle le lit musical doit se placer — une vidéo musicale, un carton titre, un montage coupé sur la piste.
Il suit toujours la voix. Il n'y a pas de mode statique : une profondeur fixe appauvrit le lit musical à chaque pause, et une fois que vous avez entendu les deux, il n'y a aucune raison d'hésiter.