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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

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

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

Оффлайн Saltty

  • Активист
  • *
  • Сообщений: 362
  • Соль (Ubuntu 14.04)
    • Просмотр профиля
    • Мой сайт
Я в своём очередном шедевре https://forum.ubuntu.ru/index.php?topic=92123.msg1169154#msg1169154 тоже обрабатывал ноль специально...
Счас проверил, всё равно косяк есть ;) Буду думать дальше...
« Последнее редактирование: 11 Декабря 2011, 23:12:20 от Saltty »

Оффлайн kh-al

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Если честно, я в "шедевре" с наскока разобраться не смогу, знаний не хватает... Точнее очень давно позабыты и требуют собственного внимания... :-) И мой скрипт - это сборная-солянка переработанная самим...
Но у себя проверил, все работает.
Алгоритм:
получаем CURR_TEMP...
И если 0, то принудительно CURR_TEMP=0 перед всем остальным...
CURR_DEGREE (если +, то "плюс", если -, то "минус", иначе "") - поэтому и при 0 - "" "градусов".
Я поступал проще: echo ПЕРЕМЕННАЯ по скрипту, чтобы посмотреть, какие значения переменная обрабатывает перед if-then-else при работе скрипта, и какие после... Либо в тупую в терминале проверяю:
wget -t 1 -q -O - http://www.gismeteo.ru/city/daily/12698/ | grep -m 1 '<div class="temp">' | sed -r 's/<div class="temp">(.[0-9]+).*/\1/g' | awk '{print $1}'. Сейчас +2. Скрипт будет работать и CURR_TEMP="+2", если бы было 0 градусов, то выдало бы echo CURR_TEMP="<div", и далее бы ругался на CURR_TEMP и производные от нее...
Меня тоже напрягало, что все работало, а при 0 ругается не не пойми что...

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

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Если еще актуально, мне кажется, нужно сделать так:
CURR_TEMP="`wget -q -O - http://www.gismeteo.ru/city/daily/ГОРОД/ | grep -m 1 '<div class="temp">' | sed -r 's/[ \t]<div class="temp">(.*[0-9]+).*/\1/g'`"или так:
CURR_TEMP="`wget -q -O - http://www.gismeteo.ru/city/daily/ГОРОД/ | grep -m 1 '<div class="temp">' | sed 's/[ \t]<div class="temp">//g;s/&deg;C<\/div>//g'`"
« Последнее редактирование: 21 Декабря 2011, 22:32:15 от -grin- »

Оффлайн kh-al

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
to -grin-
Актуально. Спасибо. Оба варианта SED грамотно обработали 0 градусов.
За окном как раз ноль градусов случился :)

Может кто-нибудь прикручивал проверку интернет-соединения для фестиваля. А то что-то изначально на 11.10 не работает "автоматическое соединение" (хотя и стоит галочка). И когда случается обрыв ppp0, не узнаешь об этом, если непосредственно не за компом.
Где-то выше был вариант для конфига conky. Не придумал как адаптировать.
Попробовал прикрутить проверку что-то вроде: ifconfig | grep "ppp0". Если есть такая строка, то все, что приготовлено для фестиваля озвучивается, иначе сообщает, что "не судьба"...
Но работать не захотело. Когда комп скачивает торренты и канал забит, то всегда стало "не судьба". Хотя вроде-бы и не должно так выходить...

По правде говоря, когда торренты скачиваются, фестиваль "тормозит" на ежечасном сообщении минут эдак на 18-20 (для сравнения: на свободном канале сообщение формируется за 15 секунд). Wget не может всю информацию скачать в файл, и "сдается" где-то через это время. Сейчас буду настраивать wondershaper на 80 порт, чтобы от этого избавиться, но проверку на интернет-соединение тоже хочется прикрутить в озвучивание фестивалем...

Оффлайн Saltty

  • Активист
  • *
  • Сообщений: 362
  • Соль (Ubuntu 14.04)
    • Просмотр профиля
    • Мой сайт
Если еще актуально, мне кажется, нужно сделать так:
CURR_TEMP="`wget -q -O - http://www.gismeteo.ru/city/daily/ГОРОД/ | grep -m 1 '<div class="temp">' | sed -r 's/[ \t]<div class="temp">(.*[0-9]+).*/\1/g'`"или так:
CURR_TEMP="`wget -q -O - http://www.gismeteo.ru/city/daily/ГОРОД/ | grep -m 1 '<div class="temp">' | sed 's/[ \t]<div class="temp">//g;s/&deg;C<\/div>//g'`"

Спасибо, тоже буду тестировать ;)

Оффлайн Saltty

  • Активист
  • *
  • Сообщений: 362
  • Соль (Ubuntu 14.04)
    • Просмотр профиля
    • Мой сайт
Похоже, вчера gismeteo.ru изменили код страницы, надо теперь всё переписывать т.к. скрипт перестал распознавать новшества на сайте ;)

Оффлайн kh-al

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Похоже, вчера gismeteo.ru изменили код страницы, надо теперь всё переписывать т.к. скрипт перестал распознавать новшества на сайте ;)
Днем 16-го изменили. На 21:00 у меня строка температуры выдала
<div class="temp">&minus;9<span class="meas">&deg;C</span></div>
Надо теперь придумывать как обрабатывать sed`ом...  :(

Оффлайн Alligatоr

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Небольшая доработка скрипта озвучки обрыва ppp0.
Кроме сообщения об обрыве он пытается восстановить и сообщает получилось или нет.

#!/bin/bash
export LANG=ru_RU.UTF-8 # Хоть и не нужно, но решил оставить

ppp_check (){

# Проверка соединения по PID-файлу.
# Потом PID может понадобиться, а разницы какой файл проверять нет.
# Убиваем, так сказать, двух зайцев
PID_FILE="/var/run/pppoe.conf-pppoe.pid.pppoe"

if [ ! -e $PID_FILE ];
then
    echo "связь потеряна" | festival --tts --language russian
    echo "попытка востанавления" | festival --tts --language russian

    # так у меня
    # /etc/rc.d/ppp_con start > /dev/null 2>&1

    # а в debian-подобных вроде так
    # /etc/init.rc/pppoe-start > /dev/null 2>&1

    if [ -e $PID_FILE ];
    then
        echo "связь восстановлена" | festival --tts --language russian
    else
        echo "немогу востанавить. нужна ъ твоя помощь" | festival --tts --language russian
    fi
fi

}

# Ну тут и без слов всё понятно, думаю объяснять не нужно :)
while [ 1 ];
do
    ppp_check
    sleep 5
done
exit 0

Скрипт можно положить в автозагрузку, но не нужно забывать, что для подключения нужны права суперпользователя.

Пользователь решил продолжить мысль 21 Февраля 2012, 18:49:26:
Цитировать
Надо теперь придумывать как обрабатывать sed`ом

#!/bin/bash

CITY="4517"

URL="http://www.gismeteo.ru/city/daily/$CITY/"
TMP_FILE="/tmp/tmp_curl_city_$CITY"

CURL=`curl $URL > $TMP_FILE`
TEG=`cat $TMP_FILE | grep -Po '<div.*\ class=\"temp\">.+<span\ class=\"meas\">.*<\/span><\/div>' | grep -Po '\&.+\d{1,2}'`

TEMP_SIGN=`echo $TEG | grep -Po '&minus;'`

TEMP=`echo $TEG | grep -Po '[0-9]{1,2}'`

if [ "$TEMP_SIGN" == "&minus;" ];
then
    echo "-$TEMP"
else
    echo $TEMP
fi


# Проверяем погодные условия

WEATH="`cat $TMP_FILE | grep -m 1 '<dd>' | sed 's/[ \t]*//;s/<[^>]*>//g'`"

echo $WEATH

exit 0


Изменения не большие, просто переделал как мне удобней и немного подправил.
Возможно есть глупые ошибки, писал почти не думая.
В скрипте можно просто поменять эту строчку:

if [ "`echo $CURR_TEMP | sed -r 's/(.)[0-9]+/\1/g'`" == "-" ]; then TEMP_SIGN="минус"
на

if [ "`echo $CURR_TEMP | grep -Po '\&minus;'`" == "&minus;" ]; then TEMP_SIGN="минус"
и всё будет работать.
« Последнее редактирование: 21 Февраля 2012, 20:10:04 от Alligatоr »

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

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Блин, Gismeteo опять все сломало. >:(

Код определения города, где мы находимся, чтобы не нужно было указывать явно, если кому надо:
#!/bin/bash

CITY=`wget -q -O - 2ip.ru | grep -P geoip | sed 's/<[^>]*>//g' | awk '{print $3}'`
echo $CITY

CITY_ID=`wget -q -O - http://bar.gismeteo.ru/gmbartlist.xml | iconv -f cp1251 -t utf8 | grep $CITY | awk '{print $3}' | sed 's/[i="]//g'`
echo $CITY_ID

URL=`echo http://www.gismeteo.ru/ztowns/$CITY_ID.htm` #CITY_ID - не тот, к которому привыкли, но перенаправляет, куда надо. Информер: http://informer.gismeteo.ru/xml/$CITY_ID_1.xml

CURR_TEMP=`wget -q -O - $URL | grep -m 1 'value m_temp c' | sed 's/<[^>]*>/ /g' | awk '{print $1}'`
echo $CURR_TEMP
« Последнее редактирование: 02 Марта 2012, 22:05:41 от -grin- »

Оффлайн Saltty

  • Активист
  • *
  • Сообщений: 362
  • Соль (Ubuntu 14.04)
    • Просмотр профиля
    • Мой сайт
Я переключился пока на доработку и подгонку скриптов с этого сайта. Может что путное получится.

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

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Давно хотел найти способ из консоли активировать в ритмбоксе динамический плейлист "Любимые композиции" (или любой другой).

Выводим список к примеру первых 10 плейлистов:
qdbus --literal org.mpris.MediaPlayer2.rhythmbox /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Playlists.GetPlaylists 0 10 0 0
Активируем нужный, примерно так:
qdbus org.mpris.MediaPlayer2.rhythmbox /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Playlists.ActivatePlaylist /org/gnome/Rhythmbox3/Playlist/0x8243508
В ритмбоксе должен быть включен интерфейс D-Bus.

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

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Проблемка в том, что после перезапуска ритмбокса плейлисты получают новые адреса.
Сделал так:
playlist="`qdbus --literal org.mpris.MediaPlayer2.rhythmbox /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Playlists.GetPlaylists 1 1 0 0 | sed -e :a -e 's/\][^>]*\]//g;s/\[[^>]*\[ObjectPath: //g'`" #Ищем динамический плейлист "Любимые композиции"
qdbus org.mpris.MediaPlayer2.rhythmbox /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Playlists.ActivatePlaylist $playlist

Оффлайн IP-2011

  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Ну собственно тут упоминали о rhvoice....
Выкладываю не большое хау-ту по установки.
Проверено на бубунте 10.10
На более поздних думаю ничем не отличаеться.
Если кому ещё надо....
1. Качаем исходники с официального сайта
wget -O rhvoice-0.2.tar.gz https://github.com/Olga-Yakovleva/RHVoice/tarball/0.2
2. Распаковываем.
tar xf rhvoice-0.2.tar.gz
3. Устанавливаем необходимый софт для работы.
sudo apt-get install scons gcc flite1-dev libunistring-dev
4. Переходим в распакованые исходники.
cd Olga-Yakovleva-RHVoice-302e762/
5. Проверяем всё скунсом.
scons
6. Если нет ошибок! Важно! Ставим.
sudo scons install
7. Проверяем установку.
echo привет всем | RHVoice | aplay -q -
или так
echo Привет | RHVoice | aplay
Он должон заговорить.... :)
Ну собсно всё....
Ставьте пробуйте....

Оффлайн IP-2011

  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Привет Всем!
Помогите плиз с скриптом...

#!/bin/bash
var4=`date +%H`
var_priv=""
if [[ "$var4" -ge 00 && "$var4" -le 05 ]]; then
var_priv="Доброй ночи"
elif [[ "$var4" -ge 06 && "$var4" -le 11 ]]; then
var_priv="Доброе утро"
elif [[ "$var4" -ge 12 && "$var4" -le 17 ]]; then
var_priv="Добрый день"
elif [[ "$var4" -ge 18 && "$var4" -le 23 ]]; then
var_priv="Добрый вечер"
fi
echo "$var_priv, мой друг!"
exit 0

По непонятной мне причине не отрабатывает значение 08, и 09 часов.
Вот такая трабла выходит
./test: строка 4: [[: 08: значение слишком велико для основания (error token is "08")
./test: строка 6: [[: 08: значение слишком велико для основания (error token is "08")
./test: строка 8: [[: 08: значение слишком велико для основания (error token is "08")
./test: строка 10: [[: 08: значение слишком велико для основания (error token is "08")
При 09 такая же трабла.
Остальные значения нормально отрабатывает.
И 07, 10 и т.д.
Подскажите в чём дело???

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

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Это походу какой-то глюк в самом bash. Он значения "08" и "09" определяет не как число, а как строку (наверно).
$ declare -i var4
$ var4=08
bash: 08: значение слишком велико для основания (ошибочная метка "08")
Попробуй:
var4=`date +%k`

 

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