package jbp12; 
import javazoom.jl.player.Player;
import javazoom.jl.player.Player;
import javazoom.jl.player.AudioDevice;
import javazoom.jl.decoder.JavaLayerException;
import java.io.InputStream;

/**
* lecteur de fichier MPEG-3 qui utilise la biblioth&eagrave; JLayer1;0
*/
public class MyPlayer extends Player{
/**
* dit si le le lecteur est en train de jouer  
*/
  boolean playing;
/**
* construit un lecteur
* @param stream de type java.io.InputStream
* @param device de type javazoom.jl.player.AudioDevice
*/
  public MyPlayer(InputStream stream, AudioDevice device) throws JavaLayerException {
    super(stream,device);
    playing=true;
  }
/**
* construit un lecteur
* @param stream de type java.io.InputStream
*/
  public MyPlayer(InputStream stream)throws JavaLayerException {
    this(stream,null);
  } 
/**
* dit si le lecteur est en train de jouer
* @return true si le lecteur est en train de jouer false sinon
**/
  public boolean isPlaying(){
    return playing;
  }
/**
* joue un certain nombre de trames  MPEG-3
* @param frames de type int nombre de trames &agrave; jouer
* @return false lorsque la derni&egrave;re trame a &eacute;t&eacute; jou&eacute;e
*/
  public boolean play(int frames) throws JavaLayerException {
    boolean ret = true;
    while (frames-- > 0 && ret) {
      if( this.playing ) {
        ret = decodeFrame();			
      }
      else {
        try {
          Thread.sleep( 100 );
        }
        catch( Exception e ) {
        }
      }
    }
   if (!ret) {
                        // last frame, ensure all data flushed to the audio device. 
     AudioDevice out = audio;
     if (out!=null) {
        out.flush();
        synchronized (this) {
           complete = (!closed);
           close();
        }
     }
   }
   return ret;
  }
/**
* interrrompt la lecture
*/
  public void pause(){
    this.playing=false;
  }
/** 
* reprend la lecture
*/
  public void resume(){
    this.playing=true;
  }
/**
* joue le fichier MPEG-3
*/
  public void play() throws JavaLayerException {
    play(Integer.MAX_VALUE);
  }
}
