package org.lysty.players; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; import javazoom.jl.decoder.JavaLayerException; import javazoom.jl.player.advanced.AdvancedPlayer; import javazoom.jl.player.advanced.PlaybackEvent; import javazoom.jl.player.advanced.PlaybackListener; import org.apache.log4j.Logger; import org.lysty.dao.Song; import org.lysty.ui.exception.SongPlayException; public class Mp3Player extends AbstractPlayer { private static Logger logger = Logger.getLogger(Mp3Player.class); private AdvancedPlayer player; private boolean forceStopped; private boolean forcePaused; @Override public List<String> getSupportedFormats() { // TODO Auto-generated method stub ArrayList<String> list = new ArrayList<String>(); list.add("mp3"); list.add("mp4"); return list; } @Override public void play(final Song song, final int playFrom) throws SongPlayException { try { forceStopped = false; forcePaused = false; player = new AdvancedPlayer(new BufferedInputStream( new FileInputStream(song.getFile()))); PlaybackListener listener = new PlaybackListener() { @Override public void playbackStarted(PlaybackEvent arg0) { playbackListener.getNotification(new PlayEvent( PlayEvent.EventType.PLAY_STARTED)); } @Override public void playbackFinished(PlaybackEvent event) { PlayEvent playEvent = new PlayEvent( forceStopped ? PlayEvent.EventType.SONG_STOPPED : forcePaused ? PlayEvent.EventType.SONG_PAUSED : PlayEvent.EventType.SONG_ENDED); playEvent.setFrame(playFrom + (44 * event.getFrame() / 1000)); playbackListener.getNotification(playEvent); } }; player.setPlayBackListener(listener); player.play(playFrom, Integer.MAX_VALUE); } catch (Exception e) { logger.error("Song file not found", e); throw new SongPlayException(); } } @Override public void pause() { forceStopped = false; forcePaused = true; if (player != null) player.stop(); player = null; } @Override public void stop() { try { forceStopped = true; forcePaused = false; if (player != null) player.stop(); player = null; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void changePlayPosition(int newPosition) throws SongPlayException { try { player.play(newPosition); } catch (JavaLayerException e) { logger.error("Error in changing play position", e); throw new SongPlayException(); } } }