package io.github.jordandoyle.mcinject.helpers;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.advanced.AdvancedPlayer;
import javazoom.jl.player.advanced.PlaybackEvent;
import javazoom.jl.player.advanced.PlaybackListener;
import javazoom.jlgui.basicplayer.BasicController;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerEvent;
import javazoom.jlgui.basicplayer.BasicPlayerException;
import javazoom.jlgui.basicplayer.BasicPlayerListener;
public class Player implements BasicPlayerListener {
private BasicPlayer player;
public boolean songFinished = false;
private boolean shouldStop = false, shouldStart = false;
private double gain = 0.5;
private long progress;
public Player(BasicPlayer player) {
this.player = player;
this.player.addBasicPlayerListener(this);
}
public void play() {
try {
player.play();
player.setGain(0.5);
shouldStart = true;
} catch (BasicPlayerException e) {
e.printStackTrace();
}
}
public void stop() {
try {
player.stop();
} catch (BasicPlayerException e) {
e.printStackTrace();
}
}
public void changeGain(double g) {
try {
player.setGain((double) g / 100D);
this.gain = g / 100;
} catch (BasicPlayerException e) {
e.printStackTrace();
}
}
public double getGain() {
return gain;
}
public String getProgress() {
return String.format(
"%d:%02d",
TimeUnit.MICROSECONDS.toMinutes(progress),
TimeUnit.MICROSECONDS.toSeconds(progress)
- TimeUnit.MINUTES.toSeconds(TimeUnit.MICROSECONDS
.toMinutes(progress)));
}
@Override
public void opened(Object stream, Map properties) {
}
@Override
public void progress(int bytesread, long microseconds, byte[] pcmdata,
Map properties) {
progress = microseconds;
}
@Override
public void stateUpdated(BasicPlayerEvent event) {
if (event.getCode() == BasicPlayerEvent.STOPPED)
songFinished = true;
}
@Override
public void setController(BasicController controller) {
}
}