Belangrijkste functionaliteit Winamp geimplementeerd.
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user