paint-brush
如何在本地计算机上设置 Piper 语音合成器by@biq
1,658
1,658

如何在本地计算机上设置 Piper 语音合成器

biq2m2023/12/18
Read on Terminal Reader

让我们看一下如何使用 Piper、Piper-whistle 和命名管道设置一个临时的、本地(离线)文本到语音合成器。
featured image - 如何在本地计算机上设置 Piper 语音合成器
biq HackerNoon profile picture
0-item
1-item

让我们看一下如何使用Piper 、 Piper-whistle 和命名管道设置一个临时的、本地(离线)文本到语音合成器。


为了在基于 GNU/Linux 的系统上设置 Piper,我将描述使用命名管道的通用体系结构,该体系结构足够简单,可以在 Piper 的帮助下进行一些手动设置,从而允许系统范围内的文本到语音转换-口哨和一些小的权衡(很简单,但它不支持并行语音处理)。


首先,让我们从github 上托管的存储库中获取最新的 Piper 独立版本(撰写本文时为2023.11.14-2 )。下载压缩档案后,我们将为 Piper 设置创建一个目录结构。根目录应位于/opt/wind包含以下子目录:


  • /opt/wind/piper (将容纳所建造的 Piper)
  • /opt/wind/channels (将包含命名管道)


解压后, Piper 可执行文件应位于/opt/wind/piper/piper ,以及随附的库和espeak-ng-data

为了管理 Piper 使用的语音模型,我建议使用 Piper-whistle,这是一个用 Python 编写的命令行实用程序,它可以更方便地下载和管理语音。


您可以从其gitlabgithub发布页面获取最新的 Wheel 文件。安装wheel文件后,让我们获取一个声音来生成一些语音。首先,我们通过调用piper_whistle -vR来更新数据库。对于英语演讲,我很喜欢叫alba的女声。使用口哨,我们可以使用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


最后,我们在不同的 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 或aplay的处理完成后也是如此。这样,我们就可以对 TTS 请求进行排队,然后播放或保存它们。


由于如果您使用上面的结构,piper-whistle 会提供额外的功能,因此我们现在可以通过piper_whistle speak "This is quite neat" 。在具有 X11 的系统上,您可以通过piper_whistle speak "$(xsel --clipboard --output)"在剪贴板中生成文本的语音版本。