festival и русский язык

SilentOS
Digalo 2000 (голос Nikolai) у меня уже 2-й год из под вайна работает, правда глючит периодически. Жена без него жить не может (работа такая - журналист).
Все было бы хорошо, не будь Николай, Алёна и Катерина - самые известные русские голоса под винду - платными.

Кстати, попробовал тут поставить espeak - плюсом его является совершенно уж смешной размер: качать меньше мегабайта. Сразу же после установки программа умеет весьма недурно говорить по-английски, причём, даже с различными акцентами - шотландским, американским, австралийским… А вообще - движки есть для целой кучи языков, устану перечислять. Есть, например, для Эсперанто - вот уж где точно никаких проблем ни с произношением, ни с ударениями, в плановых языках правила едины и исключений нет.

А вот для более-менее приличного русского - требуется выкачать с сайта разработчика русский словарь ударений (чуть больше мегабайта), для версии 1.40 вот отсюда. Словарь нужно распаковать в /usr/share/espeak-data/ заменив дефолтный ru_dict.

После этих манипуляций четверостишие:

Однажды, в студёную зимнюю пору
Я из лесу вышел. Был сильный мороз.
Гляжу: поднимается медленно в гору
Лошадка, везущая хворосту воз.
И шествуя важно в спокойствии чинном
Лошадку ведет под уздцы мужичок.
В больших сапогах, в полушубке овчинном
В больших рукавицах, а сам - с ноготок.

было прочитано с единственной ошибкой - в слове “больш́их”. Хотя, если учесть, что ударение в данном слове и правда неоднозначно - можно считать, что и без ошибок вовсе. Да, разумеется не следует забывать про великую животворящую и созидающую роль буквы Ё в русском языке (да покарает меня Мицгол-Вебмастер за то, что я временами ей пренебрегаю).

Ну, а традиционная ложка дегтя заключается в интонациях и звучании самой речи… Разумеется, спутать это с живой человеческой русской речью сложно. Звучит примерно как речь роботов из советских мультфильмов - немного грустно с интонациями, да и произношение звуков хромает. Хотя, если вы не пытаетесь сделать из компьютера заменитель женщины… Немного поигравшись с амплитудой, темпом и скоростью речи, нашел этого робота Вертера вполне приемлемым для себя.

Короче, программа из разряда “маст хев” - особенно учитывая ее крошечный размер. Кто знает, когда на меня нападет злая ангина и моему нетбуку придется говорить за меня?

Бонус: в AUR есть простенький гуй на PyGTK. Все настроечки нагялдно, выбор языка из выпадающего списка и т.п. Хотя я предпочитаю пользовать ее из консоли - удобнее.

Еще бонус: можно самому править/дополнять словарь ударений, для этого нужно выкачать вот здесь исходные данные для словаря, распаковать в каталог с сорцами espeak и править в свое удовольствие: формат словаря очень простой, в стиле “слово $1”, то есть в столбик по алфавиту пишутся слова и указывается номер ударной гласной. Скомпилировать доработанный словарь можно командой espeak –compile=ru и заменить полученным файлом ru_dict.
Заключительное слово о русскоговорящих TTS-системах.
Собственно, мне таких систем (считаю я, разумеется, только работающие под линукс и распространяемые бесплатно) известно ровно три: festival, espeak и ru_tts. Две я уже испытал, для полноты картины решил пощупать и третью - ru_tts. Скажу заранее - остался доволен.

В AUR я ничего на эту тему не нашел (досадное упущение, которое я, возможно, исправлю) поэтому ставить пришлось ручками с ftp-сервера разработчика, где, по словам аффтара лежат исходники некоторых его проектов. Исходников я там, правда, не нашел, зато нашел бинарники, числом 3: один old-deprecated, второй требует для сборки BerekleyDB 3 (в арче по дефолту 4, не запустится), а третий, ru_tts.static - вполне себе работает и хлеба не просит. Я его распаковал и сохранил как /usr/local/bin/ru_tts, поправив права на запуск.
Размеров бинарь совершенно смешных, кстати: полмегабайта в запакованном виде.

Собственно, уже можно приступить к тестированию, но я еще чуток похимичил со словарем ударений: для этого выкачал отсюда тарбол rulex, распаковал, и, зайдя туда, сделал make install. Оно “конпеляет” и устанавливает непосредственно словарь ударений /usr/local/share/ru_tts/lexicon , весьма удобную утилитку для дополнения словаря (об этом ниже) /usr/local/bin/lexholder-ru , и еще какой-то плагин для emacs, мне не интересный. Словарь ударений, кстати, тот же что у аффтара espeak (последний его позаимствовал с того же самого ftp) только в другом формате, подготовлен на базе англо-русского словаря Миллера в 60 000 слов.

Теперь непосредственно запуск. Тут меня ждало два подводных камня:
1) ru_tts сам звука не воспроизводит, это только движок для создания звукового потока из текста;
2) текст он понимает только в кодировке koi8r.

В этой связи я навалял следующий скриптик (проговаривает переданную ему параметром фразу, если нужно озвучить текстовой файл - используйте при запуске что-нибудь вроде say_rus.sh $(cat вашфайл):
$ cat ./say_rus.sh
#!/bin/sh
echo $(echo $* |iconv -f utf8 -t koi8r) | /usr/local/bin/ru_tts -l /var/log/unknown.words -p 0.0 -r 0.3 -s /usr/local/share/ru_tts/lexicon | aplay -c 1 -t raw -r 10000 -f S8 -q
Собственно, пояснение:
1) входной параметр скрипта перекодируем из utf8 в koi8r;
2) передаем его ru_tts с параметрами:
-l /var/log/unknown.words - лог-файл, где будут накапливаться слова, не найденные в словаре ударений (необязательно, но полезно)
-p 0.0 - высота голоса (необязателен, по умолчанию голос таким и будет, но если нужен, например, женский голос - можно попробовать примерно 0.6)
-r 0.3 - скорость речи (тоже необязателен, по вкусу)
-s /usr/local/share/ru_tts/lexicon - словарь ударений (необязателен, но весьма желателен)
есть еще параметр -m - отключает интонации в принципе, и -v - загрузка внешнего голоса (где бы его еще взять?)
3) полученный звуковой поток передаем на воспроизведение aplay (при желании перед этим можно впихнуть еще добавление каких-нибудь эффектов, добавив в пайп, например, вызов sox).

Ну теперь, собственно, о качестве: русский мне показался в данном случае наиболее качественным из всех опробованных систем. Хотя интонации немножко чудаковатые, и звук глуховат и чуть фонит - но по качеству… как там это называют специалисты, не знаю… по качеству выговаривания слов - лучший. Если festival звучал вообще черте-как, да еще и весил больше 200 Мб, espeak звучал как выучивший русский англоязычный робот Вертер, то ru_tts звучит… звучит как и положено говорящему компьютеру! С человеком, естественно, не спутать, но…
Упомянутое ранее четверостишие Некрасова читается без ошибок (даже неоднозначное слово “больш́их” читается как нечто среднее между “больш́их” и “б́ольших” и не так режет слух). Умеет также читать транслит.

Очень вкусной плюшкой является работа со словарем (тоже, к сожалению, в кодировке koi8r - я для этого запускаю терминал с LANG=ru_RU.KOI8-R и работаю в нем):
если запустить /usr/local/bin/lexholder-ru оно напишет свою справку, вкратце самое нужное:
/usr/local/bin/lexholder-ru -s слово /usr/local/share/ru_tts/lexicon - ищет слово в базе, если находит - пишет где в нем ставится ударение “сло+во”, если не находит - пишет просто само слово.
/usr/local/bin/lexholder-ru /usr/local/share/ru_tts/lexicon - дополняет базу вводимыми с клавиатуры словами, формат следующий: слово сло+во (кроме обзначения ударения “+” возможно еще обозначение мягкого ударения “=” хоть я и не знаю что оно означает, и разделитель “-” для составных слов типа “двухъядерный”). Вместо ввода с клавиатуры можно указать -f файл (вот тут-то нам и пригодится наш /var/log/unknown.words, который надо лишь предварительно отредактировать в том же формате).

В общем, у меня теперь 2 программы из категории “маст хев” - espeak для английского и эсперанто и ru_tts для русского. Благо обе программы крошечные.
Если кому интересно, пару дней назад я этот архив оформил в виде пакета (festvox-ru называется). Я всё сделал правильно? До этого ни разу ничего в аур не выкладывал.
спасибо, что сделал, а по некорректностям тебе там и посоветуют :)
systemd должен умереть.
если кому еще интересно, чтобы заставить фестиваль работать вместе с alsa и dmix'ом,
надо просто в самый низ /usr/share/festival/festival.scm дописать три строчки:
(Parameter.set 'Audio_Command "aplay -D plug:dmix -q -c 1 -t raw -f s16 -r $SR $FILE")
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Required_Format 'snd)
proof
Есть еще один синтезатор русской речи для Linux - RHVoice Ольги Яковлевой.
Может быть, кто-нибудь заинтересуется и сделает PKGBUILD для AUR. Я, к сожалению, не настолько компетентен, а было бы интересно попробовать - не так много русских голосовых движков в Linux.
Исходник можно скачать тут:
https://github.com/Olga-Yakovleva/RHVoice/downloads
Вот и в ауре есть, а звука - нет. То есть я поставила, оно собралось и установилось, а при использовании - молчит. Может хитрость какая есть?
Колючка
Вот и в ауре есть, а звука - нет. То есть я поставила, оно собралось и установилось, а при использовании - молчит. Может хитрость какая есть?
У меня установилось и заработало. Подтверждаю: это лучшее, что я слышал в Linux.
Вы какой командой запускаете? Попробуйте:
echo привет | RHVoice | play -q -
Колючка
Вот и в ауре есть, а звука - нет. То есть я поставила, оно собралось и установилось, а при использовании - молчит. Может хитрость какая есть?
как оказалось собирать нужно с помощью aurget, собранное через yaourt почему-то глючит
ну и дальше
echo "Вдоль обрыва, по-над пропастью, по самому краю Я коней своих нагайкою стегаю, - погоняю Что-то воздуху мне мало, ветер пью, туман глотаю, Чую, с гибельным восторгом - пропадаю, пропадаю"|RHVoice -wRussian -WElena -p100|aplay -q
работает ))
Урра! Заработало! Действительно, через аургет все работает. Спасибо.
 
Зарегистрироваться или войдите чтобы оставить сообщение.