- Python 73%
- Shell 27%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| installer.sh | ||
| LICENSE | ||
| origines.conf | ||
| README.md | ||
| serveur-voix.service | ||
| serveur.py | ||
Serveur de voix
Synthèse vocale Piper installée sur un serveur YunoHost, pour donner une belle voix française (Siwis, Tom) à des applications web : TBScreen, Hello!, etc.
- Hors des grands services en ligne : le texte va de votre application à votre serveur, nulle part ailleurs.
- Aucun texte n'est écrit dans les journaux.
- Seuls les sites listés dans
/etc/serveur-voix/origines.confpeuvent l'utiliser. - Limites : 1 200 caractères par demande, 60 demandes par minute et par adresse.
- Licence : GPL v3. Piper (piper-tts) est sous GPL v3, et les voix Siwis et Tom ont leurs propres licences, indiquées dans leurs fichiers
.onnx.json.
Version : 0.1.1
Fonctionnement
Application (navigateur) ──HTTPS──▶ tts.toutalamaison.ynh.fr (YunoHost, application « Redirect » en proxy inverse)
│
▼
127.0.0.1:5005 serveur.py ──▶ Piper (voix .onnx)
| Point d'accès | Rôle |
|---|---|
GET /sante |
{"ok": true, "voix": 2} |
GET /voix |
liste des voix : [{"id": "fr_FR-siwis-medium", "nom": "Siwis", "langue": "fr-FR", "qualite": "medium"}, …] |
POST /lire |
corps JSON {"texte": "…", "voix": "fr_FR-siwis-medium", "vitesse": 1} → son audio/wav |
vitesse va de 0,5 (lent) à 2 (rapide). Les dernières phrases lues sont gardées en mémoire, si bien qu'une phrase relue repart immédiatement.
Installation sur le YunoHost
1. Copier le dossier sur le serveur
Depuis votre ordinateur :
# Copie l'archive sur le serveur (VOTRE_UTILISATEUR : le compte administrateur de votre YunoHost)
scp serveur-voix-0.1.1.zip VOTRE_UTILISATEUR@toutalamaison.ynh.fr:~
2. Installer Piper, les voix et le service
Sur le serveur (ssh VOTRE_UTILISATEUR@toutalamaison.ynh.fr) :
# Décompresse et lance l'installation (10 à 15 minutes sur un Raspberry Pi, voix comprises)
unzip -o serveur-voix-0.1.1.zip && cd serveur-voix
sudo bash installer.sh
À la fin, le script fait lire une phrase d'essai et affiche le temps qu'il a fallu.
3. Publier le service sur tts.toutalamaison.ynh.fr
# Ajoute le sous-domaine (les sous-domaines d'un domaine .ynh.fr sont pris en charge par YunoHost)
sudo yunohost domain add tts.toutalamaison.ynh.fr
# Certificat HTTPS Let's Encrypt (attendre une à deux minutes après l'ajout du domaine si la commande échoue)
sudo yunohost domain cert install tts.toutalamaison.ynh.fr
# Proxy inverse public vers le serveur de voix (application officielle « Redirect »)
sudo yunohost app install redirect -a "domain=tts.toutalamaison.ynh.fr&path=/&redirect_type=reverseproxy&target=http://127.0.0.1:5005&init_main_permission=visitors"
4. Vérifier depuis votre ordinateur
# Doit répondre {"ok": true, "voix": 2}
curl -H "Origin: https://tbscreen.toutalamaison.eu" https://tts.toutalamaison.ynh.fr/sante
# Doit être refusé (403) : ce site n'est pas dans la liste
curl -s -o /dev/null -w "%{http_code}\n" -H "Origin: https://exemple.org" https://tts.toutalamaison.ynh.fr/sante
Autoriser une autre application
Ajoutez son adresse (par exemple https://hello.toutalamaison.ynh.fr) dans /etc/serveur-voix/origines.conf, puis :
# Prend en compte la nouvelle liste
sudo systemctl restart serveur-voix
Ajouter une voix
Déposez le fichier .onnx et son .onnx.json (depuis rhasspy/piper-voices) dans /opt/serveur-voix/voix, puis redémarrez le service.
Utilisation depuis une application
// Demande le son d'une phrase au serveur de voix puis le joue
const reponse = await fetch('https://tts.toutalamaison.ynh.fr/lire', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ texte: 'Bonjour !', voix: 'fr_FR-siwis-medium', vitesse: 1 })
});
new Audio(URL.createObjectURL(await reponse.blob())).play();
Pensez à autoriser le serveur dans la CSP de l'application : connect-src 'self' https://tts.toutalamaison.ynh.fr (et media-src … blob: pour jouer le son).
Entretien
| Besoin | Commande |
|---|---|
| État | systemctl status serveur-voix |
| Journal | journalctl -u serveur-voix -f |
| Mettre à jour Piper | relancer sudo bash installer.sh (les voix et la liste des sites sont conservées) |
| Désinstaller | sudo yunohost app remove redirect puis sudo systemctl disable --now serveur-voix && sudo rm -r /opt/serveur-voix /etc/serveur-voix /etc/systemd/system/serveur-voix.service && sudo userdel serveur-voix |
Tester sans Piper
# Faux moteur (une seconde de silence) pour vérifier le serveur, les sites autorisés et les limites
python3 serveur.py --essai --port 5099 --origines origines.conf
Historique
- 0.1.1 : TBScreen autorisé à son adresse tbscreen.toutalamaison.eu.
- 0.1.0 : première version (Siwis et Tom, sites autorisés, limites, cache, service systemd durci).