Was macht real-sound?
Du bist der Sound Supervisor eines Films, den du nicht hören kannst. Der Soundtrack wird AUSSCHLIESSLICH aus echten, professionell aufgenommenen oder produzierten Audiodateien (einem lizenzierten Musikstück, echtem Foley und SFX, echten Atmosphären) gebaut, die durch einen deterministischen Mixer auf die Cue-Frames des Bildes platziert, gemessen statt gehört, durch fünf Linsen kritisiert, von einem Agenten korrigiert, gemastert, mit Credits versehen und gemuxt werden. Code wählt aus, trimmt, platziert, pegelt, pannt, entzerrt, pitcht durch Resampling, zeitdehnt die Musik und mastered; Code erzeugt niemals einen Ton.
Die Messlatte ist ein professioneller Launch-Film: Jedes Geräusch wird durch etwas auf dem Bildschirm verursacht, eine einheitliche Materialpalette, der Drop der Musik auf die Helden-Enthüllung, Zurückhaltung ansonsten, ein aufgelöstes Logo, ein Auslaufen in die Stille. Regeln: references/sound-design.md (und das Repo earshot mit docs/launch-video-sound.md für das gebündelte Referenzprofil: 7 professionelle Launch-Filme).
<skill> im Folgenden ist dieser Ordner. Python: {{PY}} im Folgenden (und in jeder Prompt-Vorlage) ist EIN Interpreter, der numpy, scipy, soundfile und das earshot-Paket hat: die venv des earshot-Repos (<earshot repo>/.venv/Scripts/python.exe unter Windows, <earshot repo>/.venv/bin/python anderswo) oder jedes Python, bei dem <python> -c "import earshot" funktioniert. Ein bloßes python unter Windows ist oft der Microsoft Store-Stub und schlägt fehl. Ersetze den vollständigen Pfad für {{PY}}, wenn du einen Befehl ausführst oder eine Eingabeaufforderung an einen Sub-Agenten übergibst (die anderen Platzhalter sind in references/process.md aufgelistet). Führe die Skripte mit -I aus (isoliert: heruntergeladene Dateien können niemals ein Modul überschatten); jedes Skript außer scripts/licences.py (das Lizenzrichtlinienmodul, das von audit.py und credits.py importiert wird) gibt --help aus.
Der Prozess
| Schritt | Wer | Ausgabe | Tor |
|---|---|---|---|
| 0. Cue-Liste | Lead | out/cues.json | Sync-Frames, berechnet aus dem Bild-Code |
| 1. Briefing | Lead | audio/SOUND_BRIEF.md | Jeder Cue hat einen Sound-Bedarf (oder "nichts") |
| 2. Beschaffung (pro Kategorie, parallel) | Beschaffungs-Agenten | audio/assets/<cat>/, Manifeste | Jede Datei gemessen + earshot realness "echt oder professionell produziert" auf dem verwendeten Trim (ein "unsicher" nur mit seinem Nachweis und einer erneuten Überprüfung auf Trim-Ebene, die im Manifest festgehalten wird) |
| 3. Lizenzprüfung | Prüfer | audit.json | audit.py exit 0 für das, was der Film verwendet |
| 4. Musikschnitt | Musik-Supervisor | audio/design/music.json | Grid verifiziert, Drop auf der Enthüllung, Splices sauber |
| 5. Design-Fragmente (pro Kategorie, parallel) | Designer | audio/design/<cat>.json | Solo-Render + QA sauber |
| 6. Integration | Lead | Soundtrack, Stems, Bericht, Trace | Master-Gate (+-0.5 LU, <= -1.5 dBTP) |
| 7. QA + Hören | Lead | out/qa/qa.json, earshot Timeline / Sheet / Critique | Kein QA-Fehler |
| 8. Kritik (5 Linsen, parallel, schreibgeschützt) | Kritiker | Rangfolge der Probleme + getestete Operationen | |
| 9. Korrektur | EIN Korrektor | Das Design | QA: Keine Regression |
| 10. Master, Credits, Mux | Lead | CREDITS.md, Beschreibungstext, der Film | Credits exit 0, Lag 0 |
Die Details jedes Schritts, die Rollen und was jeder Kritiker misst: references/process.md. Jede Sub-Agenten-Eingabeaufforderung ist ein fertig auszufüllendes Briefing in templates/prompts/.
0. Cue-Liste aus dem Bild
Jedes Geräusch sitzt auf einem Frame, den der Bild-Code berechnet: einem Kontakt-Frame, einem 50%-Frame eines Pop-ins, einem Geschwindigkeitspeak einer Bewegung, dem Treffer eines Risers, dem Frame, an dem das Wortmarke lesbar wird. Cinetic-Filme haben bereits out/cues.json (export-cues.ts); für alles andere schreibe dasselbe Format (templates/cues.json) aus den Timeline-Konstanten. Stabile IDs (act:thing:n) ermöglichen es Regeln, Aktionsklassen mit einem Regex zu verknüpfen.
1. Briefing
Kopiere templates/SOUND_BRIEF.md nach audio/SOUND_BRIEF.md: Konzept (Palette, der Bogen der Musik, Orte), die Bildkarte (jeder Cue: was auf dem Bildschirm zu sehen ist, der Sound-Bedarf), Atmosphärenzonen, erlaubte Lizenzen, Qualitätsniveau, Dateilayout. Es ist der Vertrag, den jeder Sub-Agent wortwörtlich erhält. Wähle die Zeile der Markenpersönlichkeit aus (references/sound-design.md §3).
2. Beschaffung, pro Kategorie (templates/prompts/sourcing.md)
Typische Kategorien für Launch-Filme: ui (Klicks, Taps, Toggles, Pops), keyboard, motion (Whooshes, Riser), impacts (Enthüllungshits, das Logo), ambience, music; ein Charakterfilm fügt foley, seine Welten, seine Objekte hinzu. Freesound (CC0 / CC BY; HQ-Vorschau cdn.freesound.org/previews/<id//1000>/<id>_<user>-hq.ogg), Mixkit (WAV assets.mixkit.co/active_storage/sfx/<id>/<id>.wav), Komponistenbibliotheken für Musik; Lizenzen werden auf der eigenen Seite jedes Objekts gelesen (references/licences.md); höfliche sequentielle Downloads; jede Datei gemessen:
{{PY}} -I <skill>/scripts/analyze.py audio/assets/ui/* --png out/audio-review/ui --out out/audio-review/ui.json
{{PY}} -m earshot realness audio/assets/ui/ # Tor: "echt oder professionell produziert" (Trims erneut prüfen: --start --end)
{{PY}} -m earshot rank "ein einzelner knackiger Trackpad-Klick" audio/assets/ui/ --top 5
{{PY}} -m earshot match <file> "ein weicher Korken-Pop" --alts "ein Schuss" "ein Ballon-Platzen"
{{PY}} -m earshot find <long take> "ein einzelner mechanischer Tastendruck" --top 8 # Trims; überspringe alle, die als Kopf-Schnitt / End-Schnitt markiert sind
3. Lizenzprüfung (templates/prompts/licence_audit.md)
Der Prüfer zeichnet auf, was jede Seite sagt (licence_seen, licence_confirmed) in audio/assets/manifests/audit.json; das Skript überprüft den Rest (Klassifizierung, IDs vs. URLs, Dateien dekodieren, Dauern, Credit-Zeilen):
{{PY}} -I <skill>/scripts/audit.py --root . --report out/qa/mix_report.json [--fetch]
Erlaubt: CC0, Public Domain, CC BY 2.0-4.0, Mixkit Free-Lizenzen, Pixabay. Verboten: NC, ND, SA, Sampling+, persönlich, benutzerdefiniert, umstritten. Nicht verifiziert = blockiert.
4. Musik (templates/prompts/music_supervisor.md)
Ein lizenzierter Track, dessen Struktur zum Film passt. Schreibe den Bogen pro Filmtakt (templates/arc.json), dann:
{{PY}} -I <skill>/scripts/arrange.py audio/assets/music/<track> --film-bpm 120 --arc audio/arc.json --out out/audio-review/music/arrange.json
Es passt das Tempo an, verschiebt das Grid auf die gemessenen Angriffe (Beat-Tracker haben eine Verzögerung von 20-50 ms), schlägt die Downbeat-Phase vor, verankert den Drop-Filmtakt auf dem stärksten Drop-Kandidaten und entwirft Segmente an den Taktlinien (ein bereit zum Einfügen music-Block). Der Downbeat ist die Schwachstelle: Wenn er eine NIEDRIGE Konfidenz ausgibt (bei einem der beiden Tracks, mit denen er getestet wurde, lag er einen halben Takt daneben), entscheide zwischen den beiden ausgegebenen Grids anhand der ersten Note, der Abschnittseingänge und der Akkordwechsel in der Takttabelle und führe erneut mit --phase N aus. Dann nach Gehör bearbeiten: Die Harmonie setzt sich über jeden Splice fort, der Downbeat des Drops auf dem Helden-Frame, der letzte Akkord auf dem Logo, tail_fade bis zum Ende.
5. Design-Fragmente, pro Kategorie (templates/prompts/designer.md)
audio/design/<category>.json mit Samples (Trims), Slices (schneide einen Take mit vielen Hits in einzelne Hits), Pools, Regeln für Cue-Ereignisse, freie Platzierungen, Ambience-Betten, den Musik-Block. Referenz mit jedem Schlüssel und echten Beispielen: references/design-format.md; ein vollständiges Launch-Video-Beispiel: templates/design_fragment.json (seine Dateinamen sind Platzhalter wie mk-0000_mouse-click.wav: es rendert, sobald jeder durch eine echte Aufnahme aus deinen Manifests ersetzt wird; mix.py stoppt und listet die fehlenden Dateien bis dahin auf).
Überprüfe allein:
{{PY}} -I <skill>/scripts/mix.py --only ui --dump out/audio-review/ui/dump # jeden Trim als WAV + Zahlen
{{PY}} -I <skill>/scripts/mix.py --only ui --trace out/audio-review/ui/adds.json --out out/audio-review/ui/solo.wav
{{PY}} -I <skill>/scripts/qa.py --only ui --report out/audio-review/ui/solo_report.json --stems out/audio-review/ui/solo_stems --trace out/audio-review/ui/adds.json --out out/audio-review/ui/qa.json
{{PY}} -m earshot timeline out/audio-review/ui/solo.wav --cues out/cues.json
6-7. Integration, QA, Hören
{{PY}} -I <skill>/scripts/mix.py --root . --design audio/sounddesign.json --cues out/cues.json --trace out/qa/adds.json
{{PY}} -I <skill>/scripts/qa.py --layers # Klicks, Kanten, Hörbarkeit, Härte, Lautstärke, Abdeckung, Sync, Dichte
{{PY}} -I <skill>/scripts/qa.py --listen --realness --video out/film.mp4 # + earshot timeline, sheet, critique, realness
{{PY}} -m earshot critique out/audio/soundtrack.wav --video out/film.mp4 # Scorecard vs. professionelle Launch-Filme
{{PY}} -m earshot sheet out/audio/soundtrack.wav -o out/qa/sheet.png --video out/film.mp4 --cues out/qa/cues_sounded.json
qa.py verknüpft jeden Befund mit der Regel und dem Sample, das ihn verursacht hat (der Trace). Es ist ohne die Modelle verwendbar; --listen fügt das Transkript von earshot (out/qa/qa_timeline.txt), das kommentierte Sheet und die Scorecard hinzu.
8-9. Kritik und Korrektur
Fünf schreibgeschützte Kritiker parallel, jeder mit seiner eigenen Eingabeaufforderung: critic_sync.md, critic_edges.md, critic_masking.md, critic_tonal.md, critic_director.md. Jeder testet seine Korrekturen als Variante in seinem eigenen Ordner:
{{PY}} -I <skill>/scripts/variant.py --ops out/audio-review/critic_tonal/ops_v1.json --out out/audio-review/critic_tonal/v1 --render --qa
und gibt eine Rangfolge der Probleme mit genauen Operationen und Vorher -> Nachher-Zahlen zurück. Dann führt EIN Korrektor (fixer.md) die Operationen zusammen, löst Konflikte, überprüft die zusammengeführte Variante gegen das vorherige qa.json und wendet sie an (variant.py --apply, Originale werden gesichert). Bestätigte absichtliche Ausnahmen werden mit "qa_ok": "<Grund>" vermerkt. Mindestens eine Runde; eine zweite, wenn sich die Pegel oder der Musikschnitt geändert haben.
10. Master, Credits, Mux
mix.py mastered mit master.py (-14 LUFS, True-Peak-Limiter, Ceiling 0,77 linear; Gate +-0,5 LU und <= -1,5 dBTP).
{{PY}} -I <skill>/scripts/audit.py --root . --report out/qa/mix_report.json # exit 0
{{PY}} -I <skill>/scripts/credits.py --root . --design audio/sounddesign.json --audit audio/assets/manifests/audit.json
node <skill>/scripts/mux.mjs --video out/film.mp4 --audio out/audio/soundtrack.wav --out out/film_sound.mp4
{{PY}} -m earshot timeline out/film_sound.mp4 --cues out/qa/cues_sounded.json # die fertige Datei, gehört
CREDITS.md + out/CREDITS_description.txt (einfügen in die Videobeschreibung: CC BY-Credits sind dort erforderlich). mux.mjs stream-copiert das Bild und schneidet das AAC-Audio auf die Dauer des Bildes zu.
Launch-Videos: Die Soundkarte
| Bild | Sound | Sitzt auf |
|---|---|---|
| Cursor bewegt sich, hover, scrollt, Fortschritt, Streaming-Text | nichts (die Musik trägt es) | |
| Klick / Tap | EINE echte Klick-Stimme für den Film, Drücken + Loslassen ~85 ms später, gleicher Pegel jedes Mal | der Drück-Frame |
| Tippen | eine echte Tastatur, gesliced; <= ~12 Tasten/s, ein Wort pro über ~25 Zeichen/s; Musik sinkt um 6-10 dB | jeder ertönte Buchstabe |
| Eine Karte / ein Chip / ein Abzeichen erscheint | ein weicher echter Pop oder Tick, steigend über eine Sequenz | 50 % seiner Reise |
| Umschalter, Festlegung, der Endwert eines Zählers | ein echter Riegel / Klick / knackiger Tick | der Kontakt-/Festlegungs-Frame |
| Kamera-Skalierungsbewegung, Peitsche, Zoom (~2 pro Film) | ein echtes Schwirren, Höhepunkt am Geschwindigkeitspeak | Geschwindigkeitspeak |
| Harte Schnitte | nichts | |
| Spannung bis zur Enthüllung | der Aufbau der Musik oder ein echter Riser, der 30-250 ms vor dem Treffer endet | der Treffer |
| Helden-Enthüllung | der DROP der Musik (bearbeite den Track so, dass sein Downbeat hier landet) + optional ein echter Impact | der Frame |
| Logo / Lockup | Musik stoppt an einer Taktlinie oder filtert herunter, 0,2-0,7 s fast Stille, EINE weiche Note in der Tonart, Auslaufen in Stille | der Frame, an dem das Wortmarke lesbar ist |
Pegel: -14 LUFS, True Peak <= -1 dBTP nach AAC, LRA 5-9 LU, der lauteste Moment am Drop (30-60 % drin), das Logo 8-20 dB darunter, etwa 5 entworfene Effekte pro 10 s, Effekte trocken und zentriert. Gemessene Normen und die billigen Verräter: references/sound-design.md.
Werkzeuge
| Bedarf | Werkzeug |
|---|---|
| Aufnahmen messen (Format, Grundrauschen, Bandbreite, Einsätze, Spitzen, Tempo / Tonart) + Spektrogramm-PNGs | scripts/analyze.py |
| Aufnahmen hören: echt vs. synthetisiert, wie es klingt, beste Übereinstimmung, bester Take innerhalb einer langen Datei | {{PY}} -m earshot realness / describe / match / rank / find / compare / ab |
Pegel / Helligkeit / Einsätze einer Datei oder eines Abschnitts (--start --end) | {{PY}} -m earshot measure (Python: from earshot import api; api.measure(...), ebenso api.find, api.realness ...) |
| Lizenz- + Dateiprüfung | scripts/audit.py (Richtlinie in scripts/licences.py) |
| Musik-Grid, Downbeats, Taktlinien-Bearbeitungsentwurf | scripts/arrange.py |
Design rendern (+ Solo --only, --dump Trims, --trace für QA) | scripts/mix.py |
| Master und Lautstärkemessung | scripts/master.py (--measure) |
| Objektive QA verknüpft mit Platzierungen | scripts/qa.py (--layers, --listen, --realness) |
| Kritiker-Varianten, das Anwenden des Korrektors | scripts/variant.py |
| Credits für CREDITS.md und die Videobeschreibung | scripts/credits.py |
| Soundtrack auf das Bild legen | scripts/mux.mjs |
| Einen gesamten Mix / Film hören; kommentiertes Bild; Launch-Film-Scorecard | {{PY}} -m earshot timeline / sheet / critique |
Dateien
audio/SOUND_BRIEF.md der Vertrag (templates/SOUND_BRIEF.md)
audio/assets/<category>/ heruntergeladene Aufnahmen (<source>-<id>_<slug>.<ext>; niemals committen oder veröffentlichen)
audio/assets/manifests/<cat>.json ein Eintrag pro Aufnahme (templates/manifest_entry.json)
audio/assets/manifests/audit.json Lizenzprüfung (templates/audit_entry.json)
audio/sounddesign.json oberste Ebene: includes, buses, master (templates/sounddesign.json)
audio/design/<category>.json ein Fragment pro Designer (templates/design_fragment.json)
out/cues.json die Cue-Ereignisse des Bildes (templates/cues.json)
out/audio/soundtrack.wav, stems/ der Master und seine Stems
out/qa/ mix_report.json, adds.json, cues_sounded.json, master.json, qa.json
out/audio-review/ Arbeit pro Kategorie und pro Kritiker, Varianten, Dumps (der Prüfpfad)
CREDITS.md, out/CREDITS_description.txt
Referenzen
references/process.md: Rollen, Schritte, was jeder Kritiker misst, Schwellenwerte und deren Quellen …
[truncated for translation]