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

@ -3,7 +3,6 @@ from io import BytesIO
from fastapi import APIRouter, Depends, HTTPException, Query
from fastapi.responses import StreamingResponse
from app.config import settings
from app.errors import RoutingError
from app.auth import require_user
from app.store import User, SessionOwnershipError
@ -33,7 +32,8 @@ async def speak(
"language": payload.language,
"tts_provider": payload.tts_provider,
}
voice = payload.voice or settings.openrouter_tts_voice
# None -> der gewaehlte TTS-Provider nimmt seinen eigenen Default.
voice = payload.voice
try:
route = resolve_route(user, session_id, overrides)