- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/ - 12 code-workspace-Files - STATUS-*.md - viele M/D/R-Änderungen an bereits getrackten Files - .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
7.5 KiB
titel, stand, status
| titel | stand | status |
|---|---|---|
| Audio-Konzept Logistik — Level 1 | 2026-04-25 | Entwurf, zur Review mit Thomas |
Audio-Konzept Level 1
Ziel: Begleitende gesprochene Sprache fuer Level 1, um die Simulation immersiver und didaktisch zugaenglicher zu machen. Fuer Easy-Language eigene, kuerzere Zeilen.
1. Stil und Rolle
Eine Rolle: „Disponent*innen-Funk" Stell sie dir vor wie eine Funk-Verbindung zur Spedition — ruhig, freundlich, knapp. Weder Radiomoderatorin noch Nachrichtensprecherin. Keine Effekte-Flut, keine Dauerberieselung.
Stimme: eine weibliche Stimme, 25-40, warm aber sachlich, neutrales Standarddeutsch, Easy-Variante dazu vom selben Sprecher*in (weniger Tempo, einfachere Satzstruktur).
Lautstaerke: deutlich unter der Hintergrundmusik (-6 dB), sodass nicht ueberlagert wird. Bei Wichtigem (Event-Start, Fail) kurzer Duck der Musik.
2. Wann was gesprochen wird
Kategorien nach Prioritaet — je hoeher, desto wichtiger / ununterdrueckbar.
2.1 Level-Einstieg (einmal pro Durchgang)
| Trigger | Standard-Text | Easy-Text |
|---|---|---|
| nach Splash dismiss | „Willkommen bei Spedition Wien. Dein Lieferwagen steht bereit. Klick einen Auftrag an — los geht's." | „Guten Tag. Dein LKW ist da. Klick einen Auftrag." |
2.2 Auftrags-Lifecycle (pro Auftrag)
| Trigger | Standard-Text | Easy-Text |
|---|---|---|
| Kontrakt angenommen (auto-loaded) | „Auftrag nach {ZIEL} — Ladung ist drin." | „Auftrag nach {ZIEL}." |
| Beladung laeuft (LOADING start) | — optional, nur wenn Ladezeit > 10 min: „Beladung laeuft, {MIN} Minuten." | — stumm |
| Lieferung angekommen, puenktlich | „Lieferung in {ZIEL} abgeschlossen. {BETRAG} Euro verdient." | „Fertig. Du hast {BETRAG} Euro." |
| Lieferung angekommen, verspaetet | „Lieferung angekommen — leider zu spaet. Strafe {BETRAG} Euro." | „Zu spaet. Kostet {BETRAG} Euro." |
Kein Sound-Spam: wenn mehrere Ereignisse innerhalb 5 Sek zusammenkommen, nur das wichtigste sprechen.
2.3 Events (wenn ausgeloest)
| Trigger | Standard-Text | Easy-Text |
|---|---|---|
| Verfahren-Event start | „{NAME} hat sich verfahren. Klick die Stadt auf der Karte, wo der Auftrag hin soll." | „{NAME} hat sich verirrt. Klick die Stadt." |
| Verfahren, richtiger Ort | „Gut — {NAME} faehrt weiter." | „Richtig!" |
| Verfahren, falscher Ort | „Leider falsch — 1,5 Stunden verloren." | „Falsch. Zeit weg." |
| Auto-Miete 2. LKW | „Konto ueber 10.000 Euro — zweiter Lieferwagen gemietet. Tagesmiete ist jetzt 1.000 Euro." | „Noch ein LKW. Miete jetzt hoeher." |
| Pflicht-Pause start | „Lenkzeit-Pause — 45 Minuten." | „{NAME} macht Pause." |
| Pflicht-Pause Ende | — stumm (nicht wichtig genug) | — stumm |
| Einpark-Minispiel perfekt | „Sauber eingeparkt — Bonus fuer die naechste Ladung." | „Super! Bonus!" |
| Einpark-Touchieren | „Kratzer — 1.000 Euro Reparatur." | „Au. Das kostet 1.000 Euro." |
| Einpark-Game-Over (Zeit abgelaufen) | „Zu viel Zeit, Kollege uebernimmt." | „Zu langsam." |
2.4 Zeit-Meilensteine (optional, Hintergrundcharakter)
| Trigger | Standard-Text | Easy-Text |
|---|---|---|
| Tag 1 Ende (24 h) | „Tag 1 vorbei. Stand: {BETRAG}." | „Ein Tag um. {BETRAG} Euro." |
| Tag 2 Ende (48 h) | „Halbzeit. Stand: {BETRAG}." | „Halbzeit. {BETRAG} Euro." |
| Tag 3 Ende (72 h) | „Nur noch ein Tag." | „Ein Tag bleibt." |
| 1 h vor Ende | „Letzte Stunde." | „Gleich Schluss." |
Pro Meilenstein nur einmal — keine Wiederholungen.
2.5 Level-Ende
| Trigger | Standard-Text | Easy-Text |
|---|---|---|
| 5 Sterne | „Spitzenleistung — 5 Sterne! Endbilanz {BETRAG}." | „Top! 5 Sterne!" |
| 4 Sterne | „Sehr gut — 4 Sterne. Endbilanz {BETRAG}." | „Toll! 4 Sterne." |
| 3 Sterne | „Solide — 3 Sterne. Endbilanz {BETRAG}." | „Gut. 3 Sterne." |
| 2 Sterne | „Knapp — 2 Sterne. Endbilanz {BETRAG}." | „Okay. 2 Sterne." |
| 1 Stern | „Ueberlebt — 1 Stern. Endbilanz {BETRAG}." | „Geschafft. 1 Stern." |
| Bankrott | „Das Konto ist leer. Simulation beendet." | „Kein Geld mehr. Aus." |
3. Nicht vertont
Um Reiz-Overload zu vermeiden ausdruecklich nicht vertont:
- Jede Routenplanung-Aktion
- Offers die kommen/gehen (nur visuelle Cards)
- LKW-Kilometerstand oder Zwischenzustaende
- Bonus-Pills-Konsum (nur visuelle Flug-Animation)
- Auto-Boost-Wechsel
- Open/Close des Map-Popups
4. Platzhalter und Template-Syntax
Pro Zeile in der Audio-Datei gehoeren die Platzhalter fest eingesprochen oder als Composite. Vorschlag fuer Erstellung:
- Fixe Zeilen einmal pro Standard + Easy einsprechen
- Platzhalter ({ZIEL}, {BETRAG}, {NAME}) separat aufnehmen fuer jede L1-Staedte-ID (wien, salzburg, muenchen, innsbruck, graz, mailand, berlin) und die zwei Fahrernamen (Anna, Tom)
- Betraege werden als Zahlen-Samples (1-50 in 1.000-Schritten) gesampled oder via Web-Speech zur Laufzeit ausgegeben
Alternative ohne Platzhalter-Sampling: alles ueber ElevenLabs-TTS bei Triggerung generieren (kurzer Fetch, Cache). Dann sind Platzhalter trivial.
5. Technische Integration
Option A — Pre-generierte Dateien (statisch, DSGVO-sauber)
App/sims/logistik/assets/audio/voice/de/- Filenames:
<event-id>[_easy].mp3 - Platzhalter:
city_salzburg.mp3,betrag_1500.mp3, etc. - Ausspielung: Web Audio API, stacked je Trigger
- Vorteil: offline-faehig, schnell, kein externer Call
- Nachteil: Sampling-Komplexitaet bei Zahlen/Staedten
Option B — ElevenLabs-TTS on-demand
- Engine ruft
POST /api/tts?text=...&voice=de-anna&cache_key=... - Server cached, liefert mp3
- Vorteil: beliebige Platzhalter, keine Sampling-Logik
- Nachteil: API-Kosten (~0.0001 €/Char), Netzwerk-Abhaengigkeit, Latenz beim Erstaufruf
Option C — Web-Speech-API (Browser-nativ)
speechSynthesis.speak(new SpeechSynthesisUtterance(text))- Vorteil: kostenlos, offline, variabel
- Nachteil: Qualitaet maessig, variiert je OS/Browser, iPad-Safari oft mittelmaessig
Empfehlung: Option A fuer alle fixen Lines + L1-Staedte + Fahrernamen (pre-generiert zur Release-Zeit). Betraege entweder diskret („zweistellig", „dreistellig") oder via Web-Speech (Option C) dynamisch drauflegen. Das mischt die Staerken.
6. User-Kontrolle
Ein Toggle im Header:
- 🔊 an (default? — nein, aus als Default fuer Klassenumgebung)
- 🔇 aus
Getrennter Toggle fuer:
- Stimme (Sprachausgabe)
- Sound-Effekte (Motor, Crash, Bonus-Pings) — existiert bereits
7. Produktions-Pipeline
- Phase 1 — Konzept (dieses Dokument) reviewen: Thomas bestaetigt oder veraendert die Texte / Stil.
- Phase 2 — Sprecher*in auswaehlen: Atlas hat ElevenLabs-Pipeline (siehe inbox/logistik/2026-04-22-1230-elevenlabs-sound-pipeline.md). Kann die gleiche Stimme genutzt werden wie fuer Heli?
- Phase 3 — Texte generieren: ca. 40 fixe Lines × 2 Sprachen = 80 samples. + 7 Staedte × 2 + 2 Namen × 2 = 18 Platzhalter-samples. Gesamt ~100 Dateien, ~15 MB.
- Phase 4 — Integration: Audio-Manager im game.html, getriggert von den bereits vorhandenen Notification-Types.
- Phase 5 — A/B-Test mit echter Klasse: messen, ob Stimme die Behalten-Rate der didaktischen Info erhoeht.
8. Fragen an Thomas
- Stimmen-Geschlecht: weiblich fix, oder auch maennliche Variante waehlbar?
- Easy-Language: separat einspielen oder im Code aus Standard ableiten (kuerzen)?
- Defaults: Stimme von Anfang an an, oder Opt-in?
- Musik-Duck: bei Sprachausgabe Musik auf -6 dB senken — OK?
- Budget ElevenLabs: 100 Samples à 20 Zeichen = 2.000 Zeichen, bei ElevenLabs Creator Plan ~5 € Einmalaufwand. OK?
— Logistik