Werfen wir einen Blick darauf, wie man einen Ad-hoc-, lokalen (Offline-)Text-to-Speech-Synthesizer mit , Piper-Whistle und Named Pipes einrichten kann. Piper 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 ( 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 mit den folgenden Unterverzeichnissen: auf Github gehosteten Repository 2023.11.14-2 /opt/wind (wird den gebauten Piper beherbergen) /opt/wind/piper (enthält die Named Pipes) /opt/wind/channels Nach dem Dekomprimieren sollte die ausführbare Piper-Datei unter sowie die zugehörigen Bibliotheken und verfügbar sein. /opt/wind/piper/piper espeak-ng-data 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 oder 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 aufrufen. Für die englische Sprache gefällt mir die weibliche Stimme namens Alba sehr gut. Mit whistle können wir mit alle verfügbaren englischen (GB) Stimmen auflisten. Die Stimme befindet sich auf Index 2. Zur Installation rufen Sie einfach auf. Gitlab- Github- piper_whistle -vR piper_whistle list -l en_GB -i 2 piper_whistle install en_GB 2 Als Nächstes erstellen wir die erforderlichen Named Pipes. Die resultierende Struktur sieht folgendermaßen aus: (akzeptiert JSON-Nutzlast) /opt/wind/channels/speak (von Piper gelesen) /opt/wind/channels/input (geschrieben von Piper) /opt/wind/channels/ouput 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: tty0: tail -F /opt/wind/channels/speak | tee /opt/wind/channels/input tty1: /opt/wind/piper/piper -m $(piper_whistle path alba@medium) --debug --json-input --output_raw < /opt/wind/channels/input > /opt/wind/channels/output tty2: 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 abgeschlossen ist. Auf diese Weise können wir TTS-Anfragen in die Warteschlange stellen und sie anschließend abspielen oder speichern. Aplay Da „piper-whistle“ zusätzliche Funktionen bietet, wenn Sie die obige Struktur verwenden, können wir jetzt über Sprache erzeugen. Systemen mit piper_whistle speak "This is quite neat" piper_whistle speak "$(xsel --clipboard --output)"