Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: [HOWTO] Учим компьютер говорить по-русски / Festival скрипты  (Прочитано 51969 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн -=gr!n=-

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Сначала просто написал скрипт будильника. Теперь попробую собрать инфу по разным скриптам с использованием синтезатора речи festival в одну тему.
Хотя на самом деле это уже сделано здесь
Ну да ладно. Итак начнем.


Установка festival и festvox-ru, исправление багов.

Пакеты festival и festvox-ru лежат в стандартных репозиториях UBUNTU Karmic и Lucid. Ставим:

sudo apt-get install festival festvox-ru
Если у вас более ранний дистрибутив, то festvox-ru можно взять здесь (распаковать в /usr/share/festival/voices/russian/msu_ru_nsh_clunits)

Теперь исправим пару багов:
(Нажмите, чтобы показать/скрыть)

(Нажмите, чтобы показать/скрыть)

На этом подготовка завершена. Приступим непосредственно к написанию скриптов.
Стоп, чуть не забыл. Чтобы не было лишних вопросов, заранее предупрежу (или напомню), скриптам нужно давать право на исполнение.
chmod +x script.shТеперь приступим.


Будильник

Создаем скрипт в домашнем каталоге
gedit alarm.sh
(Нажмите, чтобы показать/скрыть)
Пришлось нарушить правила русского языка ради более-менее нормального звочания festival :)

Чтобы поставить будильник, вводим в терминале команду "crontab -e".
Должен запускаться консольный текстовый редактор. Но в первый раз система спрашивает, какой именно редактор вам больше по душе: ed, nano или vim.tiny. Если не знаете, выбирайте nano (нужно нажать "2").
В редакторе прописываем нужные параметры:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
SHELL=/bin/bash
# m h  dom mon dow   command
0 7 * * 1-5 ./alarm.sh
0 10 * * 6-7 ./alarm.sh
Указываем нужное время, у меня в будние дни будильник срабатывает в 7:00, а в выходные в 10:00.
Сохраняем (Ctrl+O), сохраняем как будет предложено. И выходим из редактора (Ctrl+X).

Если манипуляции в терминале оказались (или показались) сложными, то можно запланировать время работы будильника, воспользовавшись gui для cron - gnome-schedule.

При срабатывании будильника сначала включается плеер, какое-то время играет музыка, потом громкость снижается, и электронный голос приветствует и сообщает нам инфу по сегодняшнему дню, время, день, температура за окном. Затем снова играет плеер.


Озвучка открытия/закрытия крышки ноутбука

Открываем для редактирования файл /etc/acpi/lid.sh, для этого набираем в терминале:
sudo gedit /etc/acpi/lid.sh
Добавляем в этот файл перед строкой test -f /usr/share/acpi-support/state-funcs || exit 0 следующий текст:
grep -q closed /proc/acpi/button/lid/LID/state
if [ $? = 0 ]
then
echo "Зачем вы меня закрыли?" | festival --tts --language russian;
else
echo "Привет!" | festival --tts --language russian;
fi
Ну или можно вписать стандартные фразы типа "открыто/закрыто".
Соответственно что напишете, то и будет говорить ноутбук при открытии/закрытии крышки.


Проверка почты gmail

Создаем скрипт в домашнем каталоге

gedit gmail
(Нажмите, чтобы показать/скрыть)

Вместо login:password соответственно вставляем свои логин и пароль. Скрипт также работает для почты @xakep.ru

И снова используем cron, чтобы запланировать автоматическую проверку. Вводим в терминале команду "crontab -e". И прописываем нужные параметры. В моем случае это:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
SHELL=/bin/bash
# m h  dom mon dow   command
*/15 17-23 * * 1-5 bash gmail
*/15 10-23 * * 6-7 bash gmail


Чтение всплывающих уведомлений

Нам необходимо создать два скрипта, один из которых мы потом добавим в автоматически-запускаемые приложения в GNOME.
Итак, скрипт первый (speech.sh):
(Нажмите, чтобы показать/скрыть)

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

dbus-monitor "interface='org.freedesktop.Notifications', member='Notify'" | $1

Что делает этот скрипт. Он в качестве параметра принимает название первого скрипта (путь до него должен быть полный) и вызывает утилиту dbus-monitor, которая позволяет увидеть, что передается по шине dbus непосредственно для всплывающих уведомлений. Вывод от dbus-monitor мы передаем на вход нашему первому скрипту.

Далее, добавляем в запускаемые приложения GNOME новую команду (у меня выглядит так):
/home/user/run_speech.sh /home/user/speech.sh
Перезапускаем GNOME и смотрим что получилось. Для проверки можно сделать следующее:
notify-send "Привет" "Я твое новое голосовое сообщение"
Однако, наверняка среди установленных на вашем компьютере приложений найдется программа, всплывающие сообщения которой вы не захотите, чтобы festival озвучивал. В таком случае эту программу можно добавить, так скажем, в "исключения", например, как я это сделал с rhythmbox:
(Нажмите, чтобы показать/скрыть)


Озвучка обрыва ppp0 в коньках/by goldskif & ratte

Прописываем в коньках (~/.conkyrc):
${if_empty ${exec /home/user/eth.sh}} $endif
В папке пользователя создаем файл eth.sh:
#!/bin/sh
LOCKFILE="/tmp/$VAR.lock"
VAR=`sudo ifconfig $1| grep "ppp0"`;
if [ "$VAR" = '' ] ; then
 if (! test -f ${LOCKFILE}) then
touch ${LOCKFILE}
echo "человек. обрати внимание, связь потеряна, я нервничаю." | festival --tts --language russian
 fi
else
 if (test -f ${LOCKFILE}) then
     rm ${LOCKFILE}
     echo "человек. мы он лайн." | festival --tts --language russian
 fi
fi


Озвучка подключения/отключения USB-устройств
(В Ubuntu 10.10 возможно работать не будет)

Снова два скрипта.
Первый - /etc/udev/rules.d/62-festival.rules
SUBSYSTEMS=="usb", RUN+="/usr/bin/boltalka.sh %k"
SUBSYSTEMS=="block", RUN+="/usr/bin/boltalka.sh %b"
Второй - /usr/bin/boltalka.sh
(Нажмите, чтобы показать/скрыть)

Чтобы говорил по-русски, можно сделать, например, так:
(наименование устройства озвучиваться не будет)
(Нажмите, чтобы показать/скрыть)

Благодарности: goldskif, ratte, OMUT, enfernal, bsod, КирIk, Rasskazow
habrahabr.ru, ru.festivalspeaker.wikia.com, ubuntuforums.org, welinux.ru
« Последнее редактирование: 12 Январь 2013, 17:31:23 от -grin- »

Оффлайн ratte

  • Активист
  • *
  • Сообщений: 461
  • http://selisiltra.ho.ua/
    • Просмотр профиля
    • мягкая депрессия
привет. у меня вопросы появились по поводу озвучки нотификаций- notify-send  команда не найдена.
правда у меня Debian Squeeze, но сути не меняет.
можно ссылку на источник?

Оффлайн -=gr!n=-

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
привет. у меня вопросы появились по поводу озвучки нотификаций- notify-send  команда не найдена.
правда у меня Debian Squeeze, но сути не меняет.
можно ссылку на источник?

Конечно, вот

Оффлайн jcrush

  • Активист
  • *
  • Сообщений: 678
  • Khabara.Ru
    • Просмотр профиля
    • Компьютерные интернет обзоры
а распознавателя речи в линухе нету? в текст имеется ввиду.
Ubuntu Mate Stfw.Ru — SEO блог ...

Оффлайн ratte

  • Активист
  • *
  • Сообщений: 461
  • http://selisiltra.ho.ua/
    • Просмотр профиля
    • мягкая депрессия
а распознавателя речи в линухе нету? в текст имеется ввиду.
есть: sphinx и julius , но, как я понял, они далеки от совершенства

Оффлайн tolik-blik

  • Новичок
  • *
  • Сообщений: 27
  • Ubuntu 10.04
    • Просмотр профиля
А у меня время не говорит первый скрипт :-(

Оффлайн ratte

  • Активист
  • *
  • Сообщений: 461
  • http://selisiltra.ho.ua/
    • Просмотр профиля
    • мягкая депрессия
А у меня время не говорит первый скрипт :-(
а всё остальное говорит?
привет. у меня вопросы появились по поводу озвучки нотификаций- notify-send  команда не найдена.
правда у меня Debian Squeeze, но сути не меняет.
можно ссылку на источник?
вернулся на Ubuntu (9.10) и новая заноза- если в терминале написать notify-send то работает, а все сообщения системы судя по всему идут в другом виде, ибо не озвучиваются :(

Оффлайн -=gr!n=-

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
А у меня время не говорит первый скрипт :-(

Попробуй запустить такой командой:
bash alarm 2> alarm.logИ смотри ошибки в файле alarm.log
Если будет пустой, то так:
bash alarm &> alarm.logДолжно навести на мысль, что не так.

вернулся на Ubuntu (9.10) и новая заноза- если в терминале написать notify-send то работает, а все сообщения системы судя по всему идут в другом виде, ибо не озвучиваются :(
ratte, каюсь, скрипт этот выложил не тестируя, доверился welinux.ru.

Пользователь решил продолжить мысль 25 Апрель 2010, 22:53:30:
вернулся на Ubuntu (9.10) и новая заноза- если в терминале написать notify-send то работает, а все сообщения системы судя по всему идут в другом виде, ибо не озвучиваются :(

У меня такая же фигня. Хотя в моем случае все ясно, у меня уведомления вообще идут через cairo-dock.
« Последнее редактирование: 25 Апрель 2010, 22:53:30 от -grin- »

Оффлайн enfernal

  • Новичок
  • *
  • Сообщений: 49
    • Просмотр профиля
Можно ли сделать проверку плеера audacious для скрипта проверка писем в почте gMail
Я сделал так:
if [ $NUMB -eq "0" ]; then :

else

   if [ "`ps -A | grep -c audacious`" -ne "0" ]; then audacious --pause
   elif [ "`ps -A | grep -c rhythmbox`" -ne "0" ]; then rhythmbox-client --pause
   fi

      echo "Хозяин, на вашем почтовом ящике имеется $NUMB_MSG." | festival --tts --language russian
      sleep 1

   if [ "`ps -A | grep -c audacious`" -ne "0" ]; then audacious --play
   elif [ "`ps -A | grep -c rhythmbox`" -ne "0" ]; then rhythmbox-client --play
   fi
fi

exit 0

Проблем в том что,пауза и включение музыки срабатывают,но при последующем проигрывании включается ещё раз audacious, и в итоге их в день может быть до 20 штук, как решить проблему?
И ещё одна проблема,он говорит не сразу,а сначала поставит паузу и после секунд через 40-50 говорит
« Последнее редактирование: 28 Апрель 2010, 13:31:40 от enfernal »

Оффлайн ratte

  • Активист
  • *
  • Сообщений: 461
  • http://selisiltra.ho.ua/
    • Просмотр профиля
    • мягкая депрессия
пауза это нормально для фестиваля. очень он тормозной еще. да и на проверку уходит время.

Оффлайн enfernal

  • Новичок
  • *
  • Сообщений: 49
    • Просмотр профиля
Ещё есть проблема, он то говорит(т.е. работает) то не говорит(не работает),т.е. произвольно хочет работает,хочет нет

Оффлайн ratte

  • Активист
  • *
  • Сообщений: 461
  • http://selisiltra.ho.ua/
    • Просмотр профиля
    • мягкая депрессия
Фестиваль не работает,если работает проигрыватель-аудио или видео,либо флэш в браузере.даже если плеер стоит на паузе он не будет болтать.

Кстати еще одно применение фестиваля- pidgin-festival.есть у него косяки , но приручить можно.пользуюсь уже давно-очень полезная штука.

Оффлайн enfernal

  • Новичок
  • *
  • Сообщений: 49
    • Просмотр профиля
Фестиваль не работает,если работает проигрыватель-аудио или видео,либо флэш в браузере.даже если плеер стоит на паузе он не будет болтать.

Кстати еще одно применение фестиваля- pidgin-festival.есть у него косяки , но приручить можно.пользуюсь уже давно-очень полезная штука.
Да тоже стоит данный плагин для пингвина,но сейчас вот у меня играет музыка и уведомления из pidgin, festival всё равно говорит, потом  иногда на время прекращает и после снова начинает :)

Оффлайн -=gr!n=-

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Проблем в том что,пауза и включение музыки срабатывают,но при последующем проигрывании включается ещё раз audacious, и в итоге их в день может быть до 20 штук, как решить проблему?
Вообще то я пробовал этот скрипт с плеером audacious2. Вроде бы все нормально было. Может тебе стОит поставить версию 2.2.1? Ну или попробовать команду audacious --play-pause
Пользователь решил продолжить мысль 28 Апрель 2010, 18:37:28:
Фестиваль не работает,если работает проигрыватель-аудио или видео,либо флэш в браузере.даже если плеер стоит на паузе он не будет болтать.
Вообще-то этому багу есть лечение, оно в первом посте.

Цитировать
В файл /usr/share/festival/festival.scm в конце добавить строки
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")
« Последнее редактирование: 28 Апрель 2010, 20:38:22 от -grin- »

Оффлайн enfernal

  • Новичок
  • *
  • Сообщений: 49
    • Просмотр профиля
Вообще-то этому багу есть лечение, оно в первом посте.
Цитировать
В файл /usr/share/festival/festival.scm в конце добавить строки
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")
[/quote]

Я добавил в .festivalrc,
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")
Но в пиджине я использую команду для вывовда звука:
aplay -D surround41 %s

Звук стал воспроизводится гораздо качественне и лучше, может в .festivalrc, нужно изменить строчку: (Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")
На:
(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r surround41 $SR $FILE")


Вот эти пункты:
В файл /usr/share/festival/languages.scm дописать вначале:
Код:

(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))


Я не делал, у меня всё и без них работает но не совсем гладко,я уже описал проблемы, но если сделать эти пункты,тогда ничего не работает, ubuntu 10.04

 

Страница сгенерирована за 0.273 секунд. Запросов: 23.