Piper TTS (voix neuronales de haute qualité)
Piper est un moteur de synthèse vocale moderne utilisant des réseaux de neurones pour produire des voix très naturelles, proches de l'humain. Il est totalement hors-ligne et rapide.
Installation
Script automatique (recommandé)
Ce script installe Piper, télécharge les voix françaises et configure Speech Dispatcher pour qu'il utilise Piper par défaut. Il fonctionne sur Ubuntu 24.04 avec Speech Dispatcher 0.12.
#!/bin/bash # Installation de Piper TTS avec Speech-Dispatcher sur Ubuntu 24.04 set -e # --- Configuration --- PIPER_VERSION="2023.11.14-2" INSTALL_DIR="$HOME/.local/share/speech-dispatcher-piper" VOICES_DIR="$INSTALL_DIR/voices" PIPER_BIN="$INSTALL_DIR/piper/piper" VOICE_BASE_URL="https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR" DEFAULT_VOICE="fr_FR-siwis-medium" echo "[1/6] Installation des dépendances..." sudo apt-get update -qq sudo apt-get install -y -qq alsa-utils pulseaudio-utils curl wget speech-dispatcher echo "[2/6] Téléchargement de Piper..." mkdir -p "$INSTALL_DIR" ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') PIPER_ARCHIVE="piper_linux_${ARCH}.tar.gz" PIPER_URL="https://github.com/rhasspy/piper/releases/download/${PIPER_VERSION}/${PIPER_ARCHIVE}" if [ ! -f "$PIPER_BIN" ]; then wget -q --show-progress "$PIPER_URL" -O "/tmp/$PIPER_ARCHIVE" tar -xzf "/tmp/$PIPER_ARCHIVE" -C "$INSTALL_DIR" rm "/tmp/$PIPER_ARCHIVE" fi echo "[3/6] Création du lien symbolique..." sudo ln -sf "$PIPER_BIN" /usr/local/bin/piper echo "[4/6] Téléchargement des voix françaises..." mkdir -p "$VOICES_DIR" for VOICE in "fr_FR-siwis-medium siwis/medium" "fr_FR-upmc-medium upmc/medium"; do NAME=$(echo $VOICE | cut -d' ' -f1) PATH_HF=$(echo $VOICE | cut -d' ' -f2) if [ ! -f "$VOICES_DIR/${NAME}.onnx" ]; then wget -q --show-progress \ "${VOICE_BASE_URL}/${PATH_HF}/${NAME}.onnx" -O "$VOICES_DIR/${NAME}.onnx" wget -q --show-progress \ "${VOICE_BASE_URL}/${PATH_HF}/${NAME}.onnx.json" -O "$VOICES_DIR/${NAME}.onnx.json" fi done SAMPLE_RATE=$(grep -o '"sample_rate": *[0-9]*' "$VOICES_DIR/${DEFAULT_VOICE}.onnx.json" | grep -o '[0-9]*') echo "[5/6] Configuration de Speech-Dispatcher..." sudo tee /etc/speech-dispatcher/modules/piper.conf > /dev/null << PIPER_CONF # Module Piper pour Speech-Dispatcher — généré automatiquement # Utilise paplay (PulseAudio) pour compatibilité avec Firefox et autres applications GenericExecuteSynth "printf '%s' '\$DATA' | /usr/local/bin/piper --model ${VOICES_DIR}/\$VOICE.onnx --output-raw | paplay --raw --rate=${SAMPLE_RATE} --format=s16le --channels=1" # Les deux formes sont nécessaires : speech-dispatcher envoie parfois "fr", parfois "fr-fr" # selon l'application appelante (ex: spd-say envoie "fr", Firefox envoie "fr-fr") AddVoice "fr" "FEMALE1" "fr_FR-siwis-medium" AddVoice "fr-fr" "FEMALE1" "fr_FR-siwis-medium" AddVoice "fr" "MALE1" "fr_FR-upmc-medium" AddVoice "fr-fr" "MALE1" "fr_FR-upmc-medium" GenericDefaultVoice "fr_FR-siwis-medium" GenericRateAdd 0 GenericPitchAdd 0 GenericVolumeAdd 0 GenericRateMultiply 1 GenericPitchMultiply 1 GenericVolumeMultiply 1 PIPER_CONF # Activer piper dans speechd.conf if ! grep -q '^AddModule "piper"' /etc/speech-dispatcher/speechd.conf; then sudo sed -i 's|^#AddModule "espeak-ng".*|&\nAddModule "piper" "sd_generic" "piper.conf"|' \ /etc/speech-dispatcher/speechd.conf fi sudo sed -i 's|^DefaultModule .*|DefaultModule piper|' /etc/speech-dispatcher/speechd.conf sudo sed -i 's|^#*DefaultLanguage.*|DefaultLanguage "fr"|' /etc/speech-dispatcher/speechd.conf sudo sed -i 's|^#* *DefaultVoiceType.*|DefaultVoiceType "FEMALE1"|' /etc/speech-dispatcher/speechd.conf # Supprimer la config utilisateur qui pourrait interférer if [ -d "$HOME/.config/speech-dispatcher" ]; then mv "$HOME/.config/speech-dispatcher" "$HOME/.config/speech-dispatcher.bak" echo " → Config utilisateur sauvegardée dans ~/.config/speech-dispatcher.bak" fi echo "[6/6] Test..." pkill -f speech-dispatcher 2>/dev/null; sleep 1 speech-dispatcher sleep 1 spd-say "Bonjour, Piper est maintenant configuré comme moteur de synthèse vocale par défaut." echo "" echo "Installation terminée !" echo " Voix installées dans : $VOICES_DIR" echo " Voix par défaut : $DEFAULT_VOICE" echo " Binaire piper : /usr/local/bin/piper"
Rendez le script exécutable et lancez-le :
chmod +x install-piper.sh ./install-piper.sh
Installation manuelle
1. Télécharger le binaire Piper
# Détecter l'architecture ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') # Télécharger et extraire dans le dossier utilisateur mkdir -p ~/.local/share/speech-dispatcher-piper wget https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_linux_${ARCH}.tar.gz \ -O /tmp/piper.tar.gz tar -xzf /tmp/piper.tar.gz -C ~/.local/share/speech-dispatcher-piper/ # Créer un lien symbolique accessible globalement sudo ln -sf ~/.local/share/speech-dispatcher-piper/piper/piper /usr/local/bin/piper
2. Télécharger les voix françaises
VOICES_DIR=~/.local/share/speech-dispatcher-piper/voices mkdir -p "$VOICES_DIR" BASE=https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR # Voix féminine siwis (medium, recommandée) wget "${BASE}/siwis/medium/fr_FR-siwis-medium.onnx" -O "$VOICES_DIR/fr_FR-siwis-medium.onnx" wget "${BASE}/siwis/medium/fr_FR-siwis-medium.onnx.json" -O "$VOICES_DIR/fr_FR-siwis-medium.onnx.json" # Voix masculine upmc (medium) wget "${BASE}/upmc/medium/fr_FR-upmc-medium.onnx" -O "$VOICES_DIR/fr_FR-upmc-medium.onnx" wget "${BASE}/upmc/medium/fr_FR-upmc-medium.onnx.json" -O "$VOICES_DIR/fr_FR-upmc-medium.onnx.json"
Test direct de Piper :
printf '%s' "Bonjour, ceci est une voix neuronale de haute qualité" | \ piper --model ~/.local/share/speech-dispatcher-piper/voices/fr_FR-siwis-medium.onnx \ --output-raw | paplay --raw --rate=22050 --format=s16le --channels=1
3. Configurer Speech Dispatcher
Éditez /etc/speech-dispatcher/modules/piper.conf avec les droits d'administration :
- /etc/speech-dispatcher/modules/piper.conf
# Module Piper pour Speech-Dispatcher (sd_generic) # Utilise paplay (PulseAudio) — compatible Firefox et autres applications GenericExecuteSynth "printf '%s' '$DATA' | /usr/local/bin/piper --model /home/VOTRE_USER/.local/share/speech-dispatcher-piper/voices/$VOICE.onnx --output-raw | paplay --raw --rate=22050 --format=s16le --channels=1" # IMPORTANT : déclarer les voix avec "fr" ET "fr-fr" # speech-dispatcher envoie l'un ou l'autre selon l'application appelante AddVoice "fr" "FEMALE1" "fr_FR-siwis-medium" AddVoice "fr-fr" "FEMALE1" "fr_FR-siwis-medium" AddVoice "fr" "MALE1" "fr_FR-upmc-medium" AddVoice "fr-fr" "MALE1" "fr_FR-upmc-medium" GenericDefaultVoice "fr_FR-siwis-medium" GenericRateAdd 0 GenericPitchAdd 0 GenericVolumeAdd 0 GenericRateMultiply 1 GenericPitchMultiply 1 GenericVolumeMultiply 1
Puis dans /etc/speech-dispatcher/speechd.conf, ajoutez ou décommentez :
AddModule "piper" "sd_generic" "piper.conf" DefaultModule piper DefaultLanguage "fr" DefaultVoiceType "FEMALE1"
Redémarrez Speech Dispatcher :
pkill -f speech-dispatcher; sleep 1; speech-dispatcher
Testez :
spd-say "Bonjour, ceci est un test de synthèse vocale avec Piper"
Voix françaises disponibles
| Identifiant | Genre | Qualité | Taille approximative |
|---|---|---|---|
fr_FR-siwis-medium | Féminine | Bonne (recommandée) | ~50 Mo |
fr_FR-siwis-low | Féminine | Rapide (embarqué) | ~15 Mo |
fr_FR-upmc-medium | Masculine | Bonne | ~50 Mo |
fr_FR-gilles-low | Masculin | Rapide (embarqué) | ~15 Mo |
Toutes les voix disponibles : HuggingFace rhasspy/piper-voices
Points importants
Speech Dispatcher envoie parfois le code langue
fr et parfois fr-fr selon l'application appelante (spd-say envoie fr, Firefox envoie fr-fr). Il est indispensable de déclarer les voix avec les deux formes dans piper.conf, sinon $VOICE reste à no_voice et piper ne produit aucun son.
aplay accède directement à ALSA et échoue si Firefox tient déjà le périphérique audio. Utilisez toujours paplay (PulseAudio) qui permet le mixage entre plusieurs applications simultanées.
Si le dossier
~/.config/speech-dispatcher/ existe, il est prioritaire sur /etc/speech-dispatcher/. Une ancienne configuration utilisateur peut interférer et écraser les bons paramètres. En cas de problème, supprimez ou renommez ce dossier :
mv ~/.config/speech-dispatcher ~/.config/speech-dispatcher.bak
Intégration avec Firefox
Firefox utilise Speech Dispatcher pour son mode lecture. Une fois Piper configuré :
- Vérifiez dans
about:configquemedia.webspeech.synth.enabledest àtrue - Ouvrez une page d'article et activez le Mode Lecture (icône dans la barre d'adresse)
- Cliquez sur l'icône Lecture à voix haute dans la barre latérale gauche
Firefox devrait lire avec la voix Piper configurée.
Dépannage
Aucun son avec spd-say :
# Lancer en mode debug pour voir les erreurs sudo rm -rf /tmp/speechd-debug pkill -f speech-dispatcher; sleep 1 speech-dispatcher -s -l 5 -D & sleep 2 spd-say "test" sleep 3 pkill -f speech-dispatcher # Chercher la commande réellement exécutée grep "synth command\|no_voice" /tmp/speechd-debug/piper.log
Si vous voyez no_voice dans les logs, c'est que la voix n'est pas trouvée pour le code langue envoyé. Vérifiez que les deux formes fr et fr-fr sont bien déclarées dans piper.conf.
Tester Piper directement :
printf '%s' 'Bonjour' | /usr/local/bin/piper \ --model ~/.local/share/speech-dispatcher-piper/voices/fr_FR-siwis-medium.onnx \ --output-raw | paplay --raw --rate=22050 --format=s16le --channels=1
Si cette commande fonctionne mais pas spd-say, le problème est dans la configuration Speech Dispatcher.
Voir aussi
- Synthèse vocale sous Linux — vue d'ensemble des solutions
