让我们看一下如何使用 、 Piper-whistle 和命名管道设置一个临时的、本地(离线)文本到语音合成器。 Piper 为了在基于 GNU/Linux 的系统上设置 Piper,我将描述使用命名管道的通用体系结构,该体系结构足够简单,可以在 Piper 的帮助下进行一些手动设置,从而允许系统范围内的文本到语音转换-口哨和一些小的权衡(很简单,但它不支持并行语音处理)。 首先,让我们从 中获取最新的 Piper 独立版本(撰写本文时为 )。下载压缩档案后,我们将为 Piper 设置创建一个目录结构。根目录应位于 包含以下子目录: github 上托管的存储库 2023.11.14-2 /opt/wind (将容纳所建造的 Piper) /opt/wind/piper (将包含命名管道) /opt/wind/channels 解压后, Piper 可执行文件应位于 ,以及随附的库和 。 /opt/wind/piper/piper espeak-ng-data 为了管理 Piper 使用的语音模型,我建议使用 Piper-whistle,这是一个用 Python 编写的命令行实用程序,它可以更方便地下载和管理语音。 您可以从其 或 发布页面获取最新的 Wheel 文件。安装wheel文件后,让我们获取一个声音来生成一些语音。首先,我们通过调用 来更新数据库。对于英语演讲,我很喜欢叫alba的女声。使用口哨,我们可以使用 列出所有可用的英语 (GB) 语音。声音位于索引 2。因此安装只需调用 即可。 gitlab github piper_whistle -vR piper_whistle list -l en_GB -i 2 piper_whistle install en_GB 2 接下来,让我们创建必要的命名管道。最终的结构将如下所示: (接受 JSON 负载) /opt/wind/channels/speak (由 Piper 读取) /opt/wind/channels/input (由 Piper 编写) /opt/wind/channels/ouput 要创建命名管道,您可以使用以下命令: mkfifo -m 755 /opt/wind/channels/input 最后,我们在不同的 shell 中创建三个进程: 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 tty0 上的进程确保管道保持打开状态,即使在 Piper 或 的处理完成后也是如此。这样,我们就可以对 TTS 请求进行排队,然后播放或保存它们。 aplay 由于如果您使用上面的结构,piper-whistle 会提供额外的功能,因此我们现在可以通过 。在具有 X11 的系统上,您可以通过 在剪贴板中生成文本的语音版本。 piper_whistle speak "This is quite neat" piper_whistle speak "$(xsel --clipboard --output)"