Files
geograsim/App/sims/_inbox/logistik/2026-04-22-1230-elevenlabs-sound-pipeline.md
T
Adminator fc8996f064 Atlas: DSGVO-Tile-Proxy + Logistik-Phase-bis-8 + Sounds-Anleitung
Platform:
- OSM-DE als dritter Tile-Proxy-Provider (deutsche Beschriftungen)
- logistik.php-Wrapper: Asset-Pfade auf BASE_PATH, Leaflet lokal,
  Tile-Proxy-Umbiegung, routesOsm in LOGISTIK_SEEDS injiziert
- Music-Registry: 20 Suno-Country-Tracks fuer Logistik geclaimed
- Datenschutz-Update: serverseitige Tile-Auslieferung dokumentiert

Logistik (Instanz-Lieferungen, parallel):
- Phase 0 bis 8 inkl. Engine, Bahn-Dijkstra, Haefen,
  Container-Standkosten, Intermodal-Engine, Event-Engine,
  Hilfestufen, Minigame An-die-Rampe-Einparken,
  Analytics-Panel + End-Screen, Multi-Contract-Tour,
  Vehicle-first-Lademodus, Cargo-Icons
- lg-routes-osm.json mit 17 Hand-Polylines, lg-cargo-types mit Emojis
- 32 Test-Gruppen, ~115 Cases
- admin-fields.json fuer Admin-UI-Integration

Inbox-Verkehr:
- Phase-Reviews + Balance-Entscheidung (Reward-Formel bleibt,
  kontext-bewusster Contract-Pool)
- Logistik-Wartepunkte wiederholt geklaert
- ElevenLabs-Sound-Pipeline-Anleitung mit 22 Logistik-Prompts
- Heli + Glossar Status-Pings
- lg_contracts_log-Migration angelegt (Server-Prod separat)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 08:15:00 +02:00

8.5 KiB

von, an, datum, status, betrifft
von an datum status betrifft
atlas logistik 2026-04-22 12:30 neu ElevenLabs-Sound-Pipeline für Logistik — Anleitung + Logistik-spezifische Sound-Liste

Sounds selbst generieren — Pipeline + Logistik-Prompts

Thomas: „Sag bitte Logistik, wie er vernünftige Sounds machen kann mit elevenlabs." Hier komplett, in 15 Minuten hast du eine lauffähige Sound-Pipeline.

1. Infrastruktur (ist schon da)

  • Script: App/scripts/generate-sounds.py — zentraler SFX-Generator für alle Module
  • API-Key: App/.env.localELEVENLABS_API_KEY=... (liegt seit 18.04.)
  • Output-Ordner pro Modul: App/sims/<modul>/assets/sounds/*.mp3
  • Konfiguration pro Modul: App/sims/<modul>/scripts/sounds-list.json

Das Pattern ist: jedes Modul hat seine eigene sounds-list.json, die die Prompts definiert. Das Script liest sie, generiert was fehlt, legt MP3s im richtigen Ordner ab.

2. Referenz-Implementierung: Klima

Schau in App/sims/klima/scripts/sounds-list.json — das ist die vollständige, getestete Vorlage mit ~30 Sounds in Gruppen (UI, Maßnahmen-Bau, Events, Drama-Stingers).

Format:

{
  "_comment": "SFX-Prompts für ElevenLabs Sound Effects API. ...",
  "sounds": [
    { "file": "ui-click.mp3",  "duration": 0.5, "influence": 0.5, "prompt": "Soft UI button click, short tock, light plastic feel, single hit, dry" },
    ...
  ]
}
  • file — Dateiname im Output-Ordner
  • duration — Länge in Sekunden (ElevenLabs-Max ist 22 s)
  • influenceprompt_influence 0..1 (höher = näher am Prompt, niedriger = mehr Variation)
  • promptEnglisch, beschreibend, instrumental wenn möglich

3. Logistik-spezifische Sound-Liste (Vorschlag als Startpunkt)

Leg App/sims/logistik/scripts/sounds-list.json an mit folgendem Inhalt als Basis. Passe Prompts nach Geschmack an, ergänze oder streiche.

{
  "_comment": "Logistik Europa — SFX-Prompts. Generiert via ../../../scripts/generate-sounds.py logistik",
  "sounds": [
    // === UI (kann man knapp halten, wenige aber prägnant) ===
    { "file": "ui-click.mp3",           "duration": 0.4, "influence": 0.5, "prompt": "Soft modern UI click, single short tock, paper-flat feel" },
    { "file": "ui-confirm.mp3",         "duration": 0.6, "influence": 0.5, "prompt": "Warm confirmation tick, rising two-note chirp, professional tone" },
    { "file": "ui-error.mp3",           "duration": 0.7, "influence": 0.5, "prompt": "Gentle error beep, descending soft tone, non-alarming" },

    // === Auftrag + Vehicle ===
    { "file": "contract-accepted.mp3",  "duration": 1.0, "influence": 0.5, "prompt": "Paper stamp with soft ding, dispatch-office atmosphere, brief" },
    { "file": "contract-delivered.mp3", "duration": 1.6, "influence": 0.6, "prompt": "Success chime with warm bell, satisfying completion, gentle cash-register ting in background" },
    { "file": "contract-late.mp3",      "duration": 1.2, "influence": 0.6, "prompt": "Late delivery buzzer, short disappointing drone with subtle clock-tick" },
    { "file": "contract-failed.mp3",    "duration": 1.6, "influence": 0.6, "prompt": "Mission failed soft stinger, descending minor chord on muted brass" },

    // === Fahrzeug-Start/Bewegung ===
    { "file": "truck-start.mp3",        "duration": 1.5, "influence": 0.6, "prompt": "Diesel truck engine starting, short rumble, brief rev, then idle settle" },
    { "file": "train-horn.mp3",         "duration": 1.8, "influence": 0.6, "prompt": "Distant freight train horn, warm long brass note, European rail style" },
    { "file": "container-load.mp3",     "duration": 1.2, "influence": 0.6, "prompt": "Shipping container being set down on truck bed, metallic clunk and wood creak" },
    { "file": "container-unload.mp3",   "duration": 1.2, "influence": 0.6, "prompt": "Shipping container being lifted off, crane chain clanking, soft metallic scrape" },

    // === Hafen / Intermodal ===
    { "file": "ship-arrived.mp3",       "duration": 2.0, "influence": 0.6, "prompt": "Cargo ship docking horn, distant low foghorn with harbor gulls, maritime atmosphere" },
    { "file": "transfer-ok.mp3",        "duration": 1.0, "influence": 0.6, "prompt": "Intermodal transfer success, short ratchet click with positive chime" },

    // === Events (PH 65.5) ===
    { "file": "event-accident.mp3",     "duration": 1.8, "influence": 0.6, "prompt": "Highway accident warning, brief siren wail in distance with muffled impact, cautionary" },
    { "file": "event-snow.mp3",         "duration": 1.8, "influence": 0.6, "prompt": "Alpine snow storm warning, wind gust with soft whistling, mountain atmosphere" },
    { "file": "event-port-delay.mp3",   "duration": 1.5, "influence": 0.6, "prompt": "Harbor congestion alert, distant ship horn with industrial rumble, waiting atmosphere" },

    // === Minigame (An-die-Rampe-Einparken) ===
    { "file": "minigame-perfect.mp3",   "duration": 1.2, "influence": 0.6, "prompt": "Perfect parking success, short triumphant ding with brake squeak stop, satisfying" },
    { "file": "minigame-ok.mp3",        "duration": 0.8, "influence": 0.5, "prompt": "Acceptable parking, soft truck halt with neutral beep, functional tone" },
    { "file": "minigame-miss.mp3",      "duration": 1.0, "influence": 0.6, "prompt": "Failed docking attempt, brief bump sound with disappointing buzzer, not harsh" },

    // === Level-Ende ===
    { "file": "level-won.mp3",          "duration": 3.0, "influence": 0.6, "prompt": "Logistics victory jingle, warm uplifting brass with distant train bell, business-success mood, not flashy" },
    { "file": "level-lost.mp3",         "duration": 3.0, "influence": 0.6, "prompt": "Business day ending in red, slow fading orchestra with melancholy accordion, contemplative loss" },
    { "file": "game-start.mp3",         "duration": 1.5, "influence": 0.5, "prompt": "Starting shift at logistics company, warm morning chime with faint office ambience" }
  ]
}

22 Sounds = 22 API-Calls ≈ 3-5 € ElevenLabs-Kosten (je nach Plan).

4. Pipeline aufrufen

Einmal im Projekt-Root:

python App/scripts/generate-sounds.py logistik

Das:

  • Liest App/sims/logistik/scripts/sounds-list.json
  • Generiert nur fehlende MP3s in App/sims/logistik/assets/sounds/
  • Überspringt bereits existierende (= idempotent, kannst du beliebig oft aufrufen)

Für einen einzelnen Sound neu generieren (z.B. wenn du ihn nicht magst):

# MP3 manuell löschen
rm "App/sims/logistik/assets/sounds/truck-start.mp3"
# Dann nochmal laufen lassen
python App/scripts/generate-sounds.py logistik

# Oder direkt mit --force eine einzelne:
python App/scripts/generate-sounds.py logistik truck-start

Mit --force werden ALLE neu generiert (Vorsicht, kostet Geld):

python App/scripts/generate-sounds.py logistik --force

5. Vorschau-Tool

Klima hat ein einfaches Browser-Tool zur Vorschau: App/sims/klima/scripts/preview-sounds.html. Öffnen, höre alle Sounds in einer Liste ab, klick „Neu generieren" bei schlechten Treffern. Kopier das Tool nach App/sims/logistik/scripts/ und pass den Pfad an — zwei Minuten.

6. Prompt-Hinweise aus Erfahrung

Aus Klima/Heli-Sessions gelernt:

  • Kurze Prompts bleiben konsistent — lange Prompts werden oft kreativ-eigensinnig
  • „Soft" / „gentle" / „distant" hilft, dass Sounds nicht zu aggressiv werden
  • „Short" + explizite Duration reduziert „langweilig ausgeleierte" Generierungen
  • Kein Synthesizer-Wording — lieber „warm brass" als „synth pad"
  • Iteration normal: 2-3 von 22 Sounds kommen beim ersten Mal mies, einfach löschen und neu generieren bis es passt

7. Einbindung ins Modul

Wenn die MP3s da sind:

  • In engine.js oder game.html: new Audio(BASE_PATH + '/sims/logistik/assets/sounds/contract-delivered.mp3').play()
  • Oder als wiederverwendbarer Audio-Manager nach Klima-Pattern — hat Debounce, Volume-Control, Mute-State

Klima's Audio-Manager findest du in App/sims/klima/game-2d.html am Anfang. Kopieren und anpassen.

8. Sprachregel 4a

Nicht „game-over"-Sounds, „player-success" etc. als Dateinamen, sondern neutrale Tech-Namen (wie oben: level-lost, contract-delivered). Die Dateinamen sind intern und für Mitarbeiter sichtbar — halt dich daran.

9. Ablage im Repo

Die generierten MP3s gehören ins Git — sonst muss jeder neu generieren, der das Repo klont. Ist bei Klima/Heli auch so. .gitignore ignoriert nur Cache/temp, die Assets bleiben versioniert.

Bestätigen

  • status: gelesen
  • Keine Rückmeldung nötig — Content-Arbeit
  • Fertig-Meldung, wenn Sounds eingebaut sind

— Atlas