feat(voice_loop): per Default System-Standardgeraete + Probe gegen tote Geraete
'auto'-Recorder folgt jetzt dem System-Standard-Mikrofon und prueft per Kurztest (~0,6 s), dass das Werkzeug WIRKLICH Audio liefert -> nie ein totes Geraet. Kandidaten ffmpeg(-f pulse) -> parecord -> arecord -> pw-record; auf PipeWire- Systemen ohne aktive Session gewinnt ffmpeg (gemessen: pw-record/arecord-default/ parecord liefern hier nichts). Neuer Recorder 'ffmpeg'. Player: paplay vor aplay (folgt System-Default-Sink). --device nur noch, wenn man bewusst abweichen will. Doku (Bedienung + B2 + Fehlerbehebung) entsprechend aktualisiert. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
9d0019274a
commit
295f066b6a
2 changed files with 99 additions and 43 deletions
|
|
@ -111,22 +111,21 @@ Nützliche Optionen:
|
|||
```bash
|
||||
python scripts/voice_loop.py --stream-text # Antworttext live anzeigen, waehrend die KI generiert
|
||||
python scripts/voice_loop.py --no-stream-audio # satzweises Vorlesen abschalten (Audio erst komplett)
|
||||
python scripts/voice_loop.py --recorder pw-record # PipeWire-Aufnahme (Standard bei 'auto')
|
||||
python scripts/voice_loop.py --recorder arecord --device hw:1,0 # ALSA, bestimmtes Mikrofon
|
||||
python scripts/voice_loop.py --recorder arecord --device plughw:6,0 # bestimmtes Mikrofon erzwingen
|
||||
python scripts/voice_loop.py --llm-provider openrouter --tts-provider openrouter
|
||||
python scripts/voice_loop.py --token "$TOKEN" # falls AUTH_ENABLED=true
|
||||
python scripts/voice_loop.py --file frage.wav # ohne Mikrofon: WAV senden (Test)
|
||||
```
|
||||
|
||||
> **Aufnahmewerkzeug:** `--recorder auto` (Standard) bevorzugt **PipeWire** (`pw-record`),
|
||||
> sonst `parecord`/`arecord`. **Falls die Aufnahme scheitert** (z. B.
|
||||
> *„pw_context_connect() failed"* oder *„Fehler beim Öffnen des Gerätes"*), ist der
|
||||
> verlässlichste Weg ein **direktes ALSA-Hardware-Gerät**:
|
||||
> ```bash
|
||||
> arecord -l # Kartennummern der Mikrofone
|
||||
> python scripts/voice_loop.py --recorder arecord --device plughw:2,0
|
||||
> ```
|
||||
> (`plughw:KARTE,GERÄT` aus `arecord -l`; z. B. onboard oft Karte 2, USB-Webcam Karte 4.)
|
||||
> **Geräte = System-Standard (automatisch):** Ohne `--device` folgt der Loop dem
|
||||
> **am System eingestellten Standard-Mikrofon und -Lautsprecher** (inkl. Bluetooth —
|
||||
> umstellbar über *Ubuntu → Einstellungen → Ton*, siehe Teil B2). `--recorder auto`
|
||||
> (Standard) wählt selbsttätig ein Aufnahmewerkzeug, das dem Default folgt **und** im
|
||||
> **Kurztest wirklich Audio liefert** (Reihenfolge `ffmpeg` → `parecord` → `arecord` →
|
||||
> `pw-record`) — so wird nie ein totes Gerät gewählt. Beim Start erscheint kurz
|
||||
> „Prüfe Standard-Aufnahmegerät …".
|
||||
> **Ein bestimmtes Mikrofon** nur bei Bedarf erzwingen, z. B. `--recorder arecord
|
||||
> --device plughw:6,0` (`arecord -l` zeigt die Kartennummer).
|
||||
|
||||
## A2. Nur tippen → Antwort hören
|
||||
|
||||
|
|
@ -390,20 +389,24 @@ pactl set-default-sink <SINK_NAME> # z. B. die Bluetooth-Box
|
|||
Sobald die Bluetooth-Box dort als Standard gesetzt ist (Schritt 2 oben), kommt die
|
||||
gesprochene Antwort **automatisch über die Box** — ohne zusätzliche Option. Das ist der
|
||||
Grund, warum die Bluetooth-Umleitung „einfach funktioniert".
|
||||
- **Eingabe (Aufnahme):** Die Aufnahme folgt **nicht** automatisch dem System-Default —
|
||||
`voice_loop.py` nimmt mit einem fest gewählten Gerät auf. Damit der **ReSpeaker** genutzt
|
||||
wird, das Gerät explizit angeben (ReSpeaker = **Karte 6** → `plughw:6,0`):
|
||||
- **Eingabe (Aufnahme):** `voice_loop.py` folgt mit `--recorder auto` (Standard) ebenfalls
|
||||
dem **System-Standard-Mikrofon** — es probiert beim Start automatisch ein Werkzeug, das
|
||||
dem Default folgt und im Kurztest wirklich Audio liefert (`ffmpeg` → `parecord` → `arecord`
|
||||
→ `pw-record`). Stellst du also das Eingabegerät in *Einstellungen → Ton* um (z. B. auf den
|
||||
ReSpeaker), nutzt der Loop es ohne weitere Option.
|
||||
- **Bestimmtes Mikrofon erzwingen** (statt System-Default), z. B. den ReSpeaker fix als ALSA-
|
||||
Gerät (Karte 6):
|
||||
|
||||
```bash
|
||||
python scripts/voice_loop.py --recorder arecord --device plughw:6,0
|
||||
```
|
||||
|
||||
(Auf diesem Rechner ist `--recorder arecord` mit `plughw:…` der zuverlässige Weg, weil die
|
||||
Default-folgenden Recorder `pw-record`/`parecord` hier nicht stabil verbinden. Die richtige
|
||||
Kartennummer notfalls mit `arecord -l` prüfen.)
|
||||
(Hilfreich, wenn du gezielt ein anderes als das Standard-Mikrofon willst; Kartennummer mit
|
||||
`arecord -l`. Auf diesem Rechner scheitern `pw-record`/`arecord default` — die `auto`-Probe
|
||||
überspringt sie automatisch und nimmt `ffmpeg -f pulse`.)
|
||||
|
||||
Kurz: **Lautsprecher/Bluetooth umstellen → System-Einstellungen genügen.**
|
||||
**Mikrofon für den Sprech-Loop → zusätzlich `--device plughw:6,0` mitgeben.**
|
||||
Kurz: **Mikrofon UND Lautsprecher/Bluetooth umstellen → die System-Einstellungen genügen;
|
||||
der Sprech-Loop folgt dem Standard automatisch.** `--device` nur, wenn du bewusst abweichen willst.
|
||||
|
||||
### Weitere Einstellungen, die du vornehmen kannst
|
||||
- **Ausgabe-Lautstärke / Mikrofon-Empfindlichkeit:** *Ton*-Seite oder
|
||||
|
|
@ -614,7 +617,7 @@ curl -s "$URL/api/metrics?format=prometheus" # Prometheus-Text (kein jq)
|
|||
| HTTP **502** bei STT/TTS | Cloud-Fehler/Format | `make smoke` ausführen; Modellnamen in `.env` prüfen |
|
||||
| `VA_PROFILE` wirkt nicht | `DEFAULT_*_PROVIDER` in `.env` überschreibt | diese Zeilen in `.env` auskommentieren |
|
||||
| `Address already in use` | Port belegt | anderen `PORT` setzen |
|
||||
| `pw_context_connect() failed` / `arecord: Fehler beim Öffnen des Gerätes` | PipeWire-Client- bzw. ALSA-`default`-Pfad gestört | direktes Gerät nehmen: `arecord -l`, dann `--recorder arecord --device plughw:2,0` |
|
||||
| `pw_context_connect() failed` / `arecord: Fehler beim Öffnen des Gerätes` | PipeWire-Client- bzw. ALSA-`default`-Pfad gestört | `--recorder auto` (Standard) überspringt tote Werkzeuge automatisch (nutzt `ffmpeg -f pulse`); notfalls direktes Gerät: `arecord -l`, dann `--recorder arecord --device plughw:6,0` |
|
||||
| Keine Aufnahme/Wiedergabe | Werkzeug/Gerät fehlt | `arecord -L` / `aplay -L`; Pakete `pipewire`/`alsa-utils`/`ffmpeg`; Default via `wpctl status` |
|
||||
| Profil greift nicht | `config/voice-assistant.toml` fehlt | aus `*.example.toml` kopieren (Abschnitt 2) |
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue