paint-brush
Как настроить синтезатор речи Piper на локальном компьютерек@biq
2,263 чтения
2,263 чтения

Как настроить синтезатор речи 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 и именованные каналы.


Чтобы настроить Piper в системе на базе GNU/Linux, я опишу общую архитектуру с использованием именованных каналов, которая достаточно проста, чтобы обеспечить преобразование текста в речь в масштабах всей системы, с небольшой ручной настройкой, с помощью piper. -свисток и некоторые незначительные компромиссы (это просто, но не поддерживает параллельную обработку речи).


Для начала давайте получим последнюю версию автономного Piper, собранную из репозитория, размещенного на GitHub ( 2023.11.14-2 на момент написания статьи). После загрузки сжатого архива мы создадим структуру каталогов для установки нашего пайпера. Корневой каталог должен находиться в /opt/wind со следующими подкаталогами:


  • /opt/wind/piper (поместит построенный волынщик)
  • /opt/wind/channels (будет содержать именованные каналы)


После распаковки исполняемый файл Piper должен быть доступен в /opt/wind/piper/piper , а также сопутствующие библиотеки и espeak-ng-data .

Для управления моделями голоса, используемыми Piper, я бы рекомендовал использовать Piper-Whistle — утилиту командной строки, написанную на Python, которая упрощает загрузку голосов и управление ими.


Вы можете получить последнюю версию файла Wheel на странице выпуска gitlab или github . После установки файла колеса давайте получим голос, чтобы сгенерировать речь. Сначала давайте обновим базу данных, вызвав piper_whistle -vR . Из английской речи мне очень нравится женский голос по имени Альба. Используя свисток, мы можем получить список всех доступных английских (GB) голосов, используя piper_whistle list -l en_GB -i 2 . Голос имеет индекс 2. Поэтому для установки просто вызовите piper_whistle install en_GB 2 .


Далее создадим необходимые именованные каналы. Итоговая структура будет выглядеть так:

  • /opt/wind/channels/speak (принимает полезную нагрузку JSON)
  • /opt/wind/channels/input (прочитано Пайпером)
  • /opt/wind/channels/ouput (написано Пайпером)


Чтобы создать именованный канал, вы можете использовать следующую команду: mkfifo -m 755 /opt/wind/channels/input


Наконец, мы создаем три процесса в отдельных оболочках:

  • 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 гарантирует, что канал остается открытым даже после завершения обработки конвейером или aplay . Таким образом, мы можем ставить запросы TTS в очередь и впоследствии воспроизводить или сохранять их.


Поскольку piper-whistle предлагает дополнительные возможности, если вы используете приведенную выше структуру, теперь мы можем генерировать речь через piper_whistle speak "This is quite neat" . В системах с X11 вы можете создать голосовую версию текста в буфере обмена с помощью piper_whistle speak "$(xsel --clipboard --output)" .