では、 piper 、piper-whistle、および名前付きパイプを使用して、アドホックなローカル (オフライン) テキスト読み上げシンセサイザーをセットアップする方法を見てみましょう。
GNU/Linux ベースのシステムで Piper をセットアップするために、名前付きパイプを使用する一般的なアーキテクチャについて説明します。これは、piper の助けを借りて、少しの手動セットアップでシステム全体のテキスト読み上げを可能にするのに十分簡単です。 -ホイッスルといくつかの小さなトレードオフ (シンプルですが、並列音声処理はサポートされません)。
まず、 github でホストされているリポジトリ(これを書いている時点では2023.11.14-2 ) からビルドされた最新の Piper スタンドアロンを取得しましょう。圧縮アーカイブをダウンロードした後、piper セットアップ用のディレクトリ構造を作成します。ルート ディレクトリは/opt/wind
にあり、次のサブディレクトリがあります。
/opt/wind/piper
(構築されたパイパーを格納します)/opt/wind/channels
(名前付きパイプが含まれます)
解凍後、piper 実行可能ファイル/opt/wind/piper/piper
、および付随するライブラリおよびespeak-ng-data
で利用可能になります。
Piper で使用される音声モデルを管理するには、Python で書かれたコマンドライン ユーティリティである Piper-whistle を使用することをお勧めします。これにより、音声のダウンロードと管理がより便利になります。
最新のホイール ファイルは、 gitlabまたはgithubリリース ページから入手できます。ホイールファイルをインストールしたら、音声を取得して音声を生成しましょう。まず、 piper_whistle -vR
を呼び出してデータベースを更新しましょう。英語の音声ではアルバという女性の声がとても好きです。 whistle を使用すると、 piper_whistle list -l en_GB -i 2
を使用して、利用可能なすべての英語 (GB) 音声のリストを取得できます。音声はインデックス 2 にあります。したがって、インストールするには、単にpiper_whistle install en_GB 2
を呼び出します。
次に、必要な名前付きパイプを作成しましょう。結果の構造は次のようになります。
/opt/wind/channels/speak
(JSON ペイロードを受け入れます)/opt/wind/channels/input
(piper によって読み取られます)/opt/wind/channels/ouput
(piper によって作成)
名前付きパイプを作成するには、次のコマンドを使用できます: mkfifo -m 755 /opt/wind/channels/input
最後に、別のシェルに 3 つのプロセスを作成します。
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
tty0 のプロセスは、piper またはaplayによる処理が終了した後でも、パイプが開いたままであることを確認します。このようにして、TTS リクエストをキューに入れ、その後、それらを再生または保存できます。
上記の構造を使用すると、piper-whistle は追加機能を提供するため、 piper_whistle speak "This is quite neat"
を介して音声を生成できるようになります。 X11 を搭載したシステムではpiper_whistle speak "$(xsel --clipboard --output)"
を使用して、クリップボード内のテキストの音声バージョンを生成できます。