2026-10-18 15:14:18 +02:00
|
|
|
# talk
|
|
|
|
|
|
|
|
|
|
> **Status: WIP** — aktive Entwicklung (talk 2.0). Binde Spezifikation:
|
|
|
|
|
> [`.scratch/talk-2-0/spec.md`](.scratch/talk-2-0/spec.md) ·
|
|
|
|
|
> Implementierungsplan: [`.scratch/talk-2-0/plan.md`](.scratch/talk-2-0/plan.md)
|
|
|
|
|
|
|
|
|
|
**talk** macht Skripte und KI-Agenten hörbar: Ein Aufruf — `talk "Build fertig"` —
|
|
|
|
|
spricht eine kurze Nachricht über eine TTS-Provider-Kette
|
|
|
|
|
(ElevenLabs → OpenAI → Edge-TTS → OS-Stimme), serialisiert durch den Daemon
|
|
|
|
|
`talkd`. Cross-platform (Windows/macOS/Linux, amd64/arm64), statische Binaries,
|
|
|
|
|
keine Runtime-Abhängigkeiten.
|
|
|
|
|
|
|
|
|
|
## Befehle
|
|
|
|
|
|
|
|
|
|
| Befehl | Zweck |
|
|
|
|
|
| --- | --- |
|
|
|
|
|
| `talk "Text"` | Ansage — Abkürzung für `talk say`, non-blocking |
|
|
|
|
|
| `talk say "Text"` | Ansage (Text als Argument oder von stdin) |
|
|
|
|
|
| `talk wrap -- <Befehl>` | Befehl ausführen, Erfolg/Misserfolg + Dauer ansagen |
|
|
|
|
|
| `talk mute` / `talk unmute` | Ansagen dauerhaft stummschalten / Stummschaltung aufheben |
|
|
|
|
|
| `talk status` | Daemon-Status (Queue, Mute, Provider, Version) |
|
|
|
|
|
| `talk cancel` | laufende und geplante Ansagen abbrechen |
|
|
|
|
|
| `talk voices` | verfügbare Stimmen anzeigen |
|
|
|
|
|
| `talk test` | Test-Ansage ausgeben |
|
|
|
|
|
| `talk doctor` | Selbstdiagnose des Setups |
|
|
|
|
|
| `talk setup` | geführte Ersteinrichtung (Wizard) |
|
|
|
|
|
|
|
|
|
|
Say-Flags (gelten auch für `talk "Text"`): `--wait`, `--now`, `--priority`,
|
|
|
|
|
`--voice`, `--lang`, `--provider`.
|
|
|
|
|
|
2026-10-18 15:39:49 +02:00
|
|
|
**Hinweis:** In diesem Stand ist `say` (und der Default-Aufruf
|
|
|
|
|
`talk "Text"`) implementiert — die erste Ansage über OS-TTS (blockierend;
|
|
|
|
|
Daemon-Anbindung folgt). Alle anderen Befehle sind Stubs und melden
|
|
|
|
|
`not implemented yet` (Exit-Code ≠ 0).
|
|
|
|
|
|
|
|
|
|
### OS-TTS auf Linux (Dev-Abhängigkeit espeak)
|
|
|
|
|
|
|
|
|
|
Der OS-Provider `osbuiltin` nutzt auf Linux zwei Wege:
|
|
|
|
|
|
|
|
|
|
- **Audio-Bytes** (Wiedergabe über den eingebauten oto-Sink): benötigt
|
|
|
|
|
`espeak` (oder `espeak-ng`). Auf NixOS als Dev-Abhängigkeit:
|
|
|
|
|
`nix shell nixpkgs#espeak-ng`.
|
|
|
|
|
- **Direktansage** ohne espeak: `spd-say` (speech-dispatcher) — spielt
|
|
|
|
|
selbst über den Daemon ab, kann aber nach `spd-say --help` keine Bytes
|
|
|
|
|
in Dateien/Pipes liefern. `talk` nutzt diesen Weg automatisch, wenn
|
|
|
|
|
kein espeak vorhanden ist.
|
|
|
|
|
|
|
|
|
|
`TALK_AUDIO_SINK=null` (oder `audio.sink = "null"` in der config.toml)
|
|
|
|
|
schaltet jede Tongabe ab — für CI und Server.
|
2026-10-18 15:14:18 +02:00
|
|
|
|
|
|
|
|
## Entwicklung
|
|
|
|
|
|
|
|
|
|
```console
|
|
|
|
|
go build ./... # bauen
|
|
|
|
|
go test ./... # Tests
|
|
|
|
|
go vet ./... # statische Analyse
|
|
|
|
|
gofmt -l . # Formatierung prüfen (leerer Output = ok)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
CI: `.gitea/workflows/test.yml` (Gitea Actions) läuft vet, gofmt-Check, Tests
|
|
|
|
|
und Build bei jedem Push und Pull Request.
|
|
|
|
|
|
|
|
|
|
## Lizenz
|
|
|
|
|
|
|
|
|
|
MIT — siehe [LICENSE](LICENSE).
|