121 lines
4.1 KiB
Java
121 lines
4.1 KiB
Java
package pm.application.cmd.windows.winamp;
|
|
|
|
import pm.application.cmd.windows.WindowsApplication;
|
|
import pm.value.Action;
|
|
|
|
public class WinampApplication extends WindowsApplication {
|
|
protected final static String PROGRAM = "winamp.exe";
|
|
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:
|
|
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(WINAMP_FFWD5S);
|
|
break;
|
|
case REWIND:
|
|
command(WINAMP_REW5S);
|
|
break;
|
|
case MUTE:
|
|
System.out.println(getDuration() +" "+ getElapsed());
|
|
if (muted) {
|
|
setVolume(volume);
|
|
} else {
|
|
volume = getVolume();
|
|
setVolume(0);
|
|
}
|
|
muted = !muted;
|
|
break;
|
|
case VOLUME_UP:
|
|
System.out.println(getVolume());
|
|
command(WINAMP_VOLUMEUP);
|
|
break;
|
|
case VOLUME_DOWN:
|
|
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;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|