feat(voice_loop): --voice-Option + saubere Default-Stimme je TTS-Provider

- voice_loop.py: --voice reicht die Stimme im Start-Frame durch (nur wenn gesetzt),
  sonst greift der Provider-Default. Beispiele in Docstring/Help.
- ws.py/speak.py/chat.py: ohne explizite Stimme None durchreichen statt die
  OpenRouter-Stimme zu erzwingen -> jeder Provider nimmt SEINEN Default
  (OPENROUTER_TTS_VOICE bzw. PIPER_VOICE). Ungenutzten settings-Import in speak.py
  entfernt.
- Doku: BEDIENUNGSANLEITUNG (--voice + Default-Stimme je Provider).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-06-17 23:42:23 +02:00
commit 9d0019274a
5 changed files with 22 additions and 7 deletions

View file

@ -323,8 +323,16 @@ curl -s -X POST "$URL/api/speak" -H 'Content-Type: application/json' \
# anderes TTS-Modell (andere Stimmenfamilie):
echo 'OPENROUTER_TTS_MODEL=openai/gpt-4o-mini-tts' >> .env
```
Das Feld `voice` gibt es im Body von `/api/speak` und `/api/chat`. Hinweis:
`scripts/voice_loop.py` hat **keine** `--voice`-Option — dort gilt der Server-Default.
Das Feld `voice` gibt es im Body von `/api/speak` und `/api/chat`. Im Sprech-Loop
direkt durchprobieren mit `--voice` (ohne Angabe gilt der Provider-Default):
```bash
python scripts/voice_loop.py --tts-provider openrouter --voice Puck # Cloud-Stimme
python scripts/voice_loop.py --tts-provider piper --voice de_DE-kerstin-low # lokale Stimme
```
**Default-Stimme je Provider:** Wird keine Stimme angefragt, nimmt jeder TTS-Provider
seinen eigenen Default — OpenRouter `OPENROUTER_TTS_VOICE`, piper `PIPER_VOICE`. `--voice`
ist provider-spezifisch: ein Gemini-/OpenAI-Stimmenname für `openrouter`, ein Modellname
für `piper` (ein unpassender Name fällt bei piper auf `PIPER_VOICE` zurück).
## B2. Soundquelle & Ausgabe-Gerät wechseln (Mikrofon, Lautsprecher, Bluetooth, Handy)