Синтезаторы речи для linux

Синтезаторы речи для linux

Статья подготовлена специально для Linux-библиотеки. Впервые опубликована на UNIX4ALL. Использованы, в том числе в виде цитат, файлы документации, входящие в пакеты ru_tts и rulex Игоря Порецкого и Дмитрия Падучих.

Помню, как когда-то меня поразила работа программы «Говорилка» для Windows. Я впервые услышал, как компьютер читает голосом текстовый файл — вполне разборчиво и вполне по-русски. Фантастика. Позднее, когда Linux стал для меня системой номер 1, очень хотелось иметь что то подобное и в нем. Я даже провёл небольшое исследование на эту тему — поиск голосовых движков для Linux, результатом чего явился обзор «Синтезаторы речи в Linux». Их оказалось много, но русского голоса не было ни в одном.

Как это часто бывает в мире Open Source, хорошие новости пришли не от мэйнстрим-разработчиков ПО, а от энтузиастов.

Совсем недавно, мне попалось сообщение о выходе новой версии дистрибутива Oralux . Это — Live CD на основе Knoppix, и предназначен он для людей с ослабленным зрением. В версии 0.6 alpha появилось звуковое меню на русском языке, и добавлены два новых синтезатора речи: ParleMax (французский язык) и Multispeech/Ru_tts (русский и английский). Сообщалось, что автором последнего является Игорь Порецкий, а ссылка вела на его ftp, куда я сразу же и отправился.

Оказалось, что ru_tts разработан (судя по дате создания файлов) ещё в феврале 2003 года совместно Игорем Порецким и Дмитрием Падучих. Это — полнофункциональный программный tts (text-to-speech). Он является полностью автономным в том смысле, что не нуждается в дополнительных голосовых базах или системных библиотеках кроме стандартных библиотек, входящих в любой дистрибутив. Синтезатор речи может работать со словарем ударений rulex , полученным из словаря Мюллера на 60 000 слов. Входной текст ru_tts воспринимает в кодировке koi8-r . На упомянутом выше ftp есть также программы, позволяющие использовать ru_tts в среде Emacs .

Установка.

Синтезатор речи и словарь доступны в виде уже скомпилированных пакетов ru_tts-0.4-i586-1.tgz (188кб) и rulex-0.9.14-noarch-1.tgz (5,6Мб). Их надо скачать и разархивировать в соответствующие подкаталоги каталога /usr . В каждом пакете есть файл документации на русском языке.

Вместо пакета ru_tts-0.4-i586-1 можно использовать один файл ru_tts.static (870кб), поместив его в каталог /usr/local/bin . Разницы в работе я не заметил.

Синтезатор ru_tts не занимается выводом звука, он только подготавливает для этого звуковой файл, разбирая входной текст и выстраивая в цепочку нужные звуки. Поэтому нужно, чтобы в системе был установлен какой-либо подходящий пакет для проигрывания звука, например sox . Это мощный проигрыватель и конвертор звуковых файлов. Естественно, что sox есть практически во всех дистрибутивах Linux. Исключение составляют некоторые специальные, например одно- двух- дискетные дистрибутивы. Это нужно учитывать при попытке встроить в них синтезатор речи, а его небольшой размер это вполне позволяет, если не включать словарь.

На этом установку синтезатора речи можно считать законченной и приступить к его проверке. Нужно только учитывать, что в Linux звук в разных режимах выводится по разному. В консольном режиме это может быть просто звуковое устройство, в графическом — звуковой сервер; можно также выводить звук в файл. Важно, чтобы синтезатор выводил звук туда, куда нужно. Всё рассказанное ниже относится к работе с сервером звука aRts в KDE.

До сих пор я сознательно не оговаривал тип дистрибутива Linux. Похоже, что это для ru_tts не имеет значения. Я устанавливал его в Linux XP, причём делал это так, как рассказано выше. Кроме того, проверил работу синтезатора в Knoppix 3.4 — просто переписал ru_tts_static в домашний каталог. Всё отлично работало. Судя по всему, то же самое будет и в любой другой Linux-системе.

Проверка и настройка.

Создайте в своем домашнем каталоге небольшой текстовый файл, содержащий одно-два предложения на русском языке, причём, как уже говорилось, обязательно в кодировке koi8-r . Пусть этот файл называется test.txt . Для начала попробуем с помошью синтезатора перевести этот текстовый файл в звуковой, в формате wav . Отправим наш тестовый файл по конвейеру сначала синтезатору ru_tts , который переведёт его в голосовую форму, а затем — конвертору sox , который преобразует его в формат wav .

Читайте также:  Завершение работы windows списком

Команда должна выполниться без ошибок и не произведя никаких звуков, а в домашнем каталоге должен появиться файл test.wav , который можно воспроизвести любым музыкальным проигрывателем. Скорее всего, Вы услышите фразы из файла test.txt , произнесенные «кукольным» голосом, т.е. речь звучит слишком быстро и тембр ее сдвинут вверх [1]. Это значит, что тест прошел успешно, и можно перейти к настройке синтезатора. Здесь самое место дать некоторые пояснения.

Во-первых, ru_tts можно (но не обязательно, как видно из приведенного выше примера) использовать с параметрами. Вот их перечень:
— h — как всегда — краткая справка об использовании.
— p

— установка высоты голоса. Значение pitch может быть от 0 (самый низкий голос) до 1. 0 (самый высокий).
— r — Установка скорости речи. Опять-таки от 0 (самая быстрая речь) до 1. 0 (самая неспешная).
— m — заставляет синтезатор говорить совершенно монотонно, без всяких интонаций. Заметно, что без этого ключа синтезированная речь воспринимается естественнее, например, понижением голоса выделяется окончание фразы, а соответствующим повышением — восклицательные предложения и т.п.
— v — загрузка голосового файла. Это совершенно необязательно, так как в синтезаторе уже есть встроенный голос, но можно загрузить и другой. Есть ли другие, мне неизвестно. Возможно, авторы планируют их создание.
— s — файл словаря ударений. Речь здесь идет о словаре rulex , который у нас уже установлен. За параметром -s должен следовать путь к словарю в абсолютном виде. Хотя синтезатор работает и без него, подключение словаря сильно улучшает качество речи. Надо сказать, что создание словаря ударений — сама по себе большая работа, и его наличие говорит о тщательности, с какой авторы подошли к созданию голосового синтезатора.
— l — файл для накопления слов, не найденных в словаре. Имеет смысл лишь совместно с заданием ключа -s . Если есть терпение и время, то с помощью полученного таким образом списка словарь можно пополнять. В файле документации подробно рассказано, каким образом всё это можно сделать. Во-вторых, вывод синтезатора представляет собой оцифрованный звук в формате «raw linear signet 16-bit 10 kHz» [1]. Отсюда появляются ключи программы sox: -t raw (тип звукового файла), -s (линейное кодирование), -w (число битов на отсчет 16), -r 10000 (частота дискретизации 10 кГц), -c 1 (один канал, т.е. моно), -v 0.8 (уровень громкости выхода на уровне 0,8 от максимума). Параметров много, поэтому есть смысл почитать man sox . Всегда лучше понимать, что делаешь.

В-третьих, в приведенном выше примере вывод в файл использован для того, чтобы избежать на начальном этапе возможных проблем с указанием правильного звукового устройства для sox . Это лишь один из способов преобразования текста в речь. Существуют и другие, о них — немного позже.

Итак, синтез речи работает. Но его надо настроить. Первая проблема — «кукольный» голос. Видимо, связано это с тем, что с момента создания синтезатора прошло уже некоторое время, и компьютеры стали более мощными. Они слишком быстро справляются с задачей синтеза. Во всяком случае, разработчики заложили возможность использования ключей -p и -r . Но, на мой взгляд, удобнее пользоваться аналогичными ключами программы sox: speed и stretch . Первый действует подобно изменению скорости протяжки пленки в аудиоплеере, а число, которое за ним следует, определяет коэффициент изменения этой скорости — меньше 1- замедление, больше 1 — ускорение. При этом соответствующим образом меняется и высота звука. А ключ stretch позволяет менять скорость, не влияя на частотные характеристики речи. Он может использоваться для подстройки, мало меняя уже подобранный тембр голоса. Хотя изменения всё-таки есть, и — не в лучшую сторону. Голос становится более «металлическим» («робот»). А вообще, sox имеет много разных фильтров, так что можно поэкспериментировать.

Вот такая команда читает голосом наш тестовый файл при подключенном словаре и приемлемых для моего компьютера скорости чтения и тембре голоса, вывод происходит на звуковой сервер aRts :

А такие — создают звуковой файл test.wav или более компактный файл test.ogg с прочитанным текстом:

/test.txt | ru_tts -s /usr/local/lib/ru_tts/lexicon | sox -t raw -s -w -r 10000 -c 1 -v 0.8 —

/test.wav speed 0.52
cat

/test.txt | ru_tts -s /usr/local/lib/ru_tts/lexicon | sox -t raw -s -w -r 10000 -c 1 -v 0.8 —

/test.ogg speed 0.52

Сравнение с другими программными синтезаторами речи.

Поскольку ru_tts — первая ласточка, то и сравнивать его в Linux пока не с чем. Для платформы Windows существуют русскоязычные программные синтезаторы такого же класса, наиболее доступными из которых являются модуль для синтеза русской речи фирмы Lernout & Hauspie и аналогичный компонент Digalo французской компании Elan. Оба базируются на Microsoft Speech API, при этом первый можно установить бесплатно (для тех, кто уже заплатил за лицензию Windows), а второй стоит около 30 евро. Интересно, что ещё год назад Elan собиралась выпустить свой tts для Linux. Объявление о том, что это пока не сделано, до сих пор висит на зарезервированной для такого случая странице их сайта.

Читайте также:  Иконки stalker для windows

В данном случае лучше один раз услышать, чем сто раз прочитать. Скачав файл в формате mp3 (размер 101 кб), Вы можете сами сравнить звучание синтезаторов речи. Этот файл сшит из трех файлов, полученных в результате работы голосовых движков Lernout & Hauspie, Digalo и ru_tts .

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

Первое, для чего я попробовал использовать ru_tts — вывод сообщений KDE типа «КДЕ запущен и готов к работе» или «Переход на четвертый рабочий стол» и т.п. Сделать это просто — надо создать файл с соответствующим текстом, затем перевести его в wav , а далее выбрать этот файл ( Центр управления KDE — Звук и мультимедиа — Системные уведомления ) в нужном пункте. После этого вместо бряканья и кваканья компьютер будет комментировать по-русски все Ваши действия. Мне кажется, что людям с ослабленным зрением такая модернизация может пригодиться.

Возможность получить говорящую книгу в формате mp3 я тоже проверил. Озвученную книгу можно затем записать на CD и прослушивать с помощью плеера, например, по дороге на работу. Результат такой: текстовый файл размером 150 кб преобразовывался в формат mp3 около 3 минут и занял примерно 35 мб.

Те, кто работает в среде Emacs , могут воспользоваться имеющейся там системой Emacspeak , которая может быть подключена к ru_tts . Кроме того, авторы ru_tts создали для Emacs программу чтения голосом книг rbook . Это должно обеспечить, как я понял, «чтение с листа» набираемого в редакторе или уже готового текста. Работу этих приложений я не проверял.

Хотелось бы надеяться, что эта статья вызовет интерес к ru_tts , а также — появление приложений для него. И, на мой взгляд, включение русскоязычного синтезатора речи в отечественный дистрибутив — хорошая идея.

А вот ещё одна сфера применения для ru_tts . В апреле 2004 года, фирма Sony начала продажу первой в своем роде электронной книги Librie 1000-EP на основе специальной, пока черно-белой, электронной бумаги. Это — планшет размера A4 и весом 300 грамм. И работает это чудо под управлением Linux. Синтезатора речи, насколько я знаю, в нем пока нет.

Заключение.

Возможно, кто-то скажет — игрушка, не более того. И будет неправ. Дело не только в том, что синтезатор речи может оказаться незаменимым для людей с ослабленным зрением, хотя это само по себе очень важно. Для всех нас речь остается самым удобным и привычным способом обмена информацией. Думаю, что при общении с компьютером голосовой интерфейс тоже окажется по меньшей мере полезным. Конечно — при условии доступности качественных синтезаторов голоса и систем распознавания речи, а также удобного управления ими. И сейчас наблюдается прогресс по всем этим направлениям.

Существующие синтезаторы для Linux могут говорить на множестве языков, но не на русском.

Теперь есть и русский, за что огромное спасибо его создателям — Игорю Порецкому и Дмитрию Падучих.

Послесловие

Комментарий Дмитрия Падучих : Неудивительно, что голос получается «кукольный». ru_tts генерирует 8-битный звук, поэтому на входе у sox должен быть ключ -b, а не -w. Примерно так:

Источник

TTS движки для Ubuntu Linux (Text-to-Speak)

Голосовой движок (озвучивание русского текста) может использоваться для разных задач, например можно слушать книги без их предварительной озвучки, прослушивать входящие тестовые сообщения, да и в общем, можно вести любой диалог с компьютером посредством голосового взаимодействия, на базе чего строить разные сервисы и умные системы.

Я расцениваю TTS движки только в качестве одной из компонент для реализации системы «Умного дома». Книги на русском они читают терпимо-ужасно, озвучивать сообщения и прочие обрывки информации мне не нужно. Мне нужен TTS для решения единственной задачи — обратная связь с системой умного дома.

Читайте также:  Служба dns клиент не запускается windows

Ниже я приведу список существующих TTS движков и субъективную оценку качества озвучки русского текста.

Демо примеры озвучки

  1. Festival;
  2. Nuance Loquendo (Demo  ) — голос Olga лучший на текущий момент, но штука платная;
  3. RHVoice  (Demo, Установка RHVoice  );
  4. Open Mary (Demo  ) — ниже среднего;
  5. Espeak (Demo) — с русским все очень плохо;
  6. Платные движки (Demo  );
  7. Acapela (Demo  ) — голос Alena, качество не особо;

RHVoice

Довольно хороший TTS движок от Ольги Яковлевой (Github  ).

Пример консольной команды:

ESpeak

FestVox

Это ще один TTS. Поддерживает русский текст. Голосовой пакет весит 196MB. Виндовые бинарники тут  .

На многих форумах рекомендуют править конфиг

Источник

Синтезаторы речи для linux

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

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

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

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

sudo apt install festival festvox-ru

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

echo «Привет! Как дела?» | festival —tts —language russian

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

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

sudo apt install espeak

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

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

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

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

К счастью я наткнулся на пакет с этим синтезатором (ссылка на инструкцию по установке: https://launchpad.net/

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

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

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»;

m_player_ = new QMediaPlayer;

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

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

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

Источник

Оцените статью