Werfen wir einen Blick darauf, wie man einen Ad-hoc-, lokalen (Offline-)Text-to-Speech-Synthesizer mit Piper , Piper-Whistle und Named Pipes einrichten kann.
Um Piper auf einem GNU/Linux-basierten System einzurichten, beschreibe ich eine allgemeine Architektur mit benannten Pipes, die einfach genug ist, um systemweites Text-to-Speech mit ein wenig manueller Einrichtung mithilfe von Piper zu ermöglichen -whistle und einige kleinere Kompromisse (es ist einfach, unterstützt aber keine parallele Sprachverarbeitung).
Zunächst holen wir uns die neueste Standalone-Version von Piper aus dem auf Github gehosteten Repository ( 2023.11.14-2 zum Zeitpunkt des Verfassens dieses Artikels). Nachdem wir das komprimierte Archiv heruntergeladen haben, erstellen wir eine Verzeichnisstruktur für unser Piper-Setup. Das Stammverzeichnis befindet sich unter /opt/wind
mit den folgenden Unterverzeichnissen:
/opt/wind/piper
(wird den gebauten Piper beherbergen)/opt/wind/channels
(enthält die Named Pipes)
Nach dem Dekomprimieren sollte die ausführbare Piper-Datei unter /opt/wind/piper/piper
sowie die zugehörigen Bibliotheken und espeak-ng-data
verfügbar sein.
Für die Verwaltung der von Piper verwendeten Sprachmodelle würde ich die Verwendung von „piper-whistle“ empfehlen, einem in Python geschriebenen Befehlszeilen-Dienstprogramm, das das Herunterladen und Verwalten von Stimmen bequemer macht.
Sie können die neueste Wheel-Datei von der Gitlab- oder Github- Release-Seite herunterladen. Nach der Installation der Wheel-Datei holen wir uns eine Stimme, um etwas Sprache zu erzeugen. Lassen Sie uns zunächst die Datenbank aktualisieren, indem wir piper_whistle -vR
aufrufen. Für die englische Sprache gefällt mir die weibliche Stimme namens Alba sehr gut. Mit whistle können wir mit piper_whistle list -l en_GB -i 2
alle verfügbaren englischen (GB) Stimmen auflisten. Die Stimme befindet sich auf Index 2. Zur Installation rufen Sie einfach piper_whistle install en_GB 2
auf.
Als Nächstes erstellen wir die erforderlichen Named Pipes. Die resultierende Struktur sieht folgendermaßen aus:
/opt/wind/channels/speak
(akzeptiert JSON-Nutzlast)/opt/wind/channels/input
(von Piper gelesen)/opt/wind/channels/ouput
(geschrieben von Piper)
Um eine Named Pipe zu erstellen, können Sie den folgenden Befehl verwenden: mkfifo -m 755 /opt/wind/channels/input
Schließlich erstellen wir drei Prozesse in separaten Shells:
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
Der Prozess auf tty0 stellt sicher, dass die Pipe offen bleibt, auch nachdem die Verarbeitung durch Piper oder Aplay abgeschlossen ist. Auf diese Weise können wir TTS-Anfragen in die Warteschlange stellen und sie anschließend abspielen oder speichern.
Da „piper-whistle“ zusätzliche Funktionen bietet, wenn Sie die obige Struktur verwenden, können wir jetzt über piper_whistle speak "This is quite neat"
Sprache erzeugen. piper_whistle speak "$(xsel --clipboard --output)"
Systemen mit