Участник:Petr-akhlamov/Наработки по речи: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
м (Petr-akhlamov переименовал страницу Участник:Petr-akhlamov/Песочница в Участник:Petr-akhlamov/Наработки по речи без оставления перенаправления)
 
(не показано 70 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''GLPI''' — аббревиатура для '''Gestionnaire libre de parc informatique''' (Свободный менеджер ИТ-инфраструктуры) - система работы с заявками и инцидентами, а также для инвентаризации компьютерного оборудования.
=Словари=
Вот, что получилось по озвучке в Словарях:
 
Есть три словаря:
*GoldenDict
*QstarDict
*StarDict
 
Есть ограниченный набор озвученных слов:
*WyabdcRealPeopleTTS
 
Файлы TTS лежат в:
/usr/share/WyabdcRealPeopleTTS
/usr/share/OtdRealPeopleTTS
 
Есть файл словарей:
*stardict-slovnyk_en-ru
*stardict-slovnyk_ru-en
*stardict-quick_en-ru
*stardict-quick_ru-en
 
Работать будем с StarDict, потому что именно там получилось завести озвучку.
 
==Установка==
# apt-get install stardict
# apt-get install stardict-slovnyk_en-ru stardict-slovnyk_ru-en stardict-quick_en-ru stardict-quick_ru-en
 
<!--
==Неудачные попытки сделать озвучку==
 
===Где озвучка работает без Festival===
StatDict/GoldenDict. В настройках звука программы.
 
английские слова читаются при:
*goldendict - использовать встроенный плеер
*stardict - aplay и все снято
 
===Разборки с Festival ===
====Первая попытка====
if [[ 'echo %GDWORD% | grep [аяоёуюэеыи]' ]] then [['echo %GDWORD% | festival --tts --language russian']] else [['echo %GDWORD% | festival --tts']]
 
====Попытка исправления синтаксиса нейросетью====
Сгенерировал так:
 
bash
if echo "$GDWORD" | grep -q '[аяоёуюэеыи]'; then
    echo "$GDWORD" | festival --tts --language russian
else
    echo "$GDWORD" | festival --tts
fi
 
В одну строчку сделал так:
if echo "$GDWORD" | grep -q '[аяоёуюэеыи]'; then echo "$GDWORD" | festival --tts --language russian else echo "$GDWORD" | festival --tts fi
 
Звук в словарях не работает. Консоль ругается на синтаксис.
 
====Формат чтения словаря====
Как я думал читает слова фестиваль в словарях:
echo "$GDWORD" | festival --tts
 
Как читает фестиваль на самом деле:
echo %s | festival --tts
 
====Попытки сборки единой команды====
Проверяем в консоли.
 
Вводим значение переменной:
s=home
 
s=Петя
 
С каждой переменной выполняем каждую команду
 
Команды для Словарей:
 
if echo %s | grep -q '[аяоёуюэеыи]'; then echo %s | festival --tts --language russian else echo %s | festival --tts fi
^криво написана {{fail}}
 
if echo %s | grep -q '[а-яА-я]'; then echo %s | festival --tts --language russian else echo %s | festival --tts fi
^криво написана {{fail}}
 
if (echo %s | grep -q '[а-яА-я]'); then (echo %s | festival --tts --language russian) else (echo %s | festival --tts) fi
^такая сложная команда в словаре не срабатывает {{ok}}
 
Команды для консоли:
 
if echo $s | grep -q '[аяоёуюэеыи]'; then echo $s | festival --tts --language russian else echo $s | festival --tts fi
^криво написана {{fail}}
 
if echo $s | grep -q '[а-яА-я]'; then echo $s | festival --tts --language russian else echo $s | festival --tts fi
^криво написана {{fail}}
 
if (echo $s | grep -q '[а-яА-я]*'); then (echo $s | festival --tts --language russian) else (echo $s | festival --tts) fi
^Определяет язык и читает {{ok}}
 
====StatDict====
У Stardict переменная %s
 
Читает раздельно по english и Russian
echo %s | festival --tts --language russian
 
echo %s | festival --tts
 
Команда "на вместе" в stardict не работет:
 
if (echo %s | grep -q "[а-яА-я]*"); then (echo %s | festival --tts --language russian) else (echo %s | festival --tts) fi
 
Зато работает в консоли:
 
if (echo $s | grep -q "[а-яА-я]*"); then (echo $s | festival --tts --language russian) else (echo $s | festival --tts) fi
 
====Итого====
читает на англицком:
echo %s | festival --tts
 
читает на русском:
echo %s | festival --tts --language russian
 
*в stardict читает по раздельности
*goldendict не видит команду
*qstardict не видит команду
 
===RHVoice===
Команда RHVoice читает и по русски и по английски:
echo %s | RHVoice-test -p anna+clb | aplay
-->
==Как все на самом деле==
{{nav|Stardict|Домик|Управление модулями}}
 
Видим:
*TTS-система
**Espeak 1.0
 
На самом деле, что бы мы не прописывали в настройки, Stardict использует Espeak.
 
В настройках модуля можно выбрать русский, но там ужасное произношение.
 
На Github-е проекта в модулях (из того, что есть в Альте) есть:
 
https://github.com/huzheng001/stardict-3/tree/master/dict/stardict-plugins
 
*Festival
 
В gear у ALT-а тоже есть этот плагин:
https://git.altlinux.org/gears/s/stardict.git?p=stardict.git;a=tree;f=stardict/dict/stardict-plugins;h=16f970e56308cdfd470e9e1d046ef65183482181;hb=f36a632d3ef208f1f015cebb9f2d6b57f7676b6e
Но в пакетах его нет:
https://packages.altlinux.org/ru/sisyphus/srpms/stardict/
 
=Речь=
==Некоторые заметки==
Spech dispathcer от Ubuntu:
 
[Unit]
Description=Speech-Dispatcher, common interface to speech synthesizers
[Service]
Type=forking
User=speech-dispatcher
PIDFile=/run/speech-dispatcher/speech-dispatcher.pid
ExecStart=/usr/bin/speech-dispatcher -d --pid-file /run/speech-dispatcher/speech-dispatcher.pid
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Alias=speech-dispatcher.service


==Установка==
==Установка==
===P10===
*Основной движок:
====Устанавливаем GLPI, Apache, PHP8.1 и его модули, MySQL====
# apt-get install speech-dispatcher
  $ su -
*Утилиты Speech Dispatcher:
  # apt-get install glpi glpi-apache2 glpi-php8.2 apache2-mod_php8.2 mariadb-client mariadb-server php8.2-mysqlnd php8.2-mbstring php8.2-openssl php8.2-xmlrpc php8.2-zip
# apt-get install speech-dispatcher-utils speech-dispatcher-module-festival
Конфигурация движка и тест:
spd-conf #настройка
spd-say #произнести текст (по-умолчанию только на английском)
sdpsend #отправка на какой-то сервер с портом
*orca
# apt-get install orca
*пакеты festival для speech-dispatcher
# apt-get install festival-freebsoft-utils
*RHVoice
# apt-get install RHVoice
 
==Проверяем фестиваль==
{{Note|Через spd не работает}}
$ spd-say -o festival -l en hello
^"работает", но по сути нет (по факту, это просто английский голос из другого движка, фестиваля в списке модулей нет)
$ spd-say -o festival -l russian привет
^не работает
 
==служба speech-dispatcherd.service не запускается==
 
Логи в Альте:
 
systemctl status speech-dispatcherd.service
× speech-dispatcherd.service - Speech-Dispatcher an high-level device independent layer for speech synthesis.
      Loaded: loaded (/lib/systemd/system/speech-dispatcherd.service; enabled; vendor preset: disabled)
      Active: failed (Result: exit-code) since Tue 2024-09-24 15:01:24 MSK; 16min ago
        CPU: 13ms
сен 24 15:01:24 client.petr.ru systemd[1]: Starting Speech-Dispatcher an high-level device independent layer for speech synthesis....
сен 24 15:01:24 client.petr.ru speech-dispatcher[12365]: [Tue Sep 24 15:01:24 2024 : 53693] speechd: Speech Dispatcher 0.10.2 starting
сен 24 15:01:24 client.petr.ru systemd[1]: speech-dispatcherd.service: Control process exited, code=exited, status=1/FAILURE
сен 24 15:01:24 client.petr.ru systemd[1]: speech-dispatcherd.service: Failed with result 'exit-code'.
сен 24 15:01:24 client.petr.ru systemd[1]: Failed to start Speech-Dispatcher an high-level device independent layer for speech synthesis..
 
Похожий лог в Manjaro:
https://github.com/brailcom/speechd/issues/640?ysclid=m1gbv94cme875550317
 
Nov 10 21:42:32 wiley speech-dispatcher[3128]: [Wed Nov 10 21:42:32 2021 : 132158] speechd: Speech Dispatcher 0.10.2 starting
Nov 10 21:42:32 wiley systemd[1]: speech-dispatcherd.service: Control process exited, code=exited, status=1/FAILURE
░░ Subject: Unit process exited
  ░░ Defined-By: systemd
░░ Support: https://forum.manjaro.org/c/support
░░
  ░░ An ExecStart= process belonging to unit speech-dispatcherd.service has exited.
░░
░░ The process' exit code is 'exited' and its exit status is 1.
Nov 10 21:42:32 wiley systemd[1]: speech-dispatcherd.service: Failed with result 'exit-code'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: https://forum.manjaro.org/c/support
░░
░░ The unit speech-dispatcherd.service has entered the 'failed' state with result 'exit-code'.
Nov 10 21:42:32 wiley systemd[1]: Failed to start Speech-Dispatcher an high-level device independent layer for speech synthesis..
░░ Subject: A start job for unit speech-dispatcherd.service has failed
░░ Defined-By: systemd
░░ Support: https://forum.manjaro.org/c/support
░░
░░ A start job for unit speech-dispatcherd.service has finished with a failure.
░░
░░ The job identifier is 1578 and the job result is failed.
 
Советуют проверить командами:
>spd-say -O
^показывает список подключенных к speech dispatcher модулей
OUTPUT MODULES
flite
espeak


<!-- нету: php5-dom --- -->
>spd-say -L
====Включаем сайт и модуль rewrite====
^получить список синтезируемых голосов
Подключаем виртуальный хост glpi:
# a2ensite glpi


# a2enmod rewrite
Логи:
Запускаем mysql и apache:  
  /run/user/500/speech-dispatcher/log
  # systemctl enable --now mysqld httpd2


====Настройка базы данных====
===Невозможно создать pid-файл===
Запускаем консоль MySQL от имени суперпользователя:
По команде просмотра логов:
  # mysql -u root
  # journalctl -u speech-dispatcherd.service
Создаем пользователя glpi с паролем "пароль":
Видим строку:
  mysql> create user 'glpi'@localhost identified by 'пароль';
  Can't create pid file in /run/speech-dispatcher/speech-dispatcher.pid, wrong permissions?
Создаем БД под названием "glpi":
Создаем каталог:
  mysql> create database glpi;
  # mkdir /run/speech-dispatcher/
Подключаемся к новосозданной БД:
И даем всем права на rw:  
mysql> use glpi;
  # chmod -R 666 /run/speech-dispatcher/
Выдаем все права на пользователя glpi:
  mysql> grant all privileges on *.* to 'glpi'@localhost;
Применяем привелегии:
mysql> flush privileges;
Выходим из консоли:
mysql> \q


==== Настройка php.ini====
/usr/lib/systemd/system/speech-dispatcherd.service
Для GLPI нужно включить директиву '''session.cookie_httponly'''.


Для этого правим файл {{path|/etc/php/8.2/apache2-mod_php/php.ini}}
[Unit]
Description=Speech-Dispatcher an high-level device independent layer for speech synthesis.
[Service]
Type=forking
ExecStart=/usr/bin/speech-dispatcher -d
[Install]
WantedBy=multi-user.target


и заменяем
==RHVoice==
Если в
/etc/speech-dispatcher/speechd.conf
-расскомментировать
#AddModule "rhvoice"                  "sd_rhvoice"  "rhvoice.conf"
-прописать в
DefaultModule rhvoice
LanguageDefaultModule "en"  "rhvoice"
LanguageDefaultModule "ru"  "rhvoice"


session.cookie_httponly =
После прописывания ошибка:


на
error: Can't connect to unix socket /run/user/500/speech-dispatcher/speechd.sock: В соединении отказано. Autospawn: Autospawn failed. Speech Dispatcher refused to start with  error code, stating this as a reason:
<pre>
Согласно https://www.linux.org.ru/forum/general/15808827?ysclid=m1gc0536k614290331
spd-say не умеет WAV в stdout вообще. Пользуй RHVoice-test. См. https://github.com/Olga-Yakovleva/RHVoice/issues/140
└── https://github.com/RHVoice/RHVoice/issues/140
    Советуют:
    echo "привет" | RHVoice-test -p elena -o /dev/stdout 2>/dev/null | aplay /dev/stdin 2>/dev/null
    └── Yes, I can use speetch-despatcher. But how do I use external players in spd-say?
        └── oh sorry At first I did not understand your situation completely. Unfortunately, this is not possible at the moment. ticket in upstream. https://github.com/brailcom/speechd/issues/348
            └── Speechd/получать звук в виде бинарника https://github.com/brailcom/speechd/issues/348
                └── Speech-dispatcher не работает с RHVoice https://github.com/RHVoice/RHVoice/issues/178 Это проблема не RHVoice, а SD.
</pre>


session.cookie_httponly = on
==Настройка Speechd для RHVoice==
http://linux.tiflocomp.ru/docs/spd_rhvoice_festival.php?ysclid=m1gcfhzn1z592561148


Перезапускаем службу PHP:
Для Альта конфиг с корректными путями будет такой:
  # systemctl restart php8.2-fpm.service
RHVoiceDataPath "/usr/share/RHVoice"
RHVoiceConfigPath "/etc/RHVoice/"
RHVoicePunctuationMode
#RHVoicePunctuationList "@+_"
RHVoiceDefaultVoice "azamat"
  #RHVoiceDefaultVariant "Pseudo-English"
Debug
Но с ним speech-dispatcher не работает.


====Настройка через веб-интерфейс====
Порывшись в других дистрибутивах, в том же Arch-е, откуда я брал отчасти инфу,  обнаружил, что в пакете rhvoice есть модуль для speech-dispatcher-a. В новой последней версии RHVoice, собранной для P11 и Sisyphus она тоже есть.
Дальнейшая настройка производится через веб-интерфейс:
https://packages.altlinux.org/ru/p11/binary/libRHVoice5/x86_64/files/
*http://localhost/glpi/ - если вы запускаете интерфейс прямо на сервере
Искомое:
или
/usr/lib64/speech-dispatcher-modules/sd_rhvoice
*http://IP/glpi/ - если вы запускаете интерфейс с другого компьютера
{{Note|В ALT P10 - 0.7.1, P11/Sisyphus - 1.14.0}}


<gallery>
==Тестирование==
    Изображение: Glpi-install-1.png | Выбираем язык
Вручную тесты работают
    Изображение: Glpi-install-2.png | Соглашаемся с лицензией
$ echo "Альт самый лучший. Я гарантирую!" | festival --tts --language russian
    Изображение: Glpi-install-3.png | Выбираем установку
$ echo "привет" | RHVoice-test -p elena -o /dev/stdout 2>/dev/null | aplay /dev/stdin 2>/dev/null
    Изображение: Glpi-install-4.png | Нажимаем "Продолжить"
$ echo "Тестируем sound" | RHVoice-test -p anna+clb | aplay
    Изображение: Glpi-install-5.png | Вводим настройки пользователя MySQL
А через speech:
    Изображение: Glpi-install-6.png | Выбираем БД
*после включения модуля rhvoice:
    Изображение: Glpi-install-7.png | Инициализация БД
$ spd-say -o festival -l en hello
    Изображение: Glpi-install-8.png | Инициализация БД завершена
Failed to connect to Speech Dispatcher:
    Изображение: Glpi-install-9.png | Настраиваем, по желанию, сбор данных
Error: Can't connect to unix socket /run/user/500/speech-dispatcher/speechd.sock: Нет такого файла или каталога. Autospawn: Autospawn failed. Speech Dispatcher refused to start with error code, stating this as a reason:
    Изображение: Glpi-install-10.png | Информация о ресурсах GLPI
    Изображение: Glpi-install-11.png | Логины и пароли GLPI
</gallery>


Вход в веб-интерфейс:
$ spd-say -o festival -l ru петя
Failed to connect to Speech Dispatcher:
Error: Can't connect to unix socket /run/user/500/speech-dispatcher/speechd.sock: Нет такого файла или каталога. Autospawn: Autospawn failed. Speech Dispatcher refused to start with error code, stating this as a reason:


[[Изображение: Glpi-install-12.png|512px]]
$ spd-say -o rhvoice -l ru петя
Failed to connect to Speech Dispatcher:
Error: Can't connect to unix socket /run/user/500/speech-dispatcher/speechd.sock: Нет такого файла или каталога. Autospawn: Autospawn failed. Speech Dispatcher refused to start with error code, stating this as a reason:


===Sisyphus===
*после выключения и реконфигурации на speech "работает" только festival и rhvoice на английском. Но, проверяем
>spd-say -O
OUTPUT MODULES
flite
espeak
Т.е. по сути, spd-say игнорирует -o и берет только английский язык из flite/espeak.


==Информация==
Те же самые flite и espeak отображаются в orca.
===Логины и пароли===
*glpi/glpi для учетной записи администратора
*tech/tech для технической учетной записи
*normal/normal для обычной учетной записи
*post-only/postonly только для подачи заявок


Вы можете изменить или удалить эти учетные записи.
===Результаты тестов===
==Настройки==
Тесты:
===Приветствие===
# {{cmd|<nowiki>$ echo "Альт самый лучший. Я гарантирую!" | festival --tts --language russian</nowiki>}}
*{{nav|Настройки|Общие|Общие настройки|Текст в окне входа}}
# {{cmd|<nowiki>$ echo "Good morning, children!" | festival --tts --language english</nowiki>}}
===Формат даты===
# {{cmd|<nowiki>$ echo "Альт самый лучший. Я гарантирую!" | RHVoice-test -p elena -o /dev/stdout 2>/dev/null | aplay /dev/stdin 2>/dev/null</nowiki>}}
*{{nav|Настройки|Общие|Значения по умолчанию|Формат даты}}
# {{cmd|<nowiki>$ echo "Good morning, children!" | RHVoice-test -p clb -o /dev/stdout 2>/dev/null | aplay /dev/stdin 2>/dev/null</nowiki>}}
===Уведомления на почту===
# {{cmd|<nowiki>$ echo "Good morning, пользователи Альта!" | RHVoice-test -p anna+clb | aplay</nowiki>}}
*{{nav|Настройки|Аутентификация|Почтовые серверы|+}}
# {{cmd|$ spd-say -o festival -l en "Good morning, children!"}}
==== Gmail ====
# {{cmd|$ spd-say -o festival -l ru "Альт самый лучший. Я гарантирую!"}}
SMTP+TLS
# {{cmd|$ spd-say -o rhvoice -l ru "Альт самый лучший. Я гарантирую!"}}
SMTP Host : smtp.gmail.com
# {{cmd|$ spd-say -o rhvoice -l en "Good morning, children!"}}
Port : 587
# {{cmd|$ spd-say -O}}
login : my gmail account
{|class="wikitable" style="float:center; margin-left:2em"
password : my gmail password
!colspan="3"|Результаты
|-
! || P10 || Sisyphus
|-
!1
| work, good|| bad, см прим.1
|-
!2
| work, good||work, good
|-
!3
| work, good|| work, good, см. прим.2
|-
!4
| work, good|| work, good, см. прим.2
|-
!5
| work, good|| work, good, см. прим.3
|-
!6
|У spd его нет,<br>используется первый из списка ||У spd его нет,<br>используется первый из списка
|-
!7
|Звук не воспроизводится, <br>используется первый из списка <br>flite || У spd его нет,<br>используется первый из списка
|-
!8
|Звук не воспроизводится, <br>используется первый из списка || work, good
|-
!9
|Читает по английски, используется<br>первый из списка || work, good
|-
!10
|OUTPUT MODULES
flite<br>
espeak
||
OUTPUT MODULES<br>
rhvoice<br>
flite<br>
espeak-ng-mbrola<br>
espeak-ng-mbrola-generic<br>
espeak-ng<br>
espeak-mbrola-generic
|-
|}
Примечания:
#сначала, ругается что нет движка mbrola, ставишь, потом ищешь - а там нет русского языка
#Нужно доустановить пакеты: {{cmd|apt-get install RHVoice-Russian-* RHVoice-English-* RHVoice-bin}}
#Нужно вводить без части "{{cmd|<nowiki>| aplay</nowiki>}}"


==== office365 ====
{{Note|На Sisyphus после установки {{cmd|rhvoice}}, настройки {{cmd|speech dispatcher}} с помощью {{cmd|spd-conf}} и запуска {{cmd|orca -s}} заработал экранный диктор.}}
SMTP+TLS
SMTP Host :smtp.office365.com
Port : 587
login : my office365 account
password : my office365 password
==== mail.ru ====
{{Attention|Уведомления на mail.ru отправляются '''только''' если совпадают поля  ''Email администратора системы'' и ''SMTP логин''}}
SMTP+TLS
SMTP Host : smtp.mail.ru
Port : 587
login : account@mail.ru или account@list.ru
password : my mail.ru password

Текущая версия от 01:22, 29 сентября 2024

Словари

Вот, что получилось по озвучке в Словарях:

Есть три словаря:

  • GoldenDict
  • QstarDict
  • StarDict

Есть ограниченный набор озвученных слов:

  • WyabdcRealPeopleTTS

Файлы TTS лежат в:

/usr/share/WyabdcRealPeopleTTS
/usr/share/OtdRealPeopleTTS

Есть файл словарей:

  • stardict-slovnyk_en-ru
  • stardict-slovnyk_ru-en
  • stardict-quick_en-ru
  • stardict-quick_ru-en

Работать будем с StarDict, потому что именно там получилось завести озвучку.

Установка

# apt-get install stardict
# apt-get install stardict-slovnyk_en-ru stardict-slovnyk_ru-en stardict-quick_en-ru stardict-quick_ru-en

Как все на самом деле

Stardict ▷ Домик ▷ Управление модулями

Видим:

  • TTS-система
    • Espeak 1.0

На самом деле, что бы мы не прописывали в настройки, Stardict использует Espeak.

В настройках модуля можно выбрать русский, но там ужасное произношение.

На Github-е проекта в модулях (из того, что есть в Альте) есть:

https://github.com/huzheng001/stardict-3/tree/master/dict/stardict-plugins

  • Festival

В gear у ALT-а тоже есть этот плагин:

https://git.altlinux.org/gears/s/stardict.git?p=stardict.git;a=tree;f=stardict/dict/stardict-plugins;h=16f970e56308cdfd470e9e1d046ef65183482181;hb=f36a632d3ef208f1f015cebb9f2d6b57f7676b6e

Но в пакетах его нет:

https://packages.altlinux.org/ru/sisyphus/srpms/stardict/

Речь

Некоторые заметки

Spech dispathcer от Ubuntu:

[Unit]
Description=Speech-Dispatcher, common interface to speech synthesizers

[Service]
Type=forking
User=speech-dispatcher
PIDFile=/run/speech-dispatcher/speech-dispatcher.pid
ExecStart=/usr/bin/speech-dispatcher -d --pid-file /run/speech-dispatcher/speech-dispatcher.pid
ExecReload=/bin/kill -HUP $MAINPID 

[Install]
WantedBy=multi-user.target
Alias=speech-dispatcher.service

Установка

  • Основной движок:
# apt-get install speech-dispatcher
  • Утилиты Speech Dispatcher:
# apt-get install speech-dispatcher-utils speech-dispatcher-module-festival

Конфигурация движка и тест:

spd-conf #настройка
spd-say #произнести текст (по-умолчанию только на английском)
sdpsend #отправка на какой-то сервер с портом
  • orca
# apt-get install orca
  • пакеты festival для speech-dispatcher
# apt-get install festival-freebsoft-utils
  • RHVoice
# apt-get install RHVoice

Проверяем фестиваль

Примечание: Через spd не работает
$ spd-say -o festival -l en hello

^"работает", но по сути нет (по факту, это просто английский голос из другого движка, фестиваля в списке модулей нет)

$ spd-say -o festival -l russian привет

^не работает

служба speech-dispatcherd.service не запускается

Логи в Альте:

systemctl status speech-dispatcherd.service 
× speech-dispatcherd.service - Speech-Dispatcher an high-level device independent layer for speech synthesis.
     Loaded: loaded (/lib/systemd/system/speech-dispatcherd.service; enabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Tue 2024-09-24 15:01:24 MSK; 16min ago
        CPU: 13ms

сен 24 15:01:24 client.petr.ru systemd[1]: Starting Speech-Dispatcher an high-level device independent layer for speech synthesis....
сен 24 15:01:24 client.petr.ru speech-dispatcher[12365]: [Tue Sep 24 15:01:24 2024 : 53693] speechd: Speech Dispatcher 0.10.2 starting
сен 24 15:01:24 client.petr.ru systemd[1]: speech-dispatcherd.service: Control process exited, code=exited, status=1/FAILURE
сен 24 15:01:24 client.petr.ru systemd[1]: speech-dispatcherd.service: Failed with result 'exit-code'.
сен 24 15:01:24 client.petr.ru systemd[1]: Failed to start Speech-Dispatcher an high-level device independent layer for speech synthesis.. 

Похожий лог в Manjaro: https://github.com/brailcom/speechd/issues/640?ysclid=m1gbv94cme875550317

Nov 10 21:42:32 wiley speech-dispatcher[3128]: [Wed Nov 10 21:42:32 2021 : 132158] speechd: Speech Dispatcher 0.10.2 starting
Nov 10 21:42:32 wiley systemd[1]: speech-dispatcherd.service: Control process exited, code=exited, status=1/FAILURE
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: https://forum.manjaro.org/c/support
░░ 
░░ An ExecStart= process belonging to unit speech-dispatcherd.service has exited.
░░ 
░░ The process' exit code is 'exited' and its exit status is 1.
Nov 10 21:42:32 wiley systemd[1]: speech-dispatcherd.service: Failed with result 'exit-code'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: https://forum.manjaro.org/c/support
░░ 
░░ The unit speech-dispatcherd.service has entered the 'failed' state with result 'exit-code'.
Nov 10 21:42:32 wiley systemd[1]: Failed to start Speech-Dispatcher an high-level device independent layer for speech synthesis..
░░ Subject: A start job for unit speech-dispatcherd.service has failed
░░ Defined-By: systemd
░░ Support: https://forum.manjaro.org/c/support
░░ 
░░ A start job for unit speech-dispatcherd.service has finished with a failure.
░░ 
░░ The job identifier is 1578 and the job result is failed. 

Советуют проверить командами:

>spd-say -O

^показывает список подключенных к speech dispatcher модулей

OUTPUT MODULES
flite
espeak
>spd-say -L

^получить список синтезируемых голосов

Логи:

/run/user/500/speech-dispatcher/log

Невозможно создать pid-файл

По команде просмотра логов:

# journalctl -u speech-dispatcherd.service

Видим строку:

Can't create pid file in /run/speech-dispatcher/speech-dispatcher.pid, wrong permissions?

Создаем каталог:

# mkdir /run/speech-dispatcher/

И даем всем права на rw:

# chmod -R 666 /run/speech-dispatcher/
/usr/lib/systemd/system/speech-dispatcherd.service
[Unit]
Description=Speech-Dispatcher an high-level device independent layer for speech synthesis. 

[Service]
Type=forking
ExecStart=/usr/bin/speech-dispatcher -d

[Install]
WantedBy=multi-user.target

RHVoice

Если в

/etc/speech-dispatcher/speechd.conf

-расскомментировать

#AddModule "rhvoice"                  "sd_rhvoice"   "rhvoice.conf"

-прописать в

DefaultModule rhvoice
LanguageDefaultModule "en"  "rhvoice"
LanguageDefaultModule "ru"  "rhvoice"

После прописывания ошибка:

error: Can't connect to unix socket /run/user/500/speech-dispatcher/speechd.sock: В соединении отказано. Autospawn: Autospawn failed. Speech Dispatcher refused to start with  error code, stating this as a reason: 
Согласно https://www.linux.org.ru/forum/general/15808827?ysclid=m1gc0536k614290331
 spd-say не умеет WAV в stdout вообще. Пользуй RHVoice-test. См. https://github.com/Olga-Yakovleva/RHVoice/issues/140
 └── https://github.com/RHVoice/RHVoice/issues/140
    Советуют:
    echo "привет" | RHVoice-test -p elena -o /dev/stdout 2>/dev/null | aplay /dev/stdin 2>/dev/null
    └── Yes, I can use speetch-despatcher. But how do I use external players in spd-say?
        └── oh sorry At first I did not understand your situation completely. Unfortunately, this is not possible at the moment. ticket in upstream. https://github.com/brailcom/speechd/issues/348
            └── Speechd/получать звук в виде бинарника https://github.com/brailcom/speechd/issues/348 
                └── Speech-dispatcher не работает с RHVoice https://github.com/RHVoice/RHVoice/issues/178 Это проблема не RHVoice, а SD.

Настройка Speechd для RHVoice

http://linux.tiflocomp.ru/docs/spd_rhvoice_festival.php?ysclid=m1gcfhzn1z592561148

Для Альта конфиг с корректными путями будет такой:

RHVoiceDataPath "/usr/share/RHVoice"
RHVoiceConfigPath "/etc/RHVoice/"
RHVoicePunctuationMode 
#RHVoicePunctuationList "@+_"
RHVoiceDefaultVoice "azamat"
#RHVoiceDefaultVariant "Pseudo-English"
Debug

Но с ним speech-dispatcher не работает.

Порывшись в других дистрибутивах, в том же Arch-е, откуда я брал отчасти инфу, обнаружил, что в пакете rhvoice есть модуль для speech-dispatcher-a. В новой последней версии RHVoice, собранной для P11 и Sisyphus она тоже есть.

https://packages.altlinux.org/ru/p11/binary/libRHVoice5/x86_64/files/

Искомое:

/usr/lib64/speech-dispatcher-modules/sd_rhvoice
Примечание: В ALT P10 - 0.7.1, P11/Sisyphus - 1.14.0


Тестирование

Вручную тесты работают

$ echo "Альт самый лучший. Я гарантирую!" | festival --tts --language russian
$ echo "привет" | RHVoice-test -p elena -o /dev/stdout 2>/dev/null | aplay /dev/stdin 2>/dev/null
$ echo "Тестируем sound" | RHVoice-test -p anna+clb | aplay

А через speech:

  • после включения модуля rhvoice:
$ spd-say -o festival -l en hello
Failed to connect to Speech Dispatcher:
Error: Can't connect to unix socket /run/user/500/speech-dispatcher/speechd.sock: Нет такого файла или каталога. Autospawn: Autospawn failed. Speech Dispatcher refused to start with error code, stating this as a reason:
$ spd-say -o festival -l ru петя
Failed to connect to Speech Dispatcher:
Error: Can't connect to unix socket /run/user/500/speech-dispatcher/speechd.sock: Нет такого файла или каталога. Autospawn: Autospawn failed. Speech Dispatcher refused to start with error code, stating this as a reason:
$ spd-say -o rhvoice -l ru петя
Failed to connect to Speech Dispatcher:
Error: Can't connect to unix socket /run/user/500/speech-dispatcher/speechd.sock: Нет такого файла или каталога. Autospawn: Autospawn failed. Speech Dispatcher refused to start with error code, stating this as a reason:
  • после выключения и реконфигурации на speech "работает" только festival и rhvoice на английском. Но, проверяем
>spd-say -O
OUTPUT MODULES
flite
espeak

Т.е. по сути, spd-say игнорирует -o и берет только английский язык из flite/espeak.

Те же самые flite и espeak отображаются в orca.

Результаты тестов

Тесты:

  1. $ echo "Альт самый лучший. Я гарантирую!" | festival --tts --language russian
  2. $ echo "Good morning, children!" | festival --tts --language english
  3. $ echo "Альт самый лучший. Я гарантирую!" | RHVoice-test -p elena -o /dev/stdout 2>/dev/null | aplay /dev/stdin 2>/dev/null
  4. $ echo "Good morning, children!" | RHVoice-test -p clb -o /dev/stdout 2>/dev/null | aplay /dev/stdin 2>/dev/null
  5. $ echo "Good morning, пользователи Альта!" | RHVoice-test -p anna+clb | aplay
  6. $ spd-say -o festival -l en "Good morning, children!"
  7. $ spd-say -o festival -l ru "Альт самый лучший. Я гарантирую!"
  8. $ spd-say -o rhvoice -l ru "Альт самый лучший. Я гарантирую!"
  9. $ spd-say -o rhvoice -l en "Good morning, children!"
  10. $ spd-say -O
Результаты
P10 Sisyphus
1 work, good bad, см прим.1
2 work, good work, good
3 work, good work, good, см. прим.2
4 work, good work, good, см. прим.2
5 work, good work, good, см. прим.3
6 У spd его нет,
используется первый из списка
У spd его нет,
используется первый из списка
7 Звук не воспроизводится,
используется первый из списка
flite
У spd его нет,
используется первый из списка
8 Звук не воспроизводится,
используется первый из списка
work, good
9 Читает по английски, используется
первый из списка
work, good
10 OUTPUT MODULES

flite
espeak

OUTPUT MODULES
rhvoice
flite
espeak-ng-mbrola
espeak-ng-mbrola-generic
espeak-ng
espeak-mbrola-generic

Примечания:

  1. сначала, ругается что нет движка mbrola, ставишь, потом ищешь - а там нет русского языка
  2. Нужно доустановить пакеты: apt-get install RHVoice-Russian-* RHVoice-English-* RHVoice-bin
  3. Нужно вводить без части "| aplay"
Примечание: На Sisyphus после установки rhvoice, настройки speech dispatcher с помощью spd-conf и запуска orca -s заработал экранный диктор.