Прочитал статью про SAPI и Powershell (
Учим PowerShell разговаривать), и мне стало интересно как же с синтезом русскоязычной речи в родной для меня операционке, Linux'e. Как выяснилось все далеко не так радужно, да и качество синтеза далеко до голоса Алены, но все же.
Для синтеза речи в linux'e по традиции используется
Festival последняя стабильная версия 1.95, но в поставке нет русского голоса, немного порыскав я набрел на
проект по синтезу русской речи посредством Festival, где написано что для работы с русским языком понадобится как минимум версия 1.96 бета. Ну ничего в Ubuntu 9.04 как раз такая и стоит. Дальше есть два варианта, либо собрать пакет самостоятельно, либо для пользователей Debian'a или Ubuntu поставить отдельный пакет, весит данное чудо ~190 метров, не хило так я бы сказал. Так как у меня Ubuntu решил поставить пакет.
Пакет называется
Festvox-ru, и будет доступен в ubuntu начиная с версии 9.10, так как на руках 9.04, то скачиваем пакет и устанавливаем его в ручную. И тут вскрылась маленькая проблема.
При попытке попросить festival произнести что то по русски он просто молчал, если же указывался язык
echo "Проверка" | festival --tts --language russian, то вываливался c ошибкой:
«Unsupported language, using English»
SIOD ERROR: unbound variable: voice_rab_diphone
festival: fatal error exiting.
Дамс, попробуем сделать так как в мануале, запускаем festival в интерактивном режиме, указываем голос принудительно (voice_msu_ru_nsh_clunits) и просим сказать что нибудь (SayText “Проверка”), вуаля все нормально работает, оформляем это в виде bash script'a и получаем
#!/bin/sh
festival -b "(begin (voice_msu_ru_nsh_clunits) (SayText \"$1\" nil))"
Теперь сохраняем это в файл sayit.sh, назначаем права на запуск chmod a+x sayit.sh и проверяем
./sayit.sh «Проверка»
Ура! все работает.
Если хотим прочить файл используем:
#!/bin/sh
festival -b "(begin (voice_msu_ru_nsh_clunits) (tts_file \"$1\" nil))"
Но все же почему же у нас не заработал русский язык по умолчанию, копаем дальше.
Немного гугления и мы находим багрепорт к debian'овцам от Сергея Кирпичева,
вот этот багрепорт. Похоже нам нужно подправить файл languages.scm/
Так что идем в каталог /usr/share/festival где находим этот файл и вносим изменения.
Дописываем вначале:
(define (language_russian)
"(language_russian)
Set up language parameters for Russian."
(set! male1 voice_msu_ru_nsh_clunits)
(male1)
(Parameter.set 'Language 'russian)
)
и в define(select_language language). добавляем пару строчек
((equal? language 'russian)
(language_russian))
Все теперь русский язык поддерживается.
Пробуем прочитать файл.
festival --language russian -tts festival.txt
Ну что же все даже не так уж и плохо, единтвенное «но» это то что Festival достаточно заметно думает перед тем как начать произносить, и иногда ему не нравиться текст, например вместо того чтобы пропускать то что он не может произнести он вываливается с сообщением о
LTS_Ruleset russian_downcase: no rule matches:
LTS_Ruleset: # *here* <a #
Ну что же значит надо поубивать из текст ссылки.
Пока что результат меня не особо радует, в принципе синтез русской речи под Linux с одной стороны возможен, с другой качество этого синтеза оставляет желать лучшего. А у меня появилось два новых шелл скрипта. sayit.sh и readit.sh ^_^
Примеры озвучивания можно посмотреть в статье
Учим iPod Shuffle G3 говорить по-русски
Используемые источники:
Искусство программирования на языке сценариев командной оболочки
Русский в Festival
Новая база для синтеза речи, и голос для festival
Debian Bug report logs — #516262 festival: Please add support for --language russian
P.S. по совету
rengel_system лучше вместо установки пакета ручками подключить
этот репозиторий
P.P.S по совету
eugenex15 решил попробовать espeak. устанавливается очень просто, русский язык сразу из коробки, для сохранения образца голоса можно всего лишь добавить один параметр, но вот качество мне показалось просто ужасным. Наверно можно под строить произношение чтобы получить более менее цивильный результат, но у меня не получилось.
P.P.P.S выложил два примера синтезируемой фразы при дефолтных параметрах в espeak и в festival
espeak
festival
(если кто может предложить другое место куда будет удобней положить wav'ки с удовольствием воспользуюсь)
UPD: Ответ от хабраюзера
vk2 голос Алены
_________
Текст подготовлен в
ХабраРедакторе
комментарии (58)
Спасибо за заметку, будем пробовать.
'espeak'
она мне читала текстовый файл с нашими стихами и мы с подругой ухахатывались!!!
русский тоже присутствовал.
смотрите 'man espeak'…
Но надо попробовать. Как попробую отпишусь.
espeak -f game.log
espeak: wave_pulse.cpp:707: size_t wave_write(void*, char*, size_t): Assertion `stream' failed.
Aborted
зачем пост сразу после виндового аналога.
эх, сейчас посыпятся холивары.
Просто во время своих экспериментов я потратил достаточно времени на гугления, и поэтому решил поделиться своими изысканиями.
то статью я написать не могу:
1. я был на работе и занят (когда комментировал)
2. у меня карма минусовая (могу только комментировать)
а у Вас? :)
Мне так и не удалось его настроить
А с чего это линуксоид мечтает о голосе Алены? Только Ричард и Линус!
^_^ к тому же интеграции с программами которые поддерживают festival не будет.
30-дневная триал-версия доступна для скачивания совершенно бесплатно (в комплекте также идет еще один женский голос, Heather для American English).
Алена, надо признать, умница — это лучший русский голос, что я слышал. А уж учитывая, что она встраивается в MacOS Speech API, результат и вовсе прекрасный (от чтения текста в браузере до озвучивания событий в Growl и через в /usr/bin/say). Полная интеграция с операционной системой.
www.box.net/shared/ibxoplkqbt
вообще я удивлен, festival совсем неплохо звучит.
Дамс, качество у вашего синтезатора получше, но ничего и наш дорастет.
www.loquendo.com/en/audio/Simon_Kate_interview.mp3 — british english
www.loquendo.com/en/audio/Olga.mp3 — русский
Как живые почти.
ужа с ежом«удава» c фестивалем.Вставляешь флешку, оно произносит метку тома и размер её. Вставляешь мышку — «USB PS/2-compatible mouse detected». Ляпота.
вот тут предлагают голос чуть по лучше, судя по образцу синтеза. сам не ставил.
и даже наших девушек подговорили записать образцы-семплы?
и много ли голосов в винде 7?
Да, обидно конечно, что в лине не так, но все же — давайте не забывать, что основное назначение ОС до относительно недавнего времени было — серверы
тогда можно будет создавать аудио книги самостоятельно :)
уверен это будет интересно
а для festival'а делаем вот так.
cat book.txt | text2wave -o file.wav -eval '(voice_msu_ru_nsh_clunits)'
получившийся wav файл сжимаем lame'ом.
lame file.wav file.mp3
А с полученной mp3 шкой можно делать что угодно.
win тут и не причём :)
осталось найти простой способ сделать split для mp3 :)
www.voip-info.org/wiki/view/Asterisk+festival+installation
это может серёзно разнообразить телефонийный экспириенс.
другое дело, что задержка на синтез может оказаться неприемлемой в интерактивном режиме.
на достаточно длинных фразах, по идее, оно должно стремиться к какому-то фиксированному значению.
оно же умеет генерить звук в файл?
Сейчас сделал замеры, для кусков речи длинной в секунду и в 5 секунд, перед началом синтеза он думает приблизительно 1,5 секунды.
$ festival --server
$ cat speaker.py
…
CMD_MSG_SAY = 'echo "%s" | festival_client --async --ttw --aucommand \'aplay $FILE\''
особенно в контексте использования изнутри астериска…
у меня он как-то по дефолту как сервер в голове нарисовался, такчто я подумал, что те 1.5 секунды — это чисто синтез.
буду, наверно, скоро поднимать тестовый астериск, поиграюсь на нём.