Участник:Petr-akhlamov/Наработки по речи: различия между версиями
(не показано 77 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
=Словари= | |||
Вот, что получилось по озвучке в Словарях: | |||
Есть три словаря: | |||
*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. | |||
{{Note|Поэтому снимаем галку с этого чекбокса}} | |||
В настройках модуля можно выбрать русский, но там ужасное произношение. | |||
На 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 | |||
==Проверяем фестиваль== | |||
{{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 | |||
>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: | |||
<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> | |||
==Настройка 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 | |||
{{Note|В 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. | |||
===Результаты тестов=== | |||
Тесты: | |||
# {{cmd|<nowiki>$ echo "Альт самый лучший. Я гарантирую!" | festival --tts --language russian</nowiki>}} | |||
# {{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>}} | |||
# {{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>}} | |||
# {{cmd|$ spd-say -o festival -l en "Good morning, children!"}} | |||
# {{cmd|$ spd-say -o festival -l ru "Альт самый лучший. Я гарантирую!"}} | |||
# {{cmd|$ spd-say -o rhvoice -l ru "Альт самый лучший. Я гарантирую!"}} | |||
# {{cmd|$ spd-say -o rhvoice -l en "Good morning, children!"}} | |||
# {{cmd|$ spd-say -O}} | |||
{|class="wikitable" style="float:center; margin-left:2em" | |||
!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>}}" | |||
=== | ==Экспорт в файл== | ||
===Festival=== | |||
$ echo "This is a test." | text2wave -o output.wav | |||
$ echo "Альт самый лучший. Я гарантирую!" | text2wave -o output.wav | |||
$ cat /home/user/testtext.txt | text2wave -o output.wav | |||
== | ===RHVoice=== | ||
$ echo "Привет мир" |RHVoice-test -p anna -o a.wav | |||
$ echo "Good morning, пользователи Альта!" | RHVoice-test -p anna+clb -o a.wav | |||
$ cat /home/user/testtext.txt | RHVoice-test -p anna+clb -o a.wav | |||
{{Note|На Sisyphus после установки {{cmd|rhvoice}}, настройки {{cmd|speech dispatcher}} с помощью {{cmd|spd-conf}} и запуска {{cmd|orca -s}} заработал экранный диктор.}} | |||
==== | ==Ссылки== | ||
*[https://github.com/alphacep/awesome-russian-speech Статья на Github по речи] | |||
Текущая версия от 16:42, 21 октября 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-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
Тестирование
Вручную тесты работают
$ 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.
Результаты тестов
Тесты:
- $ echo "Альт самый лучший. Я гарантирую!" | festival --tts --language russian
- $ echo "Good morning, children!" | festival --tts --language english
- $ echo "Альт самый лучший. Я гарантирую!" | RHVoice-test -p elena -o /dev/stdout 2>/dev/null | aplay /dev/stdin 2>/dev/null
- $ echo "Good morning, children!" | RHVoice-test -p clb -o /dev/stdout 2>/dev/null | aplay /dev/stdin 2>/dev/null
- $ echo "Good morning, пользователи Альта!" | RHVoice-test -p anna+clb | aplay
- $ spd-say -o festival -l en "Good morning, children!"
- $ spd-say -o festival -l ru "Альт самый лучший. Я гарантирую!"
- $ spd-say -o rhvoice -l ru "Альт самый лучший. Я гарантирую!"
- $ spd-say -o rhvoice -l en "Good morning, children!"
- $ 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 |
OUTPUT MODULES |
Примечания:
- сначала, ругается что нет движка mbrola, ставишь, потом ищешь - а там нет русского языка
- Нужно доустановить пакеты: apt-get install RHVoice-Russian-* RHVoice-English-* RHVoice-bin
- Нужно вводить без части "| aplay"
Экспорт в файл
Festival
$ echo "This is a test." | text2wave -o output.wav $ echo "Альт самый лучший. Я гарантирую!" | text2wave -o output.wav $ cat /home/user/testtext.txt | text2wave -o output.wav
RHVoice
$ echo "Привет мир" |RHVoice-test -p anna -o a.wav $ echo "Good morning, пользователи Альта!" | RHVoice-test -p anna+clb -o a.wav $ cat /home/user/testtext.txt | RHVoice-test -p anna+clb -o a.wav