Давайте посмотрим, как можно настроить специальный локальный (автономный) синтезатор речи, используя 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
Наконец, мы создаем три процесса в отдельных оболочках:
tail -F /opt/wind/channels/speak | tee /opt/wind/channels/input
/opt/wind/piper/piper -m $(piper_whistle path alba@medium) --debug --json-input --output_raw < /opt/wind/channels/input > /opt/wind/channels/output
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)"
.