Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 28 мар 2024, 14:58

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: 06 июн 2010, 22:53 
Не в сети
Зарегистрирован:
01 июн 2010, 03:10
Последнее посещение:
08 авг 2011, 01:24
Сообщения: 386
Дело было вечером, делать было нечего...

В общем сейчас вот сидел делал граббер инфы из audacious2(многие пользуются этим проигрывателем под UNIX-системами).
А зачем это нужно? Ну как... вот вы же спамите в IRC, в ICQ, в DC что вы слушаете... вот и я решил поспамить чуток а код выложу :)

Вот примерный код просто для выведения инфы в консоли(да я не мог сделать тупее):
Код:
TMPSCRIPT=`tempfile`;audtool2 current-song current-song-output-length current-song-length current-song-filename | sed ':a;N;$!ba;s/\n/<E0L>/g' | awk -F'<E0L>' '{print "AUD_PID=`pidof audacious2`;AUD_SONG=\""$1"\";AUD_PLAYED="$2";AUD_TOTAL="$3";AUD_NAME=\""$4"\";AUD_BASENAME=`basename \""$4"\"`"}' > $TMPSCRIPT;source $TMPSCRIPT;printf '(audacious2:%s): Playing %s (%s/%s) [file %s]\n' $AUD_PID "$AUD_SONG" $AUD_PLAYED $AUD_TOTAL "$AUD_BASENAME"

К примеру:
Код:
$ (этот код)
(audacious2:20736): Playing Orbital - Nothing Left 1 (5:01/7:49) [file 06 - Nothing Left 1.flac]


Теперь улучшим это и пристроим для bind на кнопку в халфе:
Код:
OF=/tmp/hlmusic.cfg;TMPSCRIPT=`tempfile`;audtool2 current-song current-song-output-length current-song-length current-song-filename playback-status | sed ':a;N;$!ba;s/\n/<E0L>/g' | awk -F'<E0L>' '{print "AUD_PID=`pidof audacious2`;AUD_SONG=\""$1"\";AUD_PLAYED="$2";AUD_TOTAL="$3";AUD_NAME=\""$4"\";AUD_BASENAME=`basename \""$4"\"`;AUD_STATUS=\""$5"\""}' > $TMPSCRIPT;source $TMPSCRIPT;printf 'say (audacious2:%s): %s "%s" (%s/%s) [file %s]\n' $AUD_PID "$AUD_STATUS" "$AUD_SONG" $AUD_PLAYED $AUD_TOTAL "$AUD_BASENAME" > $OF

Пример:
Код:
$ (этот код);cat $OF
say (audacious2:20736): playing "Orbital - Nothing Left 2" (2:34/8:20) [file 07 - Nothing Left 2.flac]


Неплохо? Доведем дело до конца, приделаем loop и запишем в отдельный скриптик, а заодно будем чистить за собой :)
Полный код во вложении.
Чтобы заюзать, забиндите на какую-нибудь кнопку "exec hlmusic.cfg", где hlmusic.cfg - имя выходного файла, передаваемого параметром в hlmusic.sh.
Пример:
Код:
./hlmusic.sh ~/hl/cstrike/hlmusic.cfg

В принципе код полностью готов, ему, пожалуй, не хватает лишь одной вещи для минимизации нагрузки на систему: inotify(это уже специфично только для linux). Сейчас запрос идет каждую секунду, а в идеале надо бы сгенерить первый раз сразу, а потом при каждом следующем обращении к файлу генерировать новые данные для следующего раза. Вы ведь нечасто будете нажимать кнопку :) Но пока только такой вариант.

ВНИМАНИЕ: Код распространяется под BSD лицензией!!! Используя данное ПО вы соглашаетесь с условиями данной лицензии. Вкратце ее суть сводится к тому, что вы имеете право на распространение и изменение ПО, пока вы сохраняете реквизиты разработчика в коде на прежнем месте, а разработчик не несет никакой ответственности, вы используете данное ПО на свой страх и риск, без каких-либо гарантий чего-либо, никакие претензии в случае возможного ущерба не принимаются.


Вложения:
Комментарий к файлу: готовый скрипт
hlmusic.sh.bz2 [1.72 КБ]
Скачиваний: 190


Последний раз редактировалось /dev/null 07 июн 2010, 16:41, всего редактировалось 1 раз.
Вернуться к началу
 Профиль 
  
СообщениеДобавлено: 07 июн 2010, 00:55 
Не в сети
Зарегистрирован:
01 июн 2010, 03:10
Последнее посещение:
08 авг 2011, 01:24
Сообщения: 386
Тестирование в боевых условиях говорит о том что такой метод сильно нагружает систему, впрочем это неудивительно это же шелл-скрипт. Наиболее удобным вариантом будет попытка переписать это на python или PHP.


Вернуться к началу
 Профиль 
  
СообщениеДобавлено: 07 июн 2010, 09:19 
Не в сети
Зарегистрирован:
01 июн 2010, 03:10
Последнее посещение:
08 авг 2011, 01:24
Сообщения: 386
Нет, если подумать это единственный возможный вариант псевдокода.
Все равно нужно как минимум каждую секунду статус получать а это в шелле несколько лишних запусков процессов. Минимизировать нагрузку можно двумя способами: использовать audtool2 внутри некого скрипта на ЯП вроде Perl или Python или PHP, или же вообще переписать часть audtool2 фич на Python, что существенно сэкономит ресурсы, позволив вообще не обращаться к шеллу. Правда врядли я стану этим заниматься :)


Вернуться к началу
 Профиль 
  
СообщениеДобавлено: 04 янв 2011, 10:53 
Не в сети
Зарегистрирован:
26 окт 2010, 21:23
Последнее посещение:
26 авг 2013, 11:47
Сообщения: 113
Nobody Cares, на этом форуме) Кстати, адаптирую под moc с новым компом.


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB