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

Материал из ALT Linux Wiki
Строка 252: Строка 252:
  Debug
  Debug
Но с ним speech-dispatcher не работает.
Но с ним 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}}


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

Версия от 20:51, 24 сентября 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 startdict
# apt-get install stardict-slovnyk_en-ru stardict-slovnyk_ru-en stardict-quick_en-ru stardict-quick_ru-en

Попытки сделать озвучку

Где озвучка работает без Festival

StartDict/GoldenDict. В настройках звука программы.

английские слова читаются при:

  • goldendict - использовать встроенный плеер
  • stardict - aplay и все снято

Разборки с Festival

Первая попытка

if  grep [аяоёуюэеыи]'  then  festival --tts --language russian' else  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

^криво написана Test-result-fail.png 

if echo %s | grep -q '[а-яА-я]'; then echo %s | festival --tts --language russian else echo %s | festival --tts fi

^криво написана Test-result-fail.png 

if (echo %s | grep -q '[а-яА-я]'); then (echo %s | festival --tts --language russian) else (echo %s | festival --tts) fi

^такая сложная команда в словаре не срабатывает Test-result-pass.png 

Команды для консоли:

if echo $s | grep -q '[аяоёуюэеыи]'; then echo $s | festival --tts --language russian else echo $s | festival --tts fi

^криво написана Test-result-fail.png 

if echo $s | grep -q '[а-яА-я]'; then echo $s | festival --tts --language russian else echo $s | festival --tts fi

^криво написана Test-result-fail.png 

if (echo $s | grep -q '[а-яА-я]*'); then (echo $s | festival --tts --language russian) else (echo $s | festival --tts) fi

^Определяет язык и читает Test-result-pass.png 

StartDict

У Startdict переменная %s

Читает раздельно по english и Russian

echo %s | festival --tts --language russian
echo %s | festival --tts

Команда "на вместе" в startdict не работет:

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
  • в startdict читает по раздельности
  • goldendict не видит команду
  • qstardict не видит команду

Речь

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

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

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

Примечание: Через 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

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:
  • после выключения и реконфигурации на festival "работает" только festival и rhvoice на английском. Но, проверяем
>spd-say -O
OUTPUT MODULES
flite
espeak

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

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