package com.quiltplayer.core.player.simpleplayer;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.Map;
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;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.quiltplayer.controller.PlayerController;
import com.quiltplayer.controller.PlayerListener;
import com.quiltplayer.core.player.Player;
import com.quiltplayer.model.Song;
/**
* The Player implementation using BasicPlayer.
*
* @author Vlado Palczynski
*/
@Component
public class BasicPlayerPlayer implements BasicPlayerListener, Player {
private Song currentSong;
/**
* The logger.
*/
private static Logger log = Logger.getLogger(BasicPlayerPlayer.class);
/**
* The basic controller.
*/
private BasicController controller;
/**
* The player.
*/
private BasicPlayer player = null;
@Autowired
private PlayerListener playerListener;
/**
* The time.
*/
private long time;
/**
* Constructor.
*/
public BasicPlayerPlayer() {
player = new BasicPlayer();
player.addBasicPlayerListener(this);
controller = (BasicController) player;
this.setController(controller);
}
public void play(final Song song) {
log.debug("Playing...");
currentSong = song;
try {
if (player.getStatus() == BasicPlayer.STOPPED || player.getStatus() == BasicPlayer.UNKNOWN) {
{
File f = new File(song.getPath());
controller.open(f);
controller.play();
}
}
else if (player.getStatus() == BasicPlayer.PLAYING) {
log.debug("Player status is playing, stopping...");
controller.stop();
play(song);
}
else if (player.getStatus() == BasicPlayer.PAUSED) {
log.debug("Player status is paused, resuming...");
controller.resume();
}
}
catch (BasicPlayerException ex) {
log.error(ex.getMessage());
}
}
public void stop() {
log.debug("Stopping the player...");
if (player.getStatus() == BasicPlayer.PAUSED || player.getStatus() == BasicPlayer.PLAYING) {
try {
controller.stop();
}
catch (BasicPlayerException ex) {
log.error(ex.getMessage());
}
}
}
/*
* @see org.quiltplayer.core.player.Player#pause()
*/
@Override
public void pause() {
log.debug("Pausing the player...");
try {
if (player.getStatus() == BasicPlayer.PLAYING) {
controller.pause();
}
}
catch (BasicPlayerException ex) {
log.error(ex.getMessage());
}
}
/*
* @see org.quiltplayer.core.player.Player#getElapsedTime()
*/
@Override
public long getElapsedTime() {
return time;
}
public Song getCurrentSong() {
return currentSong;
}
/*
* @see javazoom.jlgui.basicplayer.BasicPlayerListener#opened(java.lang.Object, java.util.Map)
*/
@SuppressWarnings("unchecked")
@Override
public void opened(Object arg0, Map arg1) {
}
/*
* (non-Javadoc)
*
* @see javazoom.jlgui.basicplayer.BasicPlayerListener#progress(int, long, byte[],
* java.util.Map)
*/
@SuppressWarnings("unchecked")
@Override
public void progress(final int arg0, final long milliseconds, final byte[] arg2, Map arg3) {
time = milliseconds;
//System.out.println("Milli: " + milliseconds);
//System.out.println("Arg:" + arg0);
playerListener.actionPerformed(new ActionEvent(currentSong, 0, PlayerController.PlayerEvents.PROGRESSED
.toString()));
}
/*
* @see javazoom.jlgui.basicplayer.BasicPlayerListener#setController(javazoom
* .jlgui.basicplayer.BasicController)
*/
@Override
public void setController(final BasicController arg0) {
}
/*
* (non-Javadoc)
*
* @see javazoom.jlgui.basicplayer.BasicPlayerListener#stateUpdated(javazoom.
* jlgui.basicplayer.BasicPlayerEvent)Volume
*/
public void stateUpdated(final BasicPlayerEvent arg0) {
if (arg0.getCode() == BasicPlayerEvent.EOM) {
log.debug("Event: OEM, jumping to next song...");
playerListener.actionPerformed(new ActionEvent(currentSong, 0, PlayerController.PlayEvents.FINISH
.toString()));
}
else if (arg0.getCode() == BasicPlayerEvent.SEEKING) {
System.out.println("!");
}
else if (arg0.getCode() == BasicPlayerEvent.SEEKED)
System.out.println("!! ");
}
/*
* (non-Javadoc)
*
* @see com.quiltplayer.core.player.Player#removeCurrentSong()
*/
@Override
public void removeCurrentSong() {
// TODO Auto-generated method stub
}
@Override
public void seek(int i) {
System.out.println(i);
try {
// player.seek(((Integer) i).longValue());
controller.seek(((Integer) i).longValue());
}
catch (BasicPlayerException e) {
e.printStackTrace();
}
}
}