From 72aa56e5a1f0e66b96117031d0cdf26b594e02e5 Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Fri, 18 Mar 2011 15:20:41 +0000 Subject: [PATCH] Belangrijkste functionaliteit Winamp geimplementeerd. --- .../windows/winamp/WinampApplication.java | 96 ++++++++++++++++--- java/src/pm/value/Action.java | 2 +- 2 files changed, 86 insertions(+), 12 deletions(-) diff --git a/java/src/pm/application/windows/winamp/WinampApplication.java b/java/src/pm/application/windows/winamp/WinampApplication.java index d4ac47f..b8f9b3b 100644 --- a/java/src/pm/application/windows/winamp/WinampApplication.java +++ b/java/src/pm/application/windows/winamp/WinampApplication.java @@ -1,7 +1,6 @@ package pm.application.windows.winamp; import pm.application.cmd.windows.WindowsApplication; -import pm.util.Windows; import pm.value.Action; public class WinampApplication extends WindowsApplication { @@ -9,38 +8,113 @@ public class WinampApplication extends WindowsApplication { protected final static String TITLE = "Winamp"; protected final static String NAME = "Winamp v1.x"; + protected final static int STATUS_PLAYING = 1; + protected final static int STATUS_PAUSED = 3; + protected final static int STATUS_STOPPED = 0; + + protected final static int IPC_ISPLAYING = 104; + protected final static int IPC_GETOUTPUTTIME = 105; + protected final static int IPC_SETVOLUME = 122; + + protected final static int WINAMP_FILE_QUIT = 40001; + protected final static int WINAMP_FILE_REPEAT = 40022; + protected final static int WINAMP_FILE_SHUFFLE = 40023; + protected final static int WINAMP_BUTTON1 = 40044; + protected final static int WINAMP_BUTTON2 = 40045; + protected final static int WINAMP_BUTTON3 = 40046; + protected final static int WINAMP_BUTTON5 = 40048; + protected final static int WINAMP_VOLUMEUP = 40058; + protected final static int WINAMP_VOLUMEDOWN = 40059; + protected final static int WINAMP_FFWD5S = 40060; + protected final static int WINAMP_REW5S = 40061; + protected final static int WINAMP_BUTTON4_SHIFT = 40147; + protected final static int WINAMP_VISPLUGIN = 40192; + + protected double volume; + protected boolean muted; + public WinampApplication() { super(PROGRAM, TITLE, NAME); + volume = getVolume(); + muted = volume == 0; } public void action(Action action) { System.out.println("WinampApplication: " + action); switch (action) { case PLAY: - command(40046); + System.out.println(user(0, IPC_ISPLAYING)); + switch (user(0, IPC_ISPLAYING)) { + case STATUS_STOPPED: + command(WINAMP_BUTTON2); + break; + default: + command(WINAMP_BUTTON3); + break; + } + break; + case NEXT: + command(WINAMP_BUTTON5); + break; + case PREVIOUS: + command(WINAMP_BUTTON1); break; case FORWARD: - command(0x8009); + command(WINAMP_FFWD5S); break; case REWIND: - command(0x8008); + command(WINAMP_REW5S); break; case MUTE: - command(0x8016); + System.out.println(getDuration() +" "+ getElapsed()); + if (muted) { + setVolume(volume); + } else { + volume = getVolume(); + setVolume(0); + } + muted = !muted; break; case VOLUME_UP: - command(0x8014); + System.out.println(getVolume()); + command(WINAMP_VOLUMEUP); break; case VOLUME_DOWN: - command(0x8013); + System.out.println(getVolume()); + command(WINAMP_VOLUMEDOWN); + break; + case SHUFFLE: + command(WINAMP_FILE_SHUFFLE); + break; + case REPEAT: + command(WINAMP_FILE_REPEAT); + break; + case FADEOUT: + command(WINAMP_BUTTON4_SHIFT); + break; + case QUIT: + command(WINAMP_FILE_QUIT); + break; + case VISUALISER: + command(WINAMP_VISPLUGIN); break; } } - protected boolean playing() { - int status = Windows.sendMessage(handle, Windows.WM_USER, 0, 104); - return status == 1; - // 1='playing', 3='paused' or 0='stopped' + public double getVolume() { + return user(-666, IPC_SETVOLUME) / 255f; + } + + public void setVolume(double volume) { + user((int) Math.ceil(volume * 255), IPC_SETVOLUME); + } + + public int getDuration() { + return user(1, IPC_GETOUTPUTTIME); + } + + public int getElapsed() { + return user(0, IPC_GETOUTPUTTIME) / 1000; } } diff --git a/java/src/pm/value/Action.java b/java/src/pm/value/Action.java index 6d08e7e..1bd2fc1 100644 --- a/java/src/pm/value/Action.java +++ b/java/src/pm/value/Action.java @@ -16,5 +16,5 @@ public enum Action { VOLUME_DOWN, VOLUME_UP, FULLSCREEN, - TRAIN, STOP, SAVE, RECOGNIZE, LOAD, SHUFFLE; + TRAIN, STOP, SAVE, RECOGNIZE, LOAD, SHUFFLE, FADEOUT, QUIT, VISUALISER; }