Tips & tricks — Голосовое чтение уведомлений (от notify-send) в GNOME с помощью festival.
Сегодня г-н vorovtsev в этом посте задал соответствующий вопрос. Стало мне интересно самому, что такое этот festival и как реализовать то, что ему ( vorovtsev`у) нужно. Да и пилить модель для QTreeView несколько надоело :).
И так. Что такое festival. festival это синтезатор человеческой речи, поддерживает несколько языков, в том числе и русский. Поэтому, если он у вас не установлен, то для начала нужно его установить (замечу сразу, что русский языковой пакет для festival занимает 196 Мб). Т.к. у меня Ubuntu, то для установки будет достаточно сделать:
Вся шутка заключается в том, что несмотря на установленный русский языковой пакет, festival все равно не понимает русский. Чтобы он его начал понимать, придется ручками поправить конфигурацию festival (походу это все же косяк мйнтейнеров пакета). И так, открываем вашим любимым текстовым редактором из под суперпользователя файл /usr/share/festival/languages.scm и добавляем в него (если все же нету) туда в начале и конце соответственно следующие строчки:
Строчку вида ;; ... вставлять не надо, а вторую часть вставьте в конце, там уже будут аналогичные конструкции, только для других языков (кстати, увидел там клингонский o_O). Кстати, в конфигурации в частности и в festival вообще используется Scheme.
После установки и настройки festival нам необходимо создать два скрипта, один из которых мы потом добавим в автоматически-запускаемые приложения в GNOME.
Итак, скрипт первый (speech.sh):
Суть этого скрипта на bash заключается в следующем. Он принимает со стандартного ввода данные, полученные из второго скрипта и затем парсит их. Затем формирует сообщение и отправляет его в festival для синтеза речевого сообщения. Данные для этого скрипта предоставляет второй скрипт (run_speech.sh), который очень короткий и выглядит так:
Что делает этот скрипт. Он в качестве параметра принимает название первого скрипта (путь до него должен быть полный) и вызывает утилиту dbus-monitor, которая позволяет увидеть, что передается по шине dbus непосредственно для всплывающих уведомлений. Вывод от dbus-monitor мы передаем на вход нашему первому скрипту.
Далее, добавляем в запускаемые приложения GNOME новую команду (у меня выглядит так):
Перезапускаем GNOME и смотрим что получилось. Для проверки можно сделать следующее:
Скрипты, чтобы не копировать в буфер и из буфера можно скачать по этим ссылкам:
PS: к недостаткам, которые мне не удалось победить, скажу следующее. При совместной работе с pidgin`ом, если слать уведомления то в звуковые сообщения они попадают через минуты. Связано это с тем, что pidgin отправляет уведомления туда-же и шлет гигантские массивы данных. Они хоть и не парсятся, но разовый вызов grep все же на скорость влияет. Как победить это, пока не знаю.
И так. Что такое festival. festival это синтезатор человеческой речи, поддерживает несколько языков, в том числе и русский. Поэтому, если он у вас не установлен, то для начала нужно его установить (замечу сразу, что русский языковой пакет для festival занимает 196 Мб). Т.к. у меня Ubuntu, то для установки будет достаточно сделать:
sudo apt-get install festival festvox-ru
Вся шутка заключается в том, что несмотря на установленный русский языковой пакет, festival все равно не понимает русский. Чтобы он его начал понимать, придется ручками поправить конфигурацию festival (походу это все же косяк мйнтейнеров пакета). И так, открываем вашим любимым текстовым редактором из под суперпользователя файл /usr/share/festival/languages.scm и добавляем в него (если все же нету) туда в начале и конце соответственно следующие строчки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Строчку вида ;; ... вставлять не надо, а вторую часть вставьте в конце, там уже будут аналогичные конструкции, только для других языков (кстати, увидел там клингонский o_O). Кстати, в конфигурации в частности и в festival вообще используется Scheme.
После установки и настройки festival нам необходимо создать два скрипта, один из которых мы потом добавим в автоматически-запускаемые приложения в GNOME.
Итак, скрипт первый (speech.sh):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
Суть этого скрипта на bash заключается в следующем. Он принимает со стандартного ввода данные, полученные из второго скрипта и затем парсит их. Затем формирует сообщение и отправляет его в festival для синтеза речевого сообщения. Данные для этого скрипта предоставляет второй скрипт (run_speech.sh), который очень короткий и выглядит так:
1 2 3 4 5 6 |
|
Что делает этот скрипт. Он в качестве параметра принимает название первого скрипта (путь до него должен быть полный) и вызывает утилиту dbus-monitor, которая позволяет увидеть, что передается по шине dbus непосредственно для всплывающих уведомлений. Вывод от dbus-monitor мы передаем на вход нашему первому скрипту.
Далее, добавляем в запускаемые приложения GNOME новую команду (у меня выглядит так):
1 2 3 |
|
Перезапускаем GNOME и смотрим что получилось. Для проверки можно сделать следующее:
notify-send "Привет" "Я твое новое голосовое сообщение"
Скрипты, чтобы не копировать в буфер и из буфера можно скачать по этим ссылкам:
- run_speech.sh
- speech.sh
PS: к недостаткам, которые мне не удалось победить, скажу следующее. При совместной работе с pidgin`ом, если слать уведомления то в звуковые сообщения они попадают через минуты. Связано это с тем, что pidgin отправляет уведомления туда-же и шлет гигантские массивы данных. Они хоть и не парсятся, но разовый вызов grep все же на скорость влияет. Как победить это, пока не знаю.