2.1 KiB
sg-announcer – utrop på høyttaleranlegget (Sauda Gathering)
Liten Flask-app: tekst inn i nettleseren → forhåndslytt → «Send ut på
anlegget» spiller lyden lokalt på denne maskinen med pw-play. TTS er
Piper (piper-tts, onnx, helt lokalt). Alt ligger i to filer:
announcer.py (server + kø) og index.html (sida).
Dokumentasjon for Kent: Athena-notatet
30 Ressurser/Teknologi/Sauda Gathering - announcer.md. Oppdater det, ikke
denne fila, når noe som er verdt å huske endres.
Kjøring
Tjenesten er en systemd-brukerenhet: ~/.config/systemd/user/sg-announcer.service
(enabled, port 8090). systemctl --user restart sg-announcer etter endringer
i koden. Manuelt: uv run announcer.py --port 8090.
Miljøvariabler (settes i enheten): ANNOUNCER_PORT, ANNOUNCER_PIN (tom =
ingen PIN), ANNOUNCER_SINK (pw-play --target; tom = standard utgang).
Hvordan det henger sammen
/api/previewsyntetiserer og returnerer WAV til nettleseren. Ingen lyd på PC-en./api/announcelegger meldingen i én FIFO-kø; en bakgrunnstråd spiller én om gangen medpw-play./api/stopdreper gjeldende avspilling,/api/cleartømmer køen.- Knappen «Send ut» er låst til nøyaktig den teksten/stemmen/hastigheten som sist ble forhåndslyttet. Det er med vilje: ingen skal sende noe de ikke har hørt.
- Ferdige WAV-er bufres i
cache/etter innholdshash. Trygt å slette. - Chimen («ding-dong») genereres i Python, ingen lydfil.
Stemmer
VOICES i announcer.py er eneste sted en stemme legges til. Navnet er
Piper-ID-en (<lang>-<navn>-<kvalitet>); fila lastes ned fra
rhasspy/piper-voices ved første oppstart til voices/ (gitignored, ~63 MB
per stemme). Norsk: no_NO-talesyntese-medium er den eneste norske Piper-stemmen.
Feller
- ufw: appen kjører nativt, så Docker-smutthullet gjelder ikke. Porten må
åpnes eksplisitt for LAN-et (
sudo ufw allow from 10.20.70.0/23 to any port 8090 proto tcp). pkill -f announcer.pyfra et skall som selv harannouncer.pyi kommandolinja dreper skallet. Bruksystemctl --user.- Piper 1.8 bruker
SynthesisConfig(length_scale=…); lavere = raskere.