Уменьшение громкости и пауза winamp при бездействии

Обсуждение программ nnCron и nnCron LITE

Уменьшение громкости и пауза winamp при бездействии

Postby Morituruz » Fri, 12 Oct 2012, 15:45

Мне очень понравилась идея уменьшать звук и останавливать воспроизведение во время бездействия пользователя, которую предложил ascerdfg1, поэтому я решил изобрести велосипед сделать свой вариант, который отличается уменьшением звука в самом winamp, а не в системе.

Логика:
Каждую минуту проверяется, не бездействует ли пользователь 60 секунд (меняйте на свой вкус)
Каждую секунду после обнаружения бездействия пользователя звук уменьшается на единицу от того значения, которое было изначально (предполагается, что в winamp десятичное уменьшение звука).
Если докрутили до 0, winamp ставится на паузу.
Если пользователь вернулся, то возвращается исходный уровень громкости, и, если winamp на паузе, снимается с паузы.

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

Code: Select all
<%
\ разрешение экрана
: xRes
GetDesktopSize DROP
;
: yRes
GetDesktopSize SWAP DROP
;
: winamp_pause
WIN-EXIST: "Winamp v1.x"
IF
   40046 0 273 WIN-HWND SendMessageA DROP
THEN
;
%>
#( reduce_winamp_volume_when_user_went_away
\ 16:13 12.10.2012
HyperActive
SingleInstance
Rule: S" Winamp v1.x" WIN-EXIST? ;

: winamp_playing? ( -- a )
\ winamp находится врежиме воспроизведения?
WIN-EXIST: "Winamp v1.x"
IF 104 0 1024 WIN-HWND SendMessageA
   1 =
THEN
;
: get_winamp_volume ( --  a)
\ оставляет на стеке величину громкости в winamp (0-255)
WIN-EXIST: "Winamp v1.x"
IF 122 -666 1024 WIN-HWND SendMessageA THEN
;
: set_winamp_volume ( a -- )
\ установить такую-то (0-255) громкость
WIN-EXIST: "Winamp v1.x"
IF 122 1 ROLL 1024 WIN-HWND SendMessageA DROP THEN
;
Action:
winamp_playing? NOT
IF
   \ если winamp не играет музыку, выходим
   EXIT
ELSE
   \ если мышка примерно (для пропорции 16:9) в левом нижнем углу, выходим
   xRes 50 /
   yRes DUP 28 / -
   MOUSE-POS 2 ROLL > SWAP 2 ROLL < AND
   IF EXIT THEN
THEN
60 IDLE \ бездействие в течении 60 секунд
IF      \ пользователь впал в спячку
   get_winamp_volume DUP \ кладём на стек текущее значение звука в винампе
   BEGIN
      5 IDLE
      IF \ пользователя всё ещё нет
         winamp_playing?
         IF
            1 - DUP 0 >
               IF
                  DUP set_winamp_volume
               ELSE
                  DROP
                  \ дальше снижать звук уже некуда, пора жать паузу:
                  winamp_pause
               THEN
         THEN
      ELSE \ пользователь очнулся
         winamp_playing?
         IF
            \ сбрасываем скрученное значение громкости, устанавливаем то,
            \ которое было изначально:
            DROP set_winamp_volume
         ELSE
            \ снимаем с паузы:
            winamp_pause
            set_winamp_volume
         THEN
         \ для выхода из цикла:
         TRUE
      THEN
      1000 PAUSE
      \ выходим, когда на стеке появляется правда:
      DUP 0 <
   UNTIL
   DROP
THEN
)#
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 4 guests

cron