Давайте посмотрим, как можно настроить специальный локальный (автономный) синтезатор речи, используя , Piper-Whistle и именованные каналы. 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, которая упрощает загрузку голосов и управление ими. Вы можете получить последнюю версию файла Wheel на странице выпуска или . После установки файла колеса давайте получим голос, чтобы сгенерировать речь. Сначала давайте обновим базу данных, вызвав . Из английской речи мне очень нравится женский голос по имени Альба. Используя свисток, мы можем получить список всех доступных английских (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 (прочитано Пайпером) /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 гарантирует, что канал остается открытым даже после завершения обработки конвейером или . Таким образом, мы можем ставить запросы TTS в очередь и впоследствии воспроизводить или сохранять их. aplay Поскольку piper-whistle предлагает дополнительные возможности, если вы используете приведенную выше структуру, теперь мы можем генерировать речь через . В системах с X11 вы можете создать голосовую версию текста в буфере обмена с помощью . piper_whistle speak "This is quite neat" piper_whistle speak "$(xsel --clipboard --output)"