Belangrijkste functionaliteit Winamp geimplementeerd.

This commit is contained in:
2011-03-18 15:20:41 +00:00
parent 553f771899
commit 72aa56e5a1
2 changed files with 86 additions and 12 deletions

View File

@@ -1,7 +1,6 @@
package pm.application.windows.winamp; package pm.application.windows.winamp;
import pm.application.cmd.windows.WindowsApplication; import pm.application.cmd.windows.WindowsApplication;
import pm.util.Windows;
import pm.value.Action; import pm.value.Action;
public class WinampApplication extends WindowsApplication { public class WinampApplication extends WindowsApplication {
@@ -9,38 +8,113 @@ public class WinampApplication extends WindowsApplication {
protected final static String TITLE = "Winamp"; protected final static String TITLE = "Winamp";
protected final static String NAME = "Winamp v1.x"; 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() { public WinampApplication() {
super(PROGRAM, TITLE, NAME); super(PROGRAM, TITLE, NAME);
volume = getVolume();
muted = volume == 0;
} }
public void action(Action action) { public void action(Action action) {
System.out.println("WinampApplication: " + action); System.out.println("WinampApplication: " + action);
switch (action) { switch (action) {
case PLAY: 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; break;
case FORWARD: case FORWARD:
command(0x8009); command(WINAMP_FFWD5S);
break; break;
case REWIND: case REWIND:
command(0x8008); command(WINAMP_REW5S);
break; break;
case MUTE: case MUTE:
command(0x8016); System.out.println(getDuration() +" "+ getElapsed());
if (muted) {
setVolume(volume);
} else {
volume = getVolume();
setVolume(0);
}
muted = !muted;
break; break;
case VOLUME_UP: case VOLUME_UP:
command(0x8014); System.out.println(getVolume());
command(WINAMP_VOLUMEUP);
break; break;
case VOLUME_DOWN: 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; break;
} }
} }
protected boolean playing() { public double getVolume() {
int status = Windows.sendMessage(handle, Windows.WM_USER, 0, 104); return user(-666, IPC_SETVOLUME) / 255f;
return status == 1; }
// 1='playing', 3='paused' or 0='stopped'
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;
} }
} }

View File

@@ -16,5 +16,5 @@ public enum Action {
VOLUME_DOWN, VOLUME_DOWN,
VOLUME_UP, VOLUME_UP,
FULLSCREEN, FULLSCREEN,
TRAIN, STOP, SAVE, RECOGNIZE, LOAD, SHUFFLE; TRAIN, STOP, SAVE, RECOGNIZE, LOAD, SHUFFLE, FADEOUT, QUIT, VISUALISER;
} }