Piper TTS (voix neuronales de haute qualité)
Piper est un moteur de synthèse vocal 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
Automatique
Vous pouvez installer le snap Pied, qui devrait installer automatiquement Piper pour vous avec les voix de votre choix et le paramétrer pour être votre moteur par défaut.
Semi-automatique
Ce script va installer Piper, et le paramétrer pour qu’il soit votre lecteur par défaut:
#!/bin/sh set -e # --- Configuration des voix cibles --- VOICE_FEMME="fr_FR-siwis-low" VOICE_HOMME="fr_FR-upmc-medium" DEFAULT_VOICE=$VOICE_FEMME INSTALL_DIR=${INSTALL_DIR:-~/.local/share/speech-dispatcher-piper} CONFIG_DIR=${CONFIG_DIR:-~/.config/speech-dispatcher} MODULES_DIR="$CONFIG_DIR/modules" SPEECHD_CONF="$CONFIG_DIR/speechd.conf" CONFIG_PATH="$MODULES_DIR/piper-generic.conf" PIPER_BIN_GZ_URL="https://github.com/rhasspy/piper/releases/latest/download/piper_linux_$(uname -m).tar.gz" echo "\033[1;36m0. Nettoyage des anciens processus...\033[0m" killall speech-dispatcher piper sox paplay 2>/dev/null || true echo "\033[1;36m1. Installation des dépendances...\033[0m" sudo apt -qq update && sudo apt -qq install jq sox curl speech-dispatcher python3-speechd pulseaudio-utils -y mkdir -p "$INSTALL_DIR/voices" mkdir -p "$MODULES_DIR" echo "\033[1;36m2. Création du script de lecture (Wrapper)...\033[0m" # Ce script permet de stopper proprement le son si on change de phrase cat << 'EOF' > "$INSTALL_DIR/play_piper.sh" #!/bin/bash DATA="$1" VOICE="$2" VOLUME="$3" RATE="$4" PITCH="$5" # On récupère automatiquement le dossier du script BASE_DIR="$(dirname "$0")" TMP_WAV=$(mktemp /tmp/piper_XXXXXX.wav) PAP_PID="" # Si la lecture est annulée, on coupe paplay et on nettoie le fichier trap 'rm -f "$TMP_WAV"; [ -n "$PAP_PID" ] && kill $PAP_PID 2>/dev/null; exit' EXIT TERM INT HUP SAMPLE_RATE=$(jq -r .audio.sample_rate < "$BASE_DIR/voices/$VOICE.onnx.json") # Génération de l'audio printf "%s" "$DATA" | "$BASE_DIR/piper/piper" --model "$BASE_DIR/voices/$VOICE.onnx" --output_raw 2>/dev/null \ | sox -v "$VOLUME" -r "$SAMPLE_RATE" -c 1 -b 16 -e signed-integer -t raw - -t wav "$TMP_WAV" tempo "$RATE" pitch "$PITCH" norm 2>/dev/null # Lecture paplay "$TMP_WAV" & PAP_PID=$! wait $PAP_PID EOF chmod +x "$INSTALL_DIR/play_piper.sh" echo "\033[1;36m3. Configuration de Speech-Dispatcher...\033[0m" # Déclaration des voix (incluant le français de Belgique 'fr-BE') echo "DefaultVoice \"$DEFAULT_VOICE\"" > "$CONFIG_PATH" echo "AddVoice \"fr\" \"FEMALE1\" \"$VOICE_FEMME\"" >> "$CONFIG_PATH" echo "AddVoice \"fr\" \"MALE1\" \"$VOICE_HOMME\"" >> "$CONFIG_PATH" echo "AddVoice \"fr-FR\" \"FEMALE1\" \"$VOICE_FEMME\"" >> "$CONFIG_PATH" # Déclaration des commandes cat << EOF >> "$CONFIG_PATH" GenericCmdDependency "sox" GenericCmdDependency "jq" GenericCmdDependency "paplay" GenericExecuteSynth "$INSTALL_DIR/play_piper.sh '\$DATA' '\$VOICE' '\$VOLUME' '\$RATE' '\$PITCH'" GenericRateAdd 1 GenericPitchAdd 1 GenericVolumeAdd 1 GenericRateMultiply 1 GenericPitchMultiply 750 GenericVolumeMultiply 1 EOF # Activation du module dans speechd.conf if ! [ -f "$SPEECHD_CONF" ]; then spd-conf -n; fi if ! grep -q "piper-generic" "$SPEECHD_CONF"; then echo "\nAddModule \"piper-generic\" \"sd_generic\" \"piper-generic.conf\"" >> "$SPEECHD_CONF" fi sed -i 's/^DefaultModule.*/DefaultModule piper-generic/' "$SPEECHD_CONF" echo "\033[1;36m4. Vérification/Téléchargement de Piper (binaires)...\033[0m" if [ -x "$INSTALL_DIR/piper/piper" ]; then echo " > Piper est déjà présent. Téléchargement ignoré." else echo " > Piper introuvable. Téléchargement en cours..." PIPER_BIN_GZ=$(mktemp) curl -L -o "$PIPER_BIN_GZ" "$PIPER_BIN_GZ_URL" tar -xzf "$PIPER_BIN_GZ" -C "$INSTALL_DIR" rm "$PIPER_BIN_GZ" echo " > Piper installé avec succès." fi # Ré-écriture du script de téléchargement des voix cat <<'EOF' > "$INSTALL_DIR/check_piper_voice.sh" #!/bin/sh VOICE=$1 BASE_URL="https://huggingface.co/rhasspy/piper-voices/resolve/main" cd "$(dirname "$0")" if ! [ -f "voices/$VOICE.onnx" ]; then echo " > Téléchargement de la voix $VOICE..." LANG_F=$(echo "$VOICE" | cut -d '-' -f 1) LANG_S=$(echo "$LANG_F" | cut -d '_' -f 1) NAME=$(echo "$VOICE" | cut -d '-' -f 2) QUAL=$(echo "$VOICE" | cut -d '-' -f 3) curl -L -o "voices/$VOICE.onnx" "$BASE_URL/$LANG_S/$LANG_F/$NAME/$QUAL/$VOICE.onnx?download=true" curl -L -o "voices/$VOICE.onnx.json" "$BASE_URL/$LANG_S/$LANG_F/$NAME/$QUAL/$VOICE.onnx.json?download=true" else echo " > La voix $VOICE est déjà présente. Téléchargement ignoré." fi EOF chmod +x "$INSTALL_DIR/check_piper_voice.sh" echo "\033[1;36m5. Vérification/Téléchargement des voix sélectionnées...\033[0m" "$INSTALL_DIR/check_piper_voice.sh" "$VOICE_FEMME" "$INSTALL_DIR/check_piper_voice.sh" "$VOICE_HOMME" echo "\033[1;36m6. Lancement de Speech-Dispatcher...\033[0m" speech-dispatcher -d sleep 1 echo "\n\033[1;32mInstallation terminée avec succès !\033[0m" echo "Test audio en cours..." spd-say "Votre script de synthèse vocale est maintenant parfait."
Manuellement
Installation
1. Téléchargez l'exécutable depuis GitHub releases (fichier piper_amd64.tar.gz pour Linux 64-bit)
# Télécharger et extraire wget https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_amd64.tar.gz tar -xzf piper_amd64.tar.gz sudo mv piper /usr/local/bin/
2. Téléchargez une voix française (par exemple "fr_FR-siwis-medium")
# Créez un dossier pour les voix sudo mkdir -p /usr/share/piper-voices/ cd /usr/share/piper-voices/ # Téléchargez la voix française sudo wget https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/siwis/medium/fr_FR-siwis-medium.onnx sudo wget https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/siwis/medium/fr_FR-siwis-medium.onnx.json
Test direct avec Piper :
echo "Bonjour, ceci est une voix neuronale de haute qualité" | \ piper --model /usr/share/piper-voices/fr_FR-siwis-medium.onnx --output_file /tmp/speech.wav aplay /tmp/speech.wav
Configuration avec Speech Dispatcher
Créez le fichier de configuration pour le module générique avec les droits d’administration /etc/speech-dispatcher/modules/piper-generic.conf avec le contenu :
# Piper TTS generic module configuration GenericExecuteSynth "piper --model /usr/share/piper-voices/fr_FR-siwis-medium.onnx --output_raw" AddVoice "fr_FR-siwis-medium" "French (Medium)" DefaultLanguage "fr" GenericAddLanguage "fr" "fr_FR-siwis-medium"
Ajoutez le module à Speech Dispatcher en éditant le fichier avec les droits d’administration /etc/speech-dispatcher/speechd.conf et ajoutez la ligne :
AddModule "piper-generic" "sd_generic" "piper-generic.conf"
Puis activez-le par défaut :
echo 'DefaultModule piper-generic' >> ~/.config/speech-dispatcher/speechd.conf
Redémarrez Speech Dispatcher :
sudo systemctl restart speech-dispatcher
Voix françaises disponibles pour Piper :
| Voix | Qualité | Taille |
|---|---|---|
fr_FR-siwis-medium | Bonne | ~50 Mo |
fr_FR-siwis-high | Excellente | ~150 Mo |
fr_FR-gilles-low | Rapide (embarqué) | ~15 Mo |
Liens utiles :
