Как настроить синтезатор речи Piper на локальном компьютере

Как настроить синтезатор речи Piper на локальном компьютере

18 декабря 2023 г.

Давайте посмотрим, как можно настроить специальный локальный (автономный) синтезатор речи, используя piper, свисток и именованные трубы.

Чтобы настроить 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, которая упрощает загрузку голосов и управление ими.

Вы можете получить последнюю версию файла колеса из 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/output (написано Пайпером)

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

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

  • tty0: tail -F /opt/wind/channels/speak | тройник /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, говорящего «Это довольно аккуратно». В системах с X11 вы можете создать голосовую версию текста в буфере обмена с помощью piper_whistle talk "$(xsel --clipboard --output)".


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE