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;
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;
}
}

View File

@@ -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;
}