Ключевые слова:language, speech, voice, sound, (найти похожие документы)
From: Андрей Ракитин
Date: Mon, 7 Nov 2007 18:21:07 +0000 (UTC)
Subject: Ru_tts - синтезатор русской речи для Linux.
Оригинал: http://linuxshop.ru/unix4all/?cid=&id=449
Помню, как когда-то меня поразила работа программы "Говорилка" для
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, произнесенные "кукольным" голосом,
т.е. речь звучит слишком быстро и тембр ее сдвинут вверх. Это значит,
что тест прошел успешно, и можно перейти к настройке синтезатора.
Здесь самое место дать некоторые пояснения.
Во-первых, 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". Отсюда появляются ключи
программы 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 (размер около 100 кб), Вы можете сами сравнить
звучание синтезаторов речи. Этот файл сшит из трех файлов, полученных
в результате работы голосовых движков 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 могут говорить на множестве языков,
но не на русском.
Теперь есть и русский, за что огромное спасибо его создателям - Игорю
Порецкому и Дмитрию Падучих.
Андрей Ракитин.
июнь 2004 г.
Как написано у автора: выходной звук -- "raw linear
signet 8-bit 10 kHz". возможно от этого и был кукольный голос. у меня с 8 битами он более понятный, но качество синтеза в любом случае оставляет желать лучшего
- Giver