digiwhite 07.02.2010 21:51
Tips & tricks — Голосовое чтение уведомлений (от notify-send) в GNOME с помощью festival.
Сегодня г-н vorovtsev в этом посте задал соответствующий вопрос. Стало мне интересно самому, что такое этот festival и как реализовать то, что ему (vorovtsev`у) нужно. Да и пилить модель для QTreeView несколько надоело :).И так. Что такое festival. festival это синтезатор человеческой речи, поддерживает несколько языков, в том числе и русский. Поэтому, если он у вас не установлен, то для начала нужно его установить (замечу сразу, что русский языковой пакет для festival занимает 196 Мб). Т.к. у меня Ubuntu, то для установки будет достаточно сделать:
1 |
|
Вся шутка заключается в том, что несмотря на установленный русский языковой пакет, festival все равно не понимает русский. Чтобы он его начал понимать, придется ручками поправить конфигурацию festival (походу это все же косяк мйнтейнеров пакета). И так, открываем вашим любимым текстовым редактором из под суперпользователя файл /usr/share/festival/languages.scm и добавляем в него (если все же нету) туда в начале и конце соответственно следующие строчки:
Строчку вида ;; ... вставлять не надо, а вторую часть вставьте в конце, там уже будут аналогичные конструкции, только для других языков (кстати, увидел там клингонский o_O). Кстати, в конфигурации в частности и в festival вообще используется Scheme.
После установки и настройки festival нам необходимо создать два скрипта, один из которых мы потом добавим в автоматически-запускаемые приложения в GNOME.
Итак, скрипт первый (speech.sh):
Суть этого скрипта на bash заключается в следующем. Он принимает со стандартного ввода данные, полученные из второго скрипта и затем парсит их. Затем формирует сообщение и отправляет его в festival для синтеза речевого сообщения. Данные для этого скрипта предоставляет второй скрипт (run_speech.sh), который очень короткий и выглядит так:
1 |
|
Что делает этот скрипт. Он в качестве параметра принимает название первого скрипта (путь до него должен быть полный) и вызывает утилиту dbus-monitor, которая позволяет увидеть, что передается по шине dbus непосредственно для всплывающих уведомлений. Вывод от dbus-monitor мы передаем на вход нашему первому скрипту.
Далее, добавляем в запускаемые приложения GNOME новую команду (у меня выглядит так):
1 |
/home/digiwhite/devel/scripts/notify-speech/run_speecher.sh /home/digiwhite/devel/scripts/notify-speech/speech.sh
|
Перезапускаем GNOME и смотрим что получилось. Для проверки можно сделать следующее:
1 |
|
Скрипты, чтобы не копировать в буфер и из буфера можно скачать по этим ссылкам:
run_speech.sh
speech.sh
PS: к недостаткам, которые мне не удалось победить, скажу следующее. При совместной работе с pidgin`ом, если слать уведомления то в звуковые сообщения они попадают через минуты. Связано это с тем, что pidgin отправляет уведомления туда-же и шлет гигантские массивы данных. Они хоть и не парсятся, но разовый вызов grep все же на скорость влияет. Как победить это, пока не знаю.
Aineko 07.02.2010 22:26 #
+ 0 -
а как вызвать notify в кде?
Точно так как написано в топике.
Принцип одинаковый и в ГНОМе и в КДЕ
Принцип одинаковый и в ГНОМе и в КДЕ
Ну средствами KDE4, вроде так например:
kdialog --passivepopu 'Сообщение' 5
точнее
работает
Для проверки можно сделать следующее:
notify-send "Привет" "Я твое новое голосовое сообщение"
notify-send "Привет" "Я твое новое голосовое сообщение"
работает
Да выглядит оно нативно кстати. Можно ничего не переделывать даже.
А насколько фестиваль вообще внятно читает? Пробовал как-то давно под виндой какой-то синтезатор - это кошмар. И с тех пор и не смотрел в их сторону.
Ну :). Читает в общем :). Понять можно. С ударениями не все гладко.
У меня он на стыках слов слоги проглатывал, как будто торопился куда-то...
в конфигурации в частности и в festival вообще используется lisp.
Не Lisp, а его диалект — Scheme. Это хоть и похожие, но всё же разные вещи, просьба не путать.
sudo apt-get install festiАval festvox-ru
поправьте на
sudo apt-get install festival festvox-ru