Bande-son
Écrire le son de ce film
Le son d'un film est écrit pour ce film : ses propres instruments, son propre rythme et sa propre harmonie en Web Audio, à partir de rien, dans window.SCORE = ac => { … } (oscillateurs, bruit, filtres, enveloppes, délais : tout ce que le morceau demande). Les batteries, un groove ou un lit de boîte à musique sont écrits de la même manière, pour ce film : aucun film ne devrait sonner pareil car ils partagent un modèle. templates/groove.js et templates/score.js sont deux partitions prêtes à l'emploi, utilisées uniquement lorsque l'utilisateur les demande ; chaque fichier documente ses options.
render.mjs (de la compétence javascript-animation) rend window.SCORE hors ligne avec OfflineAudioContext, écrit <out>.wav et le multiplexe dans le MP4 ; l'aperçu en direct de la page joue la même partition lorsqu'on clique.
Ne demandez pas à l'utilisateur de choisir une source musicale à l'avance. À la livraison, mentionnez en une ligne que la musique générée par IA ou leur propre piste fonctionne également.
Comment la musique suit l'image
- Table des tempos. Chaque scène obtient un nombre entier de mesures (le tempo peut varier par scène), de sorte que chaque coupure tombe sur un temps fort.
- Marquer les coupures avec l'harmonie, pas le volume. Chaque scène rejoint la dominante et la coupure arrive sur la tonique. Un accent fort sur une coupure (basse + carillon lumineux à la fois) est perçu comme un jump scare : les utilisateurs ont signalé qu'un saut de +7 à +10 dB était surprenant ; +3 à +5 dB avec un changement d'accord est perçu comme une coupe propre.
- N'amincissez pas la mesure d'ouverture si c'est la seule mesure avant la première coupure ; une intro clairsemée suivie de la texture complète est elle-même une surprise.
- Pas d'accent supplémentaire sur le temps fort de la coupure. Même l'accent normal du temps fort (basse plus forte + première note) a fait basculer les courts métrages au-dessus de +6 dB, car la mesure précédente décroît. Le changement d'accord suffit.
- Les coupures dures à l'intérieur d'une scène comptent. Mettez-les aussi dans
window.CUES, afin qu'elles obtiennent le même temps fort. - Donnez à l'œil quelque chose sur quoi s'accrocher. La musique legato sans percussion n'a pas d'accents sur lesquels les coupures peuvent atterrir. Avec un groove régulier, les accents font partie du rythme et ne surprennent pas (la vérification compare avec les dernières secondes, pas avec un moment isolé et silencieux).
- Introduisez les couches une ou deux par mesure. Kick et basse entrant ensemble après une intro calme ont mesuré +11 dB (surprise) ; décalés d'une mesure, +3,5 dB.
- Utilisez un break. Couper tout en silence pendant une mesure avant le payoff est le temps le plus fort d'un court métrage.
sync-checkaccepte une coupure dans le silence comme étant sur le temps.
Autres sources (uniquement sur demande)
- Musique générée par IA (par exemple Lyria via OpenRouter) : voir
references/ai-music.md. - La propre piste de l'utilisateur : multiplexez-la avec ffmpeg.
Avec une musique que vous ne contrôlez pas, inversez la direction : l'image suit la musique. Rendu, multiplexage, exécution de la vérification, puis déplacement des limites de scène dans la table SCENES de la page selon les décalages rapportés, et nouveau rendu. C'est peu coûteux car chaque fonction de scène reçoit un temps local (0 à son propre début), comme le starter est écrit : déplacer une limite ne touche jamais le code de la scène.
Toujours : vérifier
node scripts/sync-check.mjs piece.mp4 --cues-file piece.cues.json # vérifier les CUES déclarées (recommandé)
node scripts/sync-check.mjs piece.mp4 # alternative : détecter les coupures dans l'image (les mouvements rapides de caméra peuvent être lus comme des coupures)
Pour chaque événement, il affiche le décalage par rapport à l'attaque audio forte la plus proche et le saut de volume dans celle-ci. Il échoue sur OFF-BEAT (plus de ±100 ms, ~3 images) ou STARTLE (plus de +6 dB par rapport à la seconde précédente). La seconde d'ouverture et le fondu final sont ignorés (pas de « avant » pour comparer ; un fondu de sortie n'est pas une coupure). « Fort » signifie proéminent parmi les attaques dans les ±2 s, de sorte que les accents dans les passages calmes comptent toujours ; une coupure dans le silence est considérée comme atterrissant ; la musique qui revient après un break est comparée au niveau typique des 4 dernières secondes. Une vidéo sans flux audio est signalée comme telle. Mettez dans window.CUES chaque coupure ainsi que tout impact dans la scène que vous souhaitez vérifier (une coupure dure à l'intérieur d'un plan, l'impact d'un gag). Corrigez et réexécutez jusqu'à ce que cela passe, ou jusqu'à ce que chaque STARTLE restant soit un sting délibéré que vous pouvez nommer (un impact comique est censé surprendre ; une coupure de berceuse ne l'est pas).
Limites
Synthétisé en code : boîte à musique, pincements de piano, nappes, cloches, percussions douces sont acceptables. Les voix réalistes, les orchestres et la production de genre ne le sont pas ; utilisez la musique IA ou une piste réelle pour ceux-ci.