Ru_tts - синтезатор русской речи для Linux

Источник:linuxshop.ru
Дата публикации:2004
Поделиться в Twitter Поделиться в F******k Поделиться в VKontakte Поделиться в Telegram Поделиться в Mastodon

Статья подготовлена специально для 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.

# cat ~/test.txt | ru_tts | sox -t raw -s -w -r 10000 -c 1 -v 0.8 - ~/test.wav

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

Во-первых, ru_tts можно (но не обязательно, как видно из приведенного выше примера) использовать с параметрами. Вот их перечень:
-h - как всегда - краткая справка об использовании.
-p <pitch> - установка высоты голоса. Значение pitch может быть от 0 (самый низкий голос) до 1. 0 (самый высокий).
-r <rate> - Установка скорости речи. Опять-таки от 0 (самая быстрая речь) до 1. 0 (самая неспешная).
-m - заставляет синтезатор говорить совершенно монотонно, без всяких интонаций. Заметно, что без этого ключа синтезированная речь воспринимается естественнее, например, понижением голоса выделяется окончание фразы, а соответствующим повышением - восклицательные предложения и т.п.
-v <voice_file> - загрузка голосового файла. Это совершенно необязательно, так как в синтезаторе уже есть встроенный голос, но можно загрузить и другой. Есть ли другие, мне неизвестно. Возможно, авторы планируют их создание.
-s <stress_dictionary> - файл словаря ударений. Речь здесь идет о словаре rulex, который у нас уже установлен. За параметром -s должен следовать путь к словарю в абсолютном виде. Хотя синтезатор работает и без него, подключение словаря сильно улучшает качество речи. Надо сказать, что создание словаря ударений - сама по себе большая работа, и его наличие говорит о тщательности, с какой авторы подошли к созданию голосового синтезатора.
-l <log_file> - файл для накопления слов, не найденных в словаре. Имеет смысл лишь совместно с заданием ключа -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:

cat ~/test.txt | ru_tts -s /usr/local/lib/ru_tts/lexicon | sox -t raw -s -w -r 10000 -c 1 -v 0.8 - -t raw - speed 0.054 | artscat

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

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.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. Объявление о том, что это пока не сделано, до сих пор висит на зарезервированной для такого случая странице их сайта.

В данном случае лучше один раз услышать, чем сто раз прочитать. Скачав файл в формате 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. Примерно так:

~$ ru_tts < test.txt | sox -t raw -s -b -r 10000 -c 1 -v 0.8 - test.wav


Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024