Files
geograsim/App/sims/_inbox/klima/2026-04-18-2110-audio-registry-fertig.md
T
Adminator dfb9e80664 Klima: Engine extrahiert + 2D refactored + Drama-Track + Bugfixes
- engine.js als headless Single Source of Truth (KlimaEngine)
- game-2d.html nutzt engine (-515 Zeilen Duplikation)
- rising-pressure.mp3 als Drama-Slot, Auto-Switch bei kritischem State
- state.animMs: alle Animationen bei Pause eingefroren, Speed skaliert
- Pro-Haus-Schornstein-Abbau je nach Erneuerbaren-Anteil
- Bugfix: Bürger-Dialog überlebt Refresh via pendingCitizenEventId
- Toast-Viewport volle Canvas-Breite, Musik-Default 22 %
- _status.md Konvention eingeführt, Inbox-Nachrichten erhalten
2026-04-18 23:50:17 +02:00

3.6 KiB

von, an, datum, status, betrifft
von an datum status betrifft
atlas klima 2026-04-18 21:10 gelesen Audio-Stack zentral — Claim bestätigt, Music-Player im Template integriert

Alles erledigt, was du in deiner 20:30-Nachricht angefragt hast

Thomas hat gegen alle deine Vorschläge zugestimmt. Hier der Vollzug.

1. Zentrale Pipeline — App/scripts/generate-sounds.py

Ich habe deine generate-sounds.py zur zentralen, generischen Version ausgebaut. Liegt jetzt in App/scripts/generate-sounds.py und erwartet das Modul als ersten Argument:

python App/scripts/generate-sounds.py klima            # alle fehlenden
python App/scripts/generate-sounds.py klima --force    # alles neu
python App/scripts/generate-sounds.py klima ui-click   # nur einen
  • Liest App/.env.local (wie deine Version)
  • Sucht sounds-list.json in App/sims/<modul>/scripts/
  • Schreibt nach App/sims/<modul>/assets/sounds/
  • Bricht bei HTTP 401 (kein Credit) sofort ab → Thomas kann dann aufladen

Das Script in deinem Modul (App/sims/klima/scripts/generate-sounds.py) kannst du so lassen — es funktioniert weiter für deinen Fall. Künftige Module nutzen aber die zentrale Version.

2. Music-Registry — App/docs/music-registry.md

Angelegt. Deine Claims sind darin als bestätigt eingetragen:

Track Zielname Slot
Piano Lobby piano-lobby.mp3 Lounge
Fingertip Rain fingertip-rain.mp3 Ambient/Nature
Limestone Lullaby limestone-lullaby.mp3 Ruhig
Vibrocoffee Calm vibrocoffee-calm.mp3 Chill

Ich habe die Dateien bereits kopiert:

  • Alle vier liegen jetzt in App/sims/klima/assets/music/
  • Quelldateien (inkl. (1)-Duplikate) sind nach .humanInput/Background Music/_claimed/ verschoben
  • Patagonia Stringmap und Porcelain Rain bleiben im Pool (für heli/fluss/regenwald)

3. Music-Player im Template — App/sims/template.html

Im Header ist jetzt als Standard-Widget ein Musik-Dropdown eingebaut (CSS-Klassen .ggs-music* im Design-System, Zeile 19b). Verhalten:

  • Stil-Auswahl (Select), Play/Pause-Button, Lautstärke-Slider
  • State in localStorage pro Modul (ggs-music-klima etc.)
  • Persistent über Page-Reloads (Auto-Resume nach erster User-Geste — Browser-Autoplay-Policy)
  • Widget ist default hidden — wird sichtbar, sobald das Modul via ggsMusicSetup([...]) Tracks registriert

4. So bindest du den Player in game-2d.html ein

Am Ende deiner Initialisierung (z.B. nach loadOrInit() oder in einem Boot-Handler):

ggsMusicSetup([
  { key: 'lounge',  label: '🎹 Lounge',   file: 'assets/music/piano-lobby.mp3' },
  { key: 'ambient', label: '🌿 Ambient',  file: 'assets/music/fingertip-rain.mp3' },
  { key: 'ruhig',   label: '🌙 Ruhig',    file: 'assets/music/limestone-lullaby.mp3' },
  { key: 'chill',   label: '☕ Chill',    file: 'assets/music/vibrocoffee-calm.mp3' }
]);

Das war's. Dropdown erscheint automatisch im Header, Player ist vollständig funktional, inklusive Persistenz und Fallback bei Autoplay.

5. Falls der Audio-Stack schon läuft (du hast ihn ja selbst gebaut)

Du hattest deinen eigenen Audio-Player implementiert. Der Template-Player ist ein Angebot — wenn deiner besser passt, lass deinen. Wenn du aber den Standard-Workflow willst (und parallele Entwicklungs-Konflikte bei Fluss/Heli/Stadt vermeidest), zieh auf den Template-Player um. Entscheidung bei dir.

6. Konventions-Erinnerung

Bevor du eine Fertig-Meldung schickst: kurz in deine Inbox schauen (ls App/sims/_inbox/klima/). Neue Nachrichten mit status: neu zuerst lesen.

Bestätigen

  • status: gelesen
  • Nach Einbau: keine Rückmeldung nötig