Que fait real-sound ?
Vous êtes le superviseur sonore d'un film que vous ne pouvez pas entendre. La bande-son est construite UNIQUEMENT à partir d'audio réel, enregistré ou produit professionnellement (un morceau de musique sous licence, des bruitages et SFX réels, des ambiances réelles), placé sur les images de repère du film par un mixeur déterministe, mesuré plutôt qu'écouté, critiqué à travers cinq lentilles, corrigé par un agent, masterisé, crédité et multiplexé. Le code sélectionne, coupe, place, nivelle, panoramique, égalise, modifie la hauteur par rééchantillonnage, étire temporellement la musique et masterise ; le code ne génère jamais un son.
La référence est un film de lancement professionnel : chaque son causé par quelque chose à l'écran, une palette de matériaux, le drop de la musique sur la révélation du héros, de la retenue partout ailleurs, un logo résolu, une queue dans le silence. Règles :
references/sound-design.md (et le dépôt earshot docs/launch-video-sound.md pour le profil de référence groupé : 7 films de lancement professionnels).
<skill> ci-dessous est ce dossier. Python : {{PY}} ci-dessous (et dans chaque modèle d'invite) est UN interpréteur qui a numpy, scipy, soundfile et le package earshot : l'environnement virtuel du dépôt earshot (<repo earshot>/.venv/Scripts/python.exe sur Windows, <repo earshot>/.venv/bin/python ailleurs), ou tout Python où <python> -c "import earshot" fonctionne. python nu sur Windows est souvent le stub du Microsoft Store et échoue. Remplacez le chemin complet pour {{PY}} lorsque vous exécutez une commande ou passez une invite à un sous-agent (les autres espaces réservés sont listés dans references/process.md). Exécutez les scripts avec -I (isolé : les fichiers téléchargés ne peuvent jamais masquer un module) ; chaque script sauf scripts/licences.py (le module de politique de licence que audit.py et credits.py importent) imprime --help.
Le processus
| étape | qui | sortie | porte de validation |
|---|---|---|---|
| 0. liste de repères | chef | out/cues.json | images de synchronisation calculées à partir du code de l'image |
| 1. brief | chef | audio/SOUND_BRIEF.md | chaque repère a un besoin sonore (ou "rien") |
| 2. recherche (par catégorie, en parallèle) | agents de recherche | audio/assets/<cat>/, manifestes | chaque fichier mesuré + earshot realness "réel ou produit professionnellement" sur la coupe utilisée (un "incertain" uniquement avec ses preuves et une revérification au niveau de la coupe écrite dans le manifeste) |
| 3. audit de licence | auditeur | audit.json | audit.py exit 0 pour ce que le film utilise |
| 4. édition musicale | superviseur musical | audio/design/music.json | grille vérifiée, drop sur la révélation, coupures propres |
| 5. fragments de design (par catégorie, en parallèle) | designers | audio/design/<cat>.json | rendu solo + QA propre |
| 6. intégration | chef | bande-son, stems, rapport, trace | porte de mastering (+-0.5 LU, <= -1.5 dBTP) |
| 7. QA + écoute | chef | out/qa/qa.json, timeline / feuille / critique earshot | aucun échec QA |
| 8. critique (5 lentilles, en parallèle, lecture seule) | critiques | problèmes classés + opérations testées | |
| 9. correction | UN seul correcteur | le design | QA : pas de régression |
| 10. master, crédits, mux | chef | CREDITS.md, texte de description, le film | crédits exit 0, lag 0 |
Le détail de chaque étape, les rôles et ce que chaque critique mesure : references/process.md. Chaque invite de sous-agent est un brief prêt à remplir dans templates/prompts/.
0. Liste de repères à partir de l'image
Chaque son repose sur une image que le code de l'image calcule : une image de contact, l'image à 50 % d'un pop-in, le pic de vélocité d'un mouvement, le coup d'un riser, l'image où le mot-clé devient lisible. Les films cinétiques ont déjà out/cues.json (export-cues.ts) ; pour tout le reste, écrivez le même format (templates/cues.json) à partir des constantes de la timeline. Des identifiants stables (act:chose:n) permettent aux règles de faire correspondre des classes d'action avec une regex.
1. Brief
Copiez templates/SOUND_BRIEF.md vers audio/SOUND_BRIEF.md : concept (palette, l'arc de la musique, lieux), la carte de l'image (chaque repère : ce qui est à l'écran, le besoin sonore), zones d'ambiance, licences autorisées, barre de qualité, disposition des fichiers. C'est le contrat que chaque sous-agent reçoit textuellement. Choisissez la ligne de personnalité de la marque (references/sound-design.md §3).
2. Recherche, par catégorie (templates/prompts/sourcing.md)
Catégories typiques d'un film de lancement : ui (clics, tapotements, toggles, pops), keyboard, motion (whooshes, risers), impacts (coups de révélation, le logo), ambience, music ; un film avec personnages ajoute foley, ses mondes, ses objets.
Freesound (CC0 / CC BY ; prévisualisation HQ cdn.freesound.org/previews/<id//1000>/<id>_<user>-hq.ogg), Mixkit (WAV assets.mixkit.co/active_storage/sfx/<id>/<id>.wav), bibliothèques de compositeurs pour la musique ; les licences sont lues sur la propre page de chaque élément (references/licences.md) ; téléchargements séquentiels polis ; chaque fichier mesuré :
{{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/ # porte : "réel ou produit professionnellement" (revérifier les coupes : --start --end)
{{PY}} -m earshot rank "un seul clic de trackpad net" audio/assets/ui/ --top 5
{{PY}} -m earshot match <file> "un pop de liège doux" --alts "un coup de feu" "une explosion de ballon"
{{PY}} -m earshot find <long take> "une seule pression de touche mécanique" --top 8 # coupes ; ignorer toute marquée head cut / tail cut
3. Audit de licence (templates/prompts/licence_audit.md)
L'auditeur enregistre ce que chaque page dit (licence_seen, licence_confirmed) dans audio/assets/manifests/audit.json ; le script vérifie le reste (classification, ids vs URLs, fichiers décodent, durées, lignes de crédit) :
{{PY}} -I <skill>/scripts/audit.py --root . --report out/qa/mix_report.json [--fetch]
Autorisé : CC0, domaine public, CC BY 2.0-4.0, licences gratuites Mixkit, Pixabay. Interdit : NC, ND, SA, Sampling+, personnel, personnalisé, contesté. Non vérifié = bloqué.
4. Musique (templates/prompts/music_supervisor.md)
Un morceau sous licence dont la structure correspond au film. Écrivez l'arc par barre de film (templates/arc.json), puis :
{{PY}} -I <skill>/scripts/arrange.py audio/assets/music/<track> --film-bpm 120 --arc audio/arc.json --out out/audio-review/music/arrange.json
Il ajuste le tempo, déplace la grille sur les attaques mesurées (les trackers de tempo ont un retard de 20 à 50 ms), propose la phase de downbeat, ancre le drop de la barre de film sur le candidat de drop le plus fort et rédige des segments aux lignes de barre (un bloc music prêt à coller). Le downbeat est le point faible : lorsqu'il imprime une confiance FAIBLE (sur l'un des deux morceaux testés, il était décalé d'une demi-mesure), décidez entre les deux grilles imprimées à partir de la première note, des entrées de section et des changements d'accords dans le tableau de barres, et relancez avec --phase N. Ensuite, éditez par jugement : l'harmonie continue à travers chaque coupure, le downbeat du drop sur l'image du héros, l'accord final sur le logo, tail_fade jusqu'à la fin.
5. Fragments de design, par catégorie (templates/prompts/designer.md)
audio/design/<category>.json avec des échantillons (coupes), des tranches (couper une prise de nombreux coups en coups uniques), des pools, des règles sur les événements de repère, des placements libres, des lits d'ambiance, le bloc de musique. Référence avec chaque clé et des exemples réels : references/design-format.md ; un exemple complet de vidéo de lancement : templates/design_fragment.json (ses noms de fichiers sont des espaces réservés tels que mk-0000_mouse-click.wav : il se rend une fois que chacun est remplacé par un enregistrement réel de vos manifestes ; mix.py s'arrête et liste les fichiers manquants jusqu'à ce moment).
Vérifiez seul :
{{PY}} -I <skill>/scripts/mix.py --only ui --dump out/audio-review/ui/dump # chaque coupe en WAV + nombres
{{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. Intégration, QA, écoute
{{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 # clics, bords, audibilité, dureté, loudness, couverture, sync, densité
{{PY}} -I <skill>/scripts/qa.py --listen --realness --video out/film.mp4 # + timeline earshot, feuille, critique, realness
{{PY}} -m earshot critique out/audio/soundtrack.wav --video out/film.mp4 # scorecard vs films de lancement professionnels
{{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 lie chaque constatation à la règle et à l'échantillon qui l'ont causée (la trace). Il est utilisable sans les modèles ; --listen ajoute la transcription d'earshot (out/qa/qa_timeline.txt), la feuille annotée et le scorecard.
8-9. Critique et correction
Cinq critiques en lecture seule en parallèle, chacun avec son invite : critic_sync.md, critic_edges.md, critic_masking.md, critic_tonal.md, critic_director.md. Chacun teste ses corrections comme une variante dans son propre dossier :
{{PY}} -I <skill>/scripts/variant.py --ops out/audio-review/critic_tonal/ops_v1.json --out out/audio-review/critic_tonal/v1 --render --qa
et retourne les problèmes classés avec les opérations exactes et les nombres avant -> après. Ensuite, UN seul correcteur (fixer.md) fusionne les opérations, résout les conflits, vérifie la variante fusionnée par rapport au qa.json précédent, et l'applique (variant.py --apply, originaux sauvegardés). Accusez réception des exceptions délibérées confirmées avec "qa_ok": "<raison>". Au moins un tour ; un second lorsque les niveaux ou l'édition musicale ont changé.
10. Master, crédits, mux
mix.py masterise avec master.py (-14 LUFS, limiteur de pic vrai, plafond 0.77 linéaire ; porte +-0.5 LU et <= -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 # le fichier fini, entendu
CREDITS.md + out/CREDITS_description.txt (à coller dans la description de la vidéo : les crédits CC BY sont obligatoires là-bas). mux.mjs copie en flux l'image et coupe l'audio AAC à la durée de l'image.
Vidéos de lancement : la carte son
| image | son | repose sur |
|---|---|---|
| curseur se déplace, survole, défile, progression, texte défilant | rien (la musique le porte) | |
| clic / tapotement | UNE voix de clic réel pour le film, appui + relâchement ~85 ms plus tard, même niveau à chaque fois | l'image d'appui |
| frappe | un vrai clavier, tranché ; <= ~12 touches/s, un mot au-dessus de ~25 car/s ; la musique descend de 6-10 dB | chaque caractère sonné |
| une carte / puce / badge apparaît | un vrai pop doux ou tic, montant à travers une série | 50 % de son trajet |
| toggle, verrouillage, valeur finale d'un compteur | un vrai loquet / clic / tic net | l'image de contact / verrouillage |
| mouvement de caméra-scale, coup de fouet, zoom (~2 par film) | un vrai swish, apex sur le pic de vélocité | pic de vélocité |
| coupes franches | rien | |
| tension jusqu'à la révélation | la montée de la musique, ou un vrai riser se terminant 30-250 ms avant le coup | le coup |
| révélation du héros | le DROP de la musique (éditez le morceau pour que son downbeat atterrisse ici) + optionnellement un impact réel | l'image |
| logo / lockup | la musique s'arrête sur une ligne de barre ou se filtre, 0.2-0.7 s de quasi-silence, UNE note douce dans la tonalité, queue jusqu'au silence | l'image où le mot-clé se lit |
Niveaux : -14 LUFS, pic vrai <= -1 dBTP après AAC, LRA 5-9 LU, le moment le plus fort sur le drop (30-60 % dedans), le logo 8-20 dB en dessous, environ 5 effets conçus par 10 s, effets secs et centrés. Normes mesurées et signes révélateurs bon marché : references/sound-design.md.
Outils
| besoin | outil |
|---|---|
| mesurer les enregistrements (format, plancher, bande passante, attaques, pics, tempo / tonalité) + PNG de spectrogramme | scripts/analyze.py |
| entendre les enregistrements : réel vs synthétisé, à quoi ça ressemble, meilleure correspondance, meilleure prise dans un fichier long | {{PY}} -m earshot realness / describe / match / rank / find / compare / ab |
niveaux / luminosité / attaques d'un fichier ou d'un extrait (--start --end) | {{PY}} -m earshot measure (Python : from earshot import api; api.measure(...), de même api.find, api.realness ...) |
| audit de licence + fichier | scripts/audit.py (politique dans scripts/licences.py) |
| grille musicale, downbeats, ébauche d'édition aux lignes de barre | scripts/arrange.py |
rendre le design (+ solo --only, --dump des coupes, --trace pour QA) | scripts/mix.py |
| master et mesure de loudness | scripts/master.py (--measure) |
| QA objective liée aux placements | scripts/qa.py (--layers, --listen, --realness) |
| variantes de critique, application du correcteur | scripts/variant.py |
| crédits pour CREDITS.md et la description vidéo | scripts/credits.py |
| mettre la bande-son sur l'image | scripts/mux.mjs |
| écouter un mix complet / film ; image annotée ; scorecard de film de lancement | {{PY}} -m earshot timeline / sheet / critique |
Fichiers
audio/SOUND_BRIEF.md le contrat (templates/SOUND_BRIEF.md)
audio/assets/<category>/ enregistrements téléchargés (<source>-<id>_<slug>.<ext> ; ne jamais commit ou publier)
audio/assets/manifests/<cat>.json une entrée par enregistrement (templates/manifest_entry.json)
audio/assets/manifests/audit.json audit de licence (templates/audit_entry.json)
audio/sounddesign.json niveau supérieur : inclut, bus, master (templates/sounddesign.json)
audio/design/<category>.json un fragment par designer (templates/design_fragment.json)
out/cues.json les événements de repère de l'image (templates/cues.json)
out/audio/soundtrack.wav, stems/ le master et ses stems
out/qa/ mix_report.json, adds.json, cues_sounded.json, master.json, qa.json
out/audio-review/ travail par catégorie et par critique, variantes, dumps (la piste d'audit)
CREDITS.md, out/CREDITS_description.txt
Références
references/process.md: rôles, étapes, ce que chaque critique mesure, seuils et leur source