Voyons comment configurer un synthétiseur de synthèse vocale ad hoc, local (hors ligne) en utilisant piper , piper-whistle et des tubes nommés.
Pour configurer Piper sur un système basé sur GNU/Linux, je vais décrire une architecture générale utilisant des canaux nommés, qui est suffisamment simple pour permettre la synthèse vocale à l'échelle du système, avec un peu de configuration manuelle, l'aide de Piper. -sifflet et quelques compromis mineurs (c'est simple, mais il ne prend pas en charge le traitement vocal parallèle).
Pour commencer, récupérons le dernier piper autonome construit à partir de son référentiel hébergé sur github ( 2023.11.14-2 au moment de la rédaction de ces lignes). Après avoir téléchargé l'archive compressée, nous allons créer une structure de répertoires pour notre configuration Piper. Le répertoire racine doit se trouver dans /opt/wind
avec les sous-répertoires suivants :
/opt/wind/piper
(hébergera le piper construit)/opt/wind/channels
(contiendra les canaux nommés)
Après la décompression, l'exécutable piper devrait être disponible sur /opt/wind/piper/piper
, ainsi que les bibliothèques qui l'accompagnent et espeak-ng-data
.
Pour gérer les modèles vocaux utilisés par Piper, je recommanderais d'utiliser Piper-Whistle, un utilitaire de ligne de commande écrit en python, qui facilite le téléchargement et la gestion des voix.
Vous pouvez obtenir le dernier fichier de roue sur sa page de version gitlab ou github . Après avoir installé le fichier wheel, récupérons une voix pour générer de la parole. Mettons d'abord à jour la base de données en appelant piper_whistle -vR
. Pour le discours anglais, j'aime bien la voix féminine appelée alba. En utilisant Whistle, nous pouvons obtenir la liste de toutes les voix anglaises (GB) disponibles en utilisant piper_whistle list -l en_GB -i 2
. La voix est à l'index 2. Donc, pour installer, appelez simplement piper_whistle install en_GB 2
.
Ensuite, créons les canaux nommés nécessaires. La structure résultante ressemblera à ceci :
/opt/wind/channels/speak
(accepte la charge utile JSON)/opt/wind/channels/input
(lu par Piper)/opt/wind/channels/ouput
(écrit par Piper)
Pour créer un canal nommé, vous pouvez utiliser la commande suivante : mkfifo -m 755 /opt/wind/channels/input
Enfin, nous créons trois processus dans des shells séparés :
tail -F /opt/wind/channels/speak | tee /opt/wind/channels/input
/opt/wind/piper/piper -m $(piper_whistle path alba@medium) --debug --json-input --output_raw < /opt/wind/channels/input > /opt/wind/channels/output
aplay --buffer-size=777 -r 22050 -f S16_LE -t raw < /opt/wind/channels/output
Le processus sur tty0 garantit que le tuyau reste ouvert, même une fois le traitement par piper ou aplay terminé. De cette façon, nous pouvons mettre en file d’attente les requêtes TTS et ensuite les lire ou les enregistrer.
Puisque piper-whistle offre des fonctionnalités supplémentaires si vous utilisez la structure ci-dessus, nous pouvons désormais générer de la parole via piper_whistle speak "This is quite neat"
. Sur les systèmes avec X11, vous pouvez générer une version parlée du texte dans votre presse-papiers via piper_whistle speak "$(xsel --clipboard --output)"
.