Дело было вечером, делать было нечего...
В общем сейчас вот сидел делал граббер инфы из 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 лицензией!!! Используя данное ПО вы соглашаетесь с условиями данной лицензии. Вкратце ее суть сводится к тому, что вы имеете право на распространение и изменение ПО, пока вы сохраняете реквизиты разработчика в коде на прежнем месте, а разработчик не несет никакой ответственности, вы используете данное ПО
на свой страх и риск, без каких-либо гарантий чего-либо, никакие претензии в случае возможного ущерба не принимаются.