Краткий обзор синтезаторов речи

14 марта 2011

Синтезатор голоса (он же «Text To Speech» или «TTS») — это программа, предназначенная для преобразования текста в человеческую речь. Таких программ сейчас много, но, к сожалению, качество большинства синтезаторов оставляет желать лучшего. В этой заметке вы найдете краткое описание некоторых синтезаторов.

Заглянув в порты FreeBSD, я нашел пять программ для синтеза речи — espeak, flite, epos, rsynth и festival. Других программ не искал. Образ мышления был следующий — если программу не портировали под фряху, значит либо она никому не нужна, либо разработчик не позаботился должным образом об ее переносимости, либо хочет за нее много денег. Еще я решил включить в обзор translate.google.com и Microsoft Speech API, но о них — в самом конце.

RSynth мне совершенно не понравился. В первую очередь расстроило отсутствие хоть какой-то документации. Ни man-страниц, ни малейшего намека, что для синтеза речи следует использовать утилиту say, а не rsynth (такой на диске вообще не оказалось). Программа аварийно завершала работу ровно через секунду после запуска независимо от входного текста. Если записывать результат в аудио-файл, то все хорошо, но мне не удалось выяснить, что это за формат такой «Sun/Next Audio». Качество речи довольно посредственное. Русский язык не поддерживается, если не считать транслит. Согласно информации на SourceForge, программа не обновлялась с июля 2009 года.

Далее я попробовал Festival. Эта программа тоже не обновлялась с 2009 года, но на Хабре ее хвалили. Здесь также не обошлось без танцев с бубнами. Сначала я выяснил, что «из коробки» синтезатор не имеет ни одного языка. Ну да ладно, в портах их много, установил festvox-ked16. Потом оказалось, что для работы программе требуется NASd. В rc.d-скриптах я такого не нашел, пришлось запускать вручную:

/usr/X11R6/bin/nasd -local -b

После этого какое-то время я провел в изучении man’ов, чтобы разобраться в интерфейсе программы. Он оказался не вполне тривиальным:

echo "Ya govoru po rooski" | festival --tts

Качество речи у Festival я бы назвал приемлемым. Прикручивание русского (настоящего русского) и простого сохранения результата в аудио-файл я так и не осилил. Если вы — любитель сложных путей, можете потратить на это свое время (вот — про язык, и вот — про сохранение). Я же решил, что с меня на этом хватит.

Следующим в моем списке оказался Epos. Программу писали чехи, в связи с чем синтезируемая ею речь очень приятна для русских ушей. Если вдобавок написать свой небольшой транслитератор, Epos’ом становится почти удобно пользоваться:

say-epos --voice violka `./translit.pl "Я говорю по-русски"` -o | \
  mplayer -cache 4096 -

Порадовала поддержка многих голосов, как мужских, так и женских. Имеется поддержка многих языков, но на данный момент в их число входит только чешский и словацкий. Из неприятных моментов — заброшенность проекта (не обновляется с 2009 года), а также проблемы со звуками Ч, Ш и Щ. Мне так и не удалось заставить Epos произносить их.

В отличие от предыдущих синтезаторов FLite активно развивается, но, похоже, что он заточен только под английский язык. Кстати, он разрабатывается в том же Carnegie Mellon University, что и Festival. Хоть программа и не поддерживает русский язык, можно «обучить» ее великому и могучему, переведя русский текст в транслит:

flite -t "Ya umeyu govorit po roosski"

Результат напомнил мне речь русских бандитов в старых голливудских фильмах. Существует проект многоязыкового FLite (ML-Flite, Multilanguage FLite), но, похоже, что в его рамках пока поддерживается только итальянский.

И напоследок я приберег eSpeak. Порадовал простой интерфейс, поддержка большого количества языков «из коробки» и быстрая работа.

espeak -v russian_test -s 120 \
  "В блоге http://eax.me появился новый пост"

Синтезируемую речь трудно назвать идеальной, но она вполне разборчива. Программа может работать не только под *nix, но также под Windows и MacOS. Похоже, eSpeak активно развивается. На момент написания этих строк SourceForge утверждал, что последнее обновление программы было 11 часов назад. В целом я бы назвал эту утилиту наиболее интересной и перспективной среди рассмотренных.

Дополнение: Было замечено, что eSpeak всегда ставит ударение на первый слог. Чтобы слова звучали правильно, нужно ставить перед ударным слогом пробел. Например:

espeak -v russian_test -s 120 "Прив етствую мой господ ин"

Если вам требуется безупречный (ну почти) русский язык, обратите внимание на translate.google.com. Это, конечно, не программа, а веб-сервис. Зато он позволяет получать практически безупречно синтезированную русскую (и не только русскую!) речь. Послушать примеры и скачать Python-скрипт для выдергивания и склеивания сгенерированных Гуглом mp3-файлов можно на ХабраХабре. Из недостатков скрипта следует отметить зависимость от выхода в интернет и, следовательно, медленную скорость работы.

В заключение хотелось бы отметить, что в Windows имеется собственный набор API для синтеза речи. Сам я не удосужился его проверить (в последнее время я сильно интересуюсь кроссплатформенностью), так что оставляю вам это в качестве «домашнего задания». Всю необходимую информацию по Microsoft Speech API (SAPI) вы найдете на sources.ru и в MSDN.

Скрипт translit.pl и примеры синтезированной с помощью названных утилит речи вы найдете в этом архиве.

Дополнение: В хабрастатье про Python-скрипт для выдирания голоса из Google Translate все ссылки битые, но есть другой скрипт. Если сидим под Ubuntu:

sudo apt-get install python-pip
sudo pip install gTTS
gtts-cli -t 'привет, это проверка звука' -l ru test.mp3

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.