Plugin-Installationen: Befolgen Sie vor Setup- oder Aktualisierungsbefehlen die Plugin-Ausführungsregeln, wenn sich dieser Skill innerhalb eines HyperFrames-Plugins befindet. Eigenständige Installationen behalten die unten stehenden Aktualisierungshinweise bei.
HyperFrames Audio
Ein Mix ist eine Menge von Beziehungen, kein Stapel von Prozessoren. Zwei Spuren, die allein richtig klingen, können zusammen unhörbar sein, und die Lösung ist fast nie „eine leiser drehen“ – es geht darum, herauszufinden, worüber sie streiten, und es derjenigen zu geben, die es braucht. Jedes Werkzeug hier existiert, um eine dieser Beziehungen auszudrücken.
Effekte leben auf dem Element als data-fx-chain, und Vorschau und Rendering verwenden denselben Web-Audio-Graphen – das Studio im Live-Kontext, die Engine im Offline-Kontext innerhalb des Browsers, den sie bereits steuert. Es gibt eine Implementierung jedes Effekts, sodass das, was Sie beim Scrubbing hören, auch geschrieben wird. Sie stimmen nie zweimal ab.
Clip-Timing bleibt /hyperframes-core: Audio-/Video-Trims und Quellenbereiche verwenden data-start, data-duration und data-media-start, und Überblendungen überlappen Clips auf verschiedenen Spuren. Dieser Skill verwaltet platziertes Fade-In/Fade-Out, Überblendungshüllkurven, Spurlautstärke/Spurvolume, Volume- und Effektautomation, Ducking/Voiceover-Carve und die Effektkette. /media-use verwaltet Quellenverwaltung, Generierung und Vorverarbeitung.
Konstantes data-playback-rate (0.1..10) ist render-sicher für Bild und tonhöhenerhaltenen Ton, wenn übereinstimmende Audio-/Video-Elemente dieselbe Zeitsteuerung, denselben Quellen-Offset und dieselbe Rate verwenden. Ein Geschwindigkeitsrampe ist eine rate-Spur in data-automation (siehe docs/reference/speed-ramps); sie gewinnt gegenüber der Konstanten und behält die Tonhöhe in Vorschau und Rendering bei. HyperFrames bietet keine automatische Wellenform-Synchronisation oder Driftkorrektur.
Für kopierbare Schnitt-/Überblendungs-/Zeitsteuerungsrezepte verwenden Sie /hyperframes-core → references/creator-editing-recipes.md.
Drei Attribute tragen alles auf dem Audio-/Video-Element selbst – oder, für die ersten beiden, auf einem <hf-audio-group>-Bus (siehe „Ein Bus für viele Spuren“):
| Attribut | Enthält |
|---|---|
data-fx-chain | die Effekte in Signalreihenfolge |
data-automation | Hüllkurven auf der Lautstärke dieser Spur oder ihren Effektparametern |
data-fx-carve | die eigenen Einstellungen des Carves, sodass es abgeleitet werden kann |
Die ausgelieferten Effektfamilien sind Gain, EQ (Hochpass, Tiefpass, Peak, Shelf), Kompressor, Limiter, Gate, Sättigung, Delay, Reverb, Chorus, Phaser und Bitcrush.
Exaktes JSON für jeden und die Regeln, die eine Spur erfüllen muss: references/attributes.md.
Jeder Effekt mit seinen Parametern, Bereichen und Einheiten: references/fx-registry.md.
So finden Sie heraus, was mit einer Datei falsch ist, die Sie nicht hören können: references/diagnosis.md.
Presets, benannte Jobs und One-Knob-Profile, plus eine Symptom-zu-Fix-Tabelle: references/presets.md – lesen Sie das, bevor Sie von Hand eine Kette bauen, denn eines der Presets oder benannten Jobs nennt das Problem normalerweise bereits.
Wie es zusammenspielt
Zwei Autoren-Oberflächen schreiben diese Attribute; zwei Laufzeitumgebungen lesen sie durch dieselben Builder. Diese gemeinsame Mitte ist der Grund, warum die Vorschau das Rendering vorhersagt.
flowchart TB
voice["Voice-Spur<br/>Mediendatei"]
bed["Musikbett<br/>Mediendatei"]
subgraph AUTHOR["Autoring – die einzigen Dinge, die Attribute schreiben"]
panel["Studio<br/>Voiceover-Carve-Steuerung"]
script["scripts/carve.mjs<br/>erkennt das Paar, standardmäßig dynamisch"]
analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
panel --> analysis
script --> analysis
end
voice --> analysis
bed --> analysis
subgraph ATTRS["Geschrieben auf das Bettelement"]
carveAttr["data-fx-carve<br/>source · strength · dynamic"]
chainAttr["data-fx-chain<br/>peaking xN + gain, getaggt von Carve"]
autoAttr["data-automation<br/>eine Spur pro gecarvtem Parameter"]
end
analysis --> carveAttr
analysis --> chainAttr
analysis --> autoAttr
subgraph SHARED["Eine Implementierung, von beiden gelesen"]
build["audioFxGraph.ts · buildFxChain"]
sched["audioFxAutomation.ts · scheduleChainAutomation"]
end
chainAttr --> build
autoAttr --> sched
build --> preview["Vorschau<br/>live AudioContext<br/>attachElementFxChain"]
sched --> preview
build --> render["Rendering<br/>OfflineAudioContext im Headless-Browser<br/>applyAudioFxChain"]
sched --> render
preview --> heard["was Sie beim Scrubbing hören"]
render --> wav["verarbeitete WAV<br/>+ chainTailSeconds, damit der Mix den Nachhall durchlässt"]
wav --> mix["Engine · audioMixer<br/>Volume-Lane hier in die PCM eingebacken, nicht im Graphen"]
mix --> out["der gerenderte Mix"]
edit["Bearbeiten des Attributs während der Wiedergabe"] -.->|MutationObserver| preview
Die eigenen Einstellungen des Carves werden nie bei der Wiedergabe gelesen – die Kette und die Spuren, die es produziert hat, werden abgespielt. data-fx-carve existiert, damit die Stärke bei einem bestehenden Carve geändert werden kann, anstatt sie aus den Filtern zurückzuschätzen.
In einem gecarvten Bett läuft das Signal zuerst durch die Dips, dann durch den Pegelausgleich, dann durch das, was Sie selbst gebaut haben – weshalb ein von Ihnen hinzugefügter Limiter immer noch als letzte Begrenzung fungiert:
flowchart LR
src["Dekodiertes Bett"] --> p1["peaking<br/>400 Hz"]
p1 --> p2["peaking<br/>1 kHz"]
p2 --> p3["peaking<br/>1,6 kHz"]
p3 --> g["gain<br/>Pegelausgleich"]
g --> hand["Ihre eigenen Effekte<br/>z. B. Limiter"]
hand --> dest["Spurlautstärke, dann Ausgang"]
l1["Lane fx.n1.gain"] -.->|"Hüllkurve des Voice-<br/>Pegels in diesem Band"| p1
l4["Lane fx.n4.gain"] -.->|"wie weit das Bett<br/>insgesamt duckt"| g
Ein statischer Carve ist derselbe Graph mit festen Werten und überhaupt keinen Spuren.
Finden Sie zuerst heraus, was falsch ist
Die folgende Tabelle beginnt mit „es klingt dröhnend“ – was voraussetzt, dass bereits jemand zugehört und das gesagt hat. Wenn Sie eine Datei und „behebe das“ bekommen, haben Sie diesen Satz nicht und können nicht zuhören, also müssen Sie messen. Eine Regel bestimmt alles:
Das absolute Spektrum einer einzelnen unbekannten Stimme kann nicht diagnostiziert werden. Formanten sind ±10 dB, Grundfrequenzen laufen bei 85–255 Hz, und Sätze fallen zum Ende hin um 5–6 dB ab. Jeder einzelne davon liest sich als Defekt, und jeder einzelne davon ist der Sprecher.
Vergleichen Sie also, und vergleichen Sie gegen etwas innerhalb derselben Datei: das saubere Original, falls vorhanden, ansonsten die Pausen – was immer in einer Lücke hörbar ist, ist additiv, und das Spektrum der Lücke ist der Kanal, nicht die Stimme. Der Vergleich mit einem veröffentlichten Durchschnittsspektrum oder einer synthetischen Kontrollstimme funktioniert nicht: Zwei Sprecher unterscheiden sich mehr als die meisten Defekte, und beide falschen Antworten in der Evaluierung, die dieser Anleitung zugrunde liegt, kamen genau daher.
Wenn es kein Original und keine nutzbare Stille gibt, ist ein statischer tonaler Defekt wirklich unterbestimmt. Sagen Sie das und bieten Sie die passenden Messwerte an, anstatt einen auszuwählen und eine Kette darauf zu bauen.
Befehle, Fallstricke und erprobte Rezepte: references/diagnosis.md. Lesen Sie es, bevor Sie eine Datei diagnostizieren, die niemand beschrieben hat.
Beginnen Sie mit dem Symptom
Sobald Sie das Band und die Art kennen, benennen Sie, was mit dem Audio falsch ist. Schlechtes Audio ist meistens eines oder zwei davon, und jedes hat eine ausgelieferte Antwort:
| Es klingt wie | Greifen Sie zu |
|---|---|
| Brummen oder dumpfes Dröhnen darunter | rumble-cut, oder ein highpass bei 80 Hz |
| Dröhnend, brustig | Tame Boominess Job (200 Hz) |
| Gedämpft, hinter Pappe | Reduce Mud Job (250 Hz) |
| Worte schwer verständlich | Add Clarity Job (3 kHz), oder Carven des Bettes |
| Schrill und anstrengend | Soften Harshness Job (3,2 kHz) |
| Manche Worte viel lauter als andere | Evenness auf einem Kompressor, oder Even Out Levels |
| Raumton zwischen den Sätzen | room-gate |
| Stimme und Musik kämpfen | Voiceover-Carve – kein EQ auf einem von beiden |
| Trocken, nirgendwo aufgenommen | room-tight oder room-natural |
| Einfach „Amateur“ | voice-clean, das vier der obigen in Reihenfolge ist |
Vollständiger Katalog, was jedes Preset enthält, das Band-Vokabular und was bewusst NICHT abgedeckt wird (De-Essing, Rauschentfernung, Ton-Match): references/presets.md.
Subtrahieren Sie, bevor Sie hinzufügen, pegeln Sie nach dem Filtern, Beziehungen nach dem Pegeln, Charakter und Begrenzung zuletzt. Jeder Schritt ändert, was der nächste hört – ein Kompressor, der vor einem Hochpass eingestellt wird, verbringt seine Zeit damit, Rumpeln zu jagen.
Greifen Sie nach einer Familie aufgrund des Problems, nicht des Namens
Filter (highpass, lowpass, peaking, lowshelf, highshelf) entscheiden, welche Frequenzen eine Spur belegen darf. Dies ist das erste Werkzeug für zwei kollidierende Quellen, da Kollisionen in Bändern stattfinden: Ein Bett und eine Stimme wollen beide 1–3 kHz, und dies dem Bett zu nehmen, kostet das Bett weit weniger, als das Ganze leiser zu drehen, den Mix kostet. Ein Hochpass auf einer Stimme ist die Standardlösung für Rumpeln; ein Tiefpass verdunkelt oder dämpft absichtlich.
Dynamik (gain, compressor, limiter, gate) entscheidet, wie sich der Pegel einer Spur im Laufe der Zeit verhält. Kompression verringert den Abstand zwischen laut und leise, sodass die leisen Teile angehoben werden können. Ein Limiter ist eine Begrenzung – er formt nichts, er garantiert, dass nichts darüber hinausgeht. Ein Gate entfernt, was unter einer Schwelle liegt, und so werden Raumtöne zwischen Phrasen zum Schweigen gebracht. gain ist eine reine Pegelstufe, und es ist das, was eine Automatisierungsspur reitet, wenn eine Spur aus dem Weg gehen muss.
Nichtlinear (saturate, bitcrush) verändert die Wellenform, wodurch Harmonische hinzugefügt werden, die vorher nicht da waren. Greifen Sie danach, wenn eine Spur Charakter oder Körnung braucht, anstatt Korrektur – und denken Sie daran, es ist generativ: Es macht eine dünne Quelle dichter, nicht sauberer.
Zeit (delay, reverb, chorus, phaser) versetzt eine Spur in einen Raum oder gibt ihr Breite. Diese sind diejenigen, die am leichtesten einen Mix ruinieren, weil ein Nachhall oder eine verstimmte Kopie denselben Raum belegt, den eine Stimme braucht. Verwenden Sie sie auf dem Ding, das hinter etwas anderem sitzen soll, und halten Sie den Nassanteil niedriger, als es isoliert richtig klingt.
Die Kette ist seriell: Jeder Effekt verarbeitet, was der davor produziert hat. Korrigierende Filterung kommt also früh, Charakter in der Mitte und ein Limiter zuletzt, wo er tatsächlich als Begrenzung wirken kann.
Voiceover-Carve
Das Problem, das es löst. Ein Musikbett unter einer Stimme macht die Stimme schwer verständlich. Der Reflex ist, das gesamte Bett zu ducken, was funktioniert und dem Bett all seine Präsenz kostet – die Musik wird für das gesamte Voiceover schwach. Aber die Stimme braucht nicht das gesamte Spektrum. Sie braucht die wenigen Bänder, die sie tatsächlich belegt. Der Carve nimmt nur diese, und das Bett behält seinen Tiefgang und seine Höhen, sodass es immer noch Musik ist, während die Stimme immer noch verständlich ist.
Es ist eine Beziehung, kein Effekt. Die Einstellungen leben auf dem Bett – der Spur, die verarbeitet wird – und sie nennen die Stimmen, auf die gehört wird, genau wie ein Sidechain-Kompressor: Sie wählen die Spur, die leiser wird, und aus, was sie leiser macht. Setzen Sie niemals einen Carve auf eine Voice-Spur. Eine Stimme, die gegen sich selbst gecarvt wird, ist ein Fehler, keine subtile Mix-Entscheidung.
Jede Stimme, nicht nur eine. sources ist eine Liste, weil ein Bett normalerweise unter einer ganzen Sequenz läuft – ein Erzähler, eine Interviewantwort, ein zweiter Moderator. Sie werden auf der eigenen Uhr des Bettes summiert, bevor etwas gemessen wird (mixCarveSources), sodass eine Analyse alle abdeckt: Die Bänder stammen von aller vorhandenen Sprache, und die Hüllkurven steigen, wo immer etwas davon passiert. Stimmen, die nie spielen, während das Bett läuft, werden ausgelassen; sie können es nicht maskieren.
Ein Carve gegen mehr als eine Clip-ID ist falsch. Gruppieren Sie die Clips und carven Sie gegen die Gruppe. Dies ist eine Invariante, kein Tipp. Clips einzeln zu nennen, muss erschöpfend richtig sein und bleibt nur bis zum nächsten Schnitt richtig – ein vierter später hinzugefügter Erzählclip spielt außerhalb des Carve-Bewusstseins, und das Bett duckt nicht leise darunter. Die Gruppe stattdessen zu nennen, löst die Mitgliedschaft zum Analysezeitpunkt auf, sodass ein später zur Gruppe hinzugefügter Clip abgedeckt ist, ohne sources zu berühren:
<!-- die Erzählung gruppieren, dann das Bett gegen die Gruppe carven -->
<audio id="vo-intro" data-audio-group="voiceover" …></audio>
<audio id="vo-mitte" data-audio-group="voiceover" …></audio>
<audio id="vo-outro" data-audio-group="voiceover" …></audio>
<audio id="musik" data-fx-carve='{"enabled":true,"sources":["voiceover"],"strength":0.8}' …></audio>
Eine sources-Liste, die zwei oder mehr einfache Clip-IDs statt einer Gruppe nennt, wird von der Lint-Regel audio_carve_ungrouped_sources abgefangen – sie funktioniert trotzdem, aber es ist die Version, die still verrottet, wenn ein Clip hinzugefügt wird.
Halten Sie die Carve-Gruppe eine Voice-Gruppe: kein Bett, kein SFX, keine Musik. Eine Gruppen-ID in sources wird bei jeder Analyse zu jedem aktuellen Mitglied aufgelöst, sodass die von Ihnen benannte Gruppe später die ist, die Sie bekommen – nicht die Spuren, die gemessen wurden, als sie geschrieben wurde. Zwei Arten, wie das beißt:
- Das Bett in seiner eigenen Quellengruppe. Es wird sich selbst als Stimme übergeben und gegen seinen eigenen Inhalt gecarvt – die Regel „Carven Sie niemals eine Spur gegen sich selbst“ erscheint eine erneute Analyse später.
- Ein SFX- oder Musikclip in der Voice-Gruppe. Es betritt die Sidechain bei der nächsten Analyse, und das Bett beginnt, unter einem „Whoosh“ zu ducken, obwohl der Lauf, der das Attribut geschrieben hat, es nie gemessen hat.
Beide sind in dem Moment unsichtbar, in dem der Carve geschrieben wird: Die Analyse summiert die erkannten Stimmen und durchläuft nie die Gruppenauflösung, sodass der erste Durchgang tatsächlich korrekt ist und nur der nächste falsch ist. Geben Sie also jeder Rolle ihre eigene Gruppe – musik für das Bett, voiceover für die Erzählung, sfx für die Treffer – und halten Sie die in sources benannte Gruppe, die nur Stimmen enthält.
carve.mjs weigert sich, die Gruppenform zu schreiben, wenn es einen der beiden Fälle sieht, zeichnet Clip-IDs auf und sagt
…
[für die Übersetzung gekürzt]