/minara-music — Musik + Soundeffekte aus dem Skript generieren
Wandle das Sekunden-Skript des Videos in ein Musik-Cue-Sheet (cues.json) um und synthetisiere dann BGM und bildsynchronisierte Soundeffekte lokal. Die Synthese erfolgt rein mit numpy und die Ausgabe ist deterministisch (gleiche Cues + Seed erzeugen immer das gleiche Audio). Es werden keine externen Dienste aufgerufen und es entstehen keine Kosten.
Quelle: Der Scoring-Ansatz aus dem Minara V2 Launch-Film, generalisiert in ein wiederverwendbares Skript; examples/v2-launch.json ist das Cue-Sheet dieses Films.
Workflow (in dieser Reihenfolge)
- Skript lesen: Das Sekunden-Skript aus dem Minara-Video (oder dem Storyboard / Voiceover-Timing-Blatt) holen. Wenn das Skript Spalten für "Sound-Atmosphäre" oder "Musik" hat, diesen folgen; wenn nicht, die Stimmung des Bildes beurteilen.
- Cue-Sheet schreiben: Im
audio-src/cues.jsondes Projekts folgendes notieren:duration(= finale Videolänge),bpm(Standard 120),key(StandardA minor; für helle/feierliche Stücke kannC majorverwendet werden),seed.sections: Das Skript in Musikabschnitte unterteilen, einenenergy-Wert pro Abschnitt auswählen und mitnotedas passende Bild beschreiben (zur einfachen Querverweisung).sfx: Jede sichtbare Aktion im Skript (Tap, Tippen, Auftrag erledigt, Pop-up-Benachrichtigung, Übergang, Schloss-Landung) bekommt einen Soundeffekt, zeitlich auf die Sekunde im Skript abgestimmt.
- Dem Operator das Blatt zuerst zeigen; noch nicht rendern: In Markdown-Tabellen "Zeitraum / Energie / passendes Bild" und "SFX-Zeit / Typ / passende Aktion" auflisten und auf OK warten bevor gerendert wird. Der Operator bearbeitet das Blatt, nicht den Code.
- Rendern:
python3 ~/.claude/skills/minara-music/scripts/make_music.py <projekt>/audio-src/cues.json -o <projekt>/assets [--vo <projekt>/assets/vo.wav] - Selbstkontrolle: Das Skript gibt jeden Abschnitt aus; dann die Lautstärke pro Abschnitt messen, um zu bestätigen, dass der Höhepunkt am lautesten ist, Breakdown/Outro deutlich abfallen und das Ducking funktioniert. Bei Hörproblemen (zu voll, ein Soundeffekt stiehlt die Aufmerksamkeit)
level/gainanpassen und erneut rendern; jeder Render-Vorgang dauert ein paar Sekunden. - Ausliefern: Den Pfad zu
bgm.wav(oderbgm-duck.wav) angeben undopen -Rverwenden, umpreview-mix.wavhervorzuheben, damit zugehört werden kann. In HyperFrames als Audiospur hinzufügen, mit dem Voiceover auf einer separaten Spur.
Ausgabe
| Datei | Inhalt |
|---|---|
bgm.wav | Musik + Soundeffekte, 48 kHz Stereo, -1 dBFS Peak, 0,4 s Einblendung am Anfang und 3,2 s Ausblendung am Ende |
bgm-duck.wav | Wird generiert, wenn es ein Voiceover gibt: Musik wird um duck_db (Standard -8 dB) abgesenkt, wo Sprache vorkommt; Soundeffekte werden nicht abgesenkt |
preview-mix.wav | Wird generiert, wenn es ein Voiceover gibt: Musik + Voiceover gemischt, nur zum Anhören, nicht für das finale Video |
Energiestufen (energy section types)
| energy | Sound | Verwendung für |
|---|---|---|
silent | Keine Musik | Pausen, die absolute Stille benötigen |
intro | Tiefer Drone + weiches Pad | Opening, Logo, Datenkonvergenz |
light | Pad + leichtes Arpeggio + spärlicher Beat | Mobile Interaktionen, leichte Feature-Demos |
build | Fügt Bass und einen Kick auf jedem Beat hinzu, automatischer Riser am Ende des Abschnitts | Allmählicher Aufbau, der zu einem Schlüsselmoment führt |
full | Volles Schlagzeug + Clap + Bass + Arpeggio | Durchgehende Präsentation von Kernfunktionen (Backtesting, Go-Live, Automatisierung) |
breakdown | Entfernt Drums und Bass, lässt nur Pad und ein weiches Arpeggio; der Kick kehrt im letzten Takt zurück | Szenenwechsel, Abschnitte über Sicherheit/Datenschutz, die "durchatmen" müssen |
climax | Am vollsten: volles Schlagzeug + Lead-Melodie + Crash am Abschnittsbeginn; fügt automatisch einen Riser hinzu, wenn der vorherige Abschnitt nicht build ist | Produktname / Launch-Claim erscheint |
outro | Löst sich auf dem Tonika-Akkord + Markenglocke auf und blendet mit dem gesamten Mix aus | Endkarte, CTA |
Jeder Abschnitt kann "level": 0.5–1.3 annehmen, um seine Lautstärke fein abzustimmen. Akkorde folgen globalen Akkordfolgen (moll i–VI–III–VII, dur I–V–vi–IV), sodass sie nicht über Abschnittsgrenzen hinweg brechen.
Soundeffekt-Typen (sfx)
| Typ | Sound | Typische Aktion | Optionale Parameter |
|---|---|---|---|
tap | Kurzer Klick | Button-Tap, Auswahl | gain |
typing | Durchgehende Tippgeräusche | Tippen in ein Eingabefeld | chars, cps (Zeichen/Sekunde, passend zur Bildschirmtippgeschwindigkeit) |
success | Zwei aufsteigende Glockentöne | Auftrag erledigt, Strategie läuft | gain |
notify | Dreiton-Alarm | Pop-up-Benachrichtigung oder Erinnerung | gain |
bell | Einzelner Glockenton | Avatar/Logo erscheint | note (MIDI, Standard 81) |
blips | Kurze, aufsteigende Töne | Backtest-Fortschritt, Daten laden | count, step (Sekunden), note |
sparkle | Schimmernde Körner + rauschiger Atem | Partikel konvergieren, Opening | dur |
riser | Aufsteigendes Rauschen | Manuell hinzugefügter Übergangsaufbau | dur |
whoosh | Rückwärtssweep | Fenster schließen, Push/Pull-Übergang | dur |
thud | Tiefer Einschlagton | Schloss, Bestätigung, schwere Landung | gain |
crash | Becken | Extra Akzent | gain |
Jeder Soundeffekt kann gain annehmen, um seine Lautstärke anzupassen.
Regeln
- Soundeffekte folgen nur sichtbaren Aktionen: Wenn es keine passende Aktion auf dem Bildschirm gibt, wird kein Soundeffekt hinzugefügt – das gleiche Prinzip wie "füge keinen Text hinzu, ohne Grund".
- Timings aus dem Skript kopieren; nicht schätzen: Der SFX-
tverwendet die tatsächlichen Sekunden aus dem Sekunden-Skript / der Animations-Zeitleiste;cpsfür Tippen verwendet die Tippgeschwindigkeit in der Animation. - Wenn sich Länge oder Reihenfolge des Skripts ändern, zuerst
cues.jsonaktualisieren und neu rendern; das Audio nicht manuell strecken. - Keine externen KI-Musikdienste oder aus dem Web heruntergeladene Tracks verwenden; wenn kommerziell lizenzierte Musik benötigt wird, stellt der Operator die Datei bereit.