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

Материал из ALT Linux Wiki
Строка 160: Строка 160:
Настроить
Настроить
  /etc/speech-dispatcher/modules/festival.conf
  /etc/speech-dispatcher/modules/festival.conf
Запуск как службы: [https://wiki.archlinux.org/title/Speech_dispatcher [i]]
festival --server &


====Использование RHVoice====
====Использование RHVoice====

Версия от 14:32, 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

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

spd-conf #настройка
spd-say #произнести текст (по-умолчанию только на английском)
sdpsend #отправка на какой-то сервер с портом

Движки

Список движков по-умолчанию:

$ spd-say -O
OUTPUT MODULES
flite
espeak

Использование festival

Нужно установить festival-freebsoft-utils

Настроить

/etc/speech-dispatcher/modules/festival.conf

Запуск как службы: [i]

festival --server &

Использование RHVoice

apt-get install RHVoice

Создаем

/etc/speech-dispatcher/modules/rhvoice.conf

Наполняем

RHVoiceDataPath "/usr/share/RHVoice"
RHVoiceConfigPath "/etc/RHVoice/"
RHVoicePunctuationMode 
#RHVoicePunctuationList "@+_"
RHVoiceDefaultVoice "Anna"
RHVoiceDefaultVariant "Pseudo-English"
Debug
Примечание: Работает только английский вариант