MyTetra Share
Делитесь знаниями!
Синтез русской речи для приложения под linux
26.04.2019
15:27
Автор: dopler47
Текстовые метки: linux, синтез, речи, речь
Раздел: Компьютер - Linux - Синтез речи

Возникла необходимость встроить в приложение, разрабатываемое под Linux "проговаривание" русских фраз в качестве реакции на некоторые события. Стоит отметить что в качестве основного средства разработки я использую язык программирования С++ и Qt 5.8.

После обдумывания задачи я выбрал следующий вариант решения: с помощью синтезатора речи получить аудио файлы с нужными фразами, проигрывать эти фразы в нужный момент, используя QMediaPlayer из фреймворка Qt. Возможно следующим шагом в развитии решения данной задачи будет подключение функционала синтеза речи в мой проект, но на данном этапе это показалось мне избыточным.


Итак, часть первая, синтез фраз на русском в linux (xubuntu 16.04)


1. Festival

В начале я установил синтезатор речи festival:


sudo apt install festival festvox-ru


Послушать качество звучание можно командой:


echo "Привет! Как дела?" | festival --tts --language russian

По моему мнению слова произносятся разборчиво, вполне приемлимо, но голос какой то "деревянный".


2. Espeak

Затем я попробовал espeak:


sudo apt install espeak

Послушал качество командой:

espeak  -vru "Русский синтезатор речи"

Качество espeak оказалось отвратным, настоящий хардкор, настоящий "робоголос")


3. RHVoise

При дальнейшем поиске я наткнулся на положительные отзывы о синтезаторе RHVoise и решил поставить его. Но тут  не обошлось без танцев с бубном. Оказалось что нельзя так просто взять скачать с github, собрать проект на начать его использовать (ссылка на проект: https://github.com/Olga-Yakovleva/RHVoice). То ли у меня не хватало необходимых библиотек то ли еще что то, но в синтезатор не хотел заводиться.

К счастью я наткнулся на пакет с этим синтезатором (ссылка на инструкцию по установке: https://launchpad.net/~linvinus/+archive/ubuntu/rhvoice/) и установил его сделав следующее:


sudo add-apt-repository ppa:linvinus/rhvoice

sudo apt-get update

sudo apt-get install rhvoice rhvoice-russian

sudo apt-get install speech-dispatcher-rhvoice


Проверил звучание командой:

echo "Привет, как дела?" | RHVoice-client -s Anna+CLB | aplay

Звучит разборчиво, хотя голос отдает металлом.

Записать фразу в файл можно при помощи команды:

echo "Необходимая фраза" | RHVoice-client -s Anna+CLB >./sound.mp3

Проверить, что все записалось "как надо" можно, проиграв файл:

aplay sound.mp3


4. Речевые технологии Yandex SpeechKit Cloud

После просмотра вариантов синтеза речи на своем ПК, меня посетила идея посмотреть варианты синтеза речи с использованием сервисов в интернете. В итоге я наткнулся на сервис от Яндекса - SpeechKit Cloud.

Сервис позволяет получать синтезированную речь, отправляя HTTPS запросы, в запросе необходимо указать ключ разработчика (описание формата запроса: https://tech.yandex.ru/speechkit/cloud/doc/guide/concepts/tts-http-request-docpage/). Зарегистрировшись и войдя в "кабинет разработчика" Яндекс, я получил необходимый ключ разработчика.

Использовав следующую команду, мне удалось получить синтезированную фразу:


curl "https://tts.voicetech.yandex.net/generate?format=wav&lang=ru-RU&speaker=omazh&emotion=neutral&key=<ключ разработчика>" -G --data-urlencode "text=Привет, как дела? " > sound.wav


В итоге я решил остановиться на использовании фраз, полученных Yandex SpeechKit Cloud, так как это звучание голоса мне показалось наиболее естественным.


Часть вторая, проигрывание аудио файлов с ипользованием  Qt 5.8 

Тут все оказалось даже проще, чем я думал. Для проигрывания используем класс QMediaPlayer, не забывая подключить в файле проекта модуль QT += multimedia. Описание работы с классом дано на сайте с документацией Qt, но на всякий случай приведу отрывок своего кода:



QMediaPlaylist *playlist = new QMediaPlaylist();

QString url_sound_ = "qrc:/qml/music/sound.wav";

playlist->addMedia(QUrl(url_sound_));

playlist->setPlaybackMode(QMediaPlaylist::Loop);

m_player_ = new QMediaPlayer;

m_player_->setPlaylist(playlist);

m_player_->setVolume(100);

/.../

m_player_->play();

/.../

m_player_->stop();


Аудио файлы с фразами добавил в ресурсы проекта.

Получилось весьма разборчивое и понятное озвучивание необходимых событий в приложении. К сожалению голос не так прекрасен и мелодичен как в подобных системах в некоторых фантастических фильмах, но я надеюсь что разработчики синтезаторов речи буду стремиться к этому. Тем не менее результат весьма интересен, прогресс не стоит на месте и уже доступен синтез разборчивых фраз на русском.

Надеюсь Вам пригодится мой опыт прикручивания русской речи к интерфейсу пользователя приложения.


Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования