Видео смотреть бесплатно

Смотреть мама и сын видео

Официальный сайт mydebut 24/7/365

Смотреть видео бесплатно

digiwhite 07.02.2010 21:51

Tips & tricksГолосовое чтение уведомлений (от notify-send) в GNOME с помощью festival.

Сегодня г-н vorovtsev в этом посте задал соответствующий вопрос. Стало мне интересно самому, что такое этот festival и как реализовать то, что ему (vorovtsev`у) нужно. Да и пилить модель для QTreeView несколько надоело :).


И так. Что такое festival. festival это синтезатор человеческой речи, поддерживает несколько языков, в том числе и русский. Поэтому, если он у вас не установлен, то для начала нужно его установить (замечу сразу, что русский языковой пакет для festival занимает 196 Мб). Т.к. у меня Ubuntu, то для установки будет достаточно сделать:
1
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
(define (language_russian)
"(language_russian)
Set up language parameters for Russian."
(set! male1 voice_msu_ru_nsh_clunits)
(male1)
(Parameter.set 'Language 'russian)
)

;; ...

((equal? language 'russian)
(language_russian))


Строчку вида ;; ... вставлять не надо, а вторую часть вставьте в конце, там уже будут аналогичные конструкции, только для других языков (кстати, увидел там клингонский 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
#!/bin/bash

COMMAND_COUNTER=0
MESSAGE_HEADER=""
MESSAGE_BODY=""
PARSE_REQUIRED=0

while read -r DBUS_MESSAGE ; do
ID=`echo $DBUS_MESSAGE | grep "string\ \"notify-send\""`

if [[ $ID ]] ; then
let COMMAND_COUNTER=0
let PARSE_REQUIRED=1
else
if [ $PARSE_REQUIRED -eq 1 ] ; then
ID=`echo $DBUS_MESSAGE | egrep "string\ \""`

if [[ $ID ]] ; then
let COMMAND_COUNTER=$COMMAND_COUNTER+1
fi

if [ $COMMAND_COUNTER -eq 2 ] ; then
MESSAGE_HEADER=`echo $DBUS_MESSAGE | grep "string\ \"" | sed s/^string\ \"//g | sed s/\"$//g`
fi

if [ $COMMAND_COUNTER -eq 3 ] ; then
MESSAGE_BODY=`echo $DBUS_MESSAGE | grep "string\ \"" | sed s/^string\ \"//g | sed s/\"$//g`

echo "Новое уведомление на тему $MESSAGE_HEADER. $MESSAGE_BODY" | festival --tts --language russian

let COMMAND_COUNTER=$COMMAND_COUNTER+1
let PARSE_REQUIRED=0
fi
fi
fi
done


Суть этого скрипта на bash заключается в следующем. Он принимает со стандартного ввода данные, полученные из второго скрипта и затем парсит их. Затем формирует сообщение и отправляет его в festival для синтеза речевого сообщения. Данные для этого скрипта предоставляет второй скрипт (run_speech.sh), который очень короткий и выглядит так:
1
2
3
#!/bin/bash

dbus-monitor "interface='org.freedesktop.Notifications', member='Notify'" | $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
notify-send "Привет" "Я твое новое голосовое сообщение"


Скрипты, чтобы не копировать в буфер и из буфера можно скачать по этим ссылкам:
run_speech.sh
speech.sh

PS: к недостаткам, которые мне не удалось победить, скажу следующее. При совместной работе с pidgin`ом, если слать уведомления то в звуковые сообщения они попадают через минуты. Связано это с тем, что pidgin отправляет уведомления туда-же и шлет гигантские массивы данных. Они хоть и не парсятся, но разовый вызов grep все же на скорость влияет. Как победить это, пока не знаю.


Тэги: bash dbus festival GNOME2 notify-send
+ 8 -
Похожие Поделиться

Aineko 07.02.2010 22:26 #
+ 0 -
а как вызвать notify в кде?
exelens 07.02.2010 22:34 #
+ 0 -
Точно так как написано в топике.
Принцип одинаковый и в ГНОМе и в КДЕ
digiwhite 07.02.2010 22:37 #
+ 1 -
Ну средствами KDE4, вроде так например:
kdialog --passivepopu 'Сообщение' 5
exelens 07.02.2010 22:37 #
+ 0 -
точнее
Для проверки можно сделать следующее:
notify-send "Привет" "Я твое новое голосовое сообщение"

работает
Aineko 07.02.2010 22:48 #
+ 0 -
работать то оно работает, но не нативно.
digiwhite 07.02.2010 23:03 #
+ 0 -
Да выглядит оно нативно кстати. Можно ничего не переделывать даже.
digiwhite 07.02.2010 22:38 #
+ 0 -
Ответ выше :). Не туда ответил.
ner_uto 07.02.2010 22:31 #
+ 0 -
А насколько фестиваль вообще внятно читает? Пробовал как-то давно под виндой какой-то синтезатор - это кошмар. И с тех пор и не смотрел в их сторону.
digiwhite 07.02.2010 22:37 #
+ 0 -
Ну :). Читает в общем :). Понять можно. С ударениями не все гладко.
exelens 07.02.2010 22:39 #
+ 0 -
Если запятые расставлять то становится лучше
kstep 08.02.2010 03:35 #
+ 0 -
У меня он на стыках слов слоги проглатывал, как будто торопился куда-то...
exelens 08.02.2010 13:05 #
+ 0 -
а ты прямо в слово вставь запятую и он сделает паузу
kstep 08.02.2010 03:34 #
+ 0 -
в конфигурации в частности и в festival вообще используется lisp.

Не Lisp, а его диалект — Scheme. Это хоть и похожие, но всё же разные вещи, просьба не путать.
digiwhite 08.02.2010 06:30 #
+ 0 -
Корошо, не буду.
digiwhite 08.02.2010 06:35 #
+ 0 -
fixed
mirivlad 12.02.2010 04:38 #
+ 1 -
sudo apt-get install festiАval festvox-ru

поправьте на
sudo apt-get install festival festvox-ru
digiwhite 12.02.2010 06:36 #
+ 0 -
Спасибо, поправил :).
yuretsz 12.02.2010 13:36 #
+ 0 -
А если сообщение на английском?
digiwhite 12.02.2010 13:56 #
+ 0 -
Если вы знаете, как на лету определить язык то тогда можно.

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн