package jbp12;
import java.io.InputStream;
import java.io.FileInputStream;
/**
* morceau que l'on peut jouer en utilisant la biblioth&egrave;que JLayer1.0
*/

public class Morceau extends MorceauS implements Runnable,Comparable<MorceauS>{
/**
* permet de jouer le morceau en utilisant JLayer1.0
*/
  private MyPlayer player;
/**
* canal reli&eacute; au fichier MPEG-3 contenant le morceau
**/
  private InputStream is;
/**
* thread pour le jeu du morceau
**/
  private Thread thread; 
/**
* lorsque continu vaut true le morceau est jou&eacute; en continu, lorsqu'il vaut false,
* le morceau est jou&eacute; une seule fois
**/
  private boolean continu; 
/**
* constructeur complet qui construit le thread pour le jeu du morceau
* @param t de type String initialise le titre du morceau
* @param f de type String chemin d'acc&egrave;s et nom du fichier MPEG-3
* @param b de type {@link  jbp12.GroupeMusiciens} 
* @param a de type  String initialise l'ann&eacute;e de cr&eacute;ation du morceau, la cha&icirc;ne
* ne doit contenir que des chiffres
* @param g de type byte doit &eacirc;tre initialis&eacute; avec une des constantes
* {@link  jbp12.MorceauS#INCONNU}, {@link  jbp12.MorceauS#REGGAE}, {@link  jbp12.MorceauS#REGGAE},
* {@link  jbp12.MorceauS#PUNK}, {@link  jbp12.MorceauS#RAP}
* @param c de type boolean s'il vaut true le morceau est jou&eacute; en continu, s'il vaut false,
* le morceau est jou&eacute; une seule fois
**/ 
  public Morceau(String t, String f, GroupeMusiciens b,String a, byte g,boolean c){
    super(t,f,b,a,g);
    thread=new Thread(this);
    continu=c;
  }
/**
* constructeur par d&eacute;faut qui initialise les cha&icirc;nes de caract&egrave;res avec la
* cha&icirc;ne vide, le genre &agrave; {@link  jbp12.MorceauS#INCONNU}, le groupe
* &agrave; null et  construit le thread pour le jeu du morceau.
**/
  public Morceau(){
    this("","",null,"",INCONNU,true);
  }
/**
* constructeur qui initialise le titre et le fichier du morceau et construit
* le thread. Le morceau est jou&eacute; en continu. Les autres cha&icirc;nes de caract&egrave;res
* sont initialis&eacute;es avec la cha&icirc;ne vide, le genre &agrave; 
*{@link  jbp12.MorceauS#INCONNU}, le groupe &agrave; null.
* @param t de type String initialise le titre du morceau
* @param f de type String chemin d'acc&egrave;s et nom du fichier MPEG-3
**/

  public Morceau(String t,String f){
    this(t,f,null,"",INCONNU,true);
  }
/**
* constructeur qui initialise le titre et le fichier du morceau, permet de choisir
* si le morceau va &ecirc;tre jou&eacute; en continu ou non et construit
* le thread. Les autres cha&icirc;nes de caract&egrave;res
* sont initialis&eacute;es avec la cha&icirc;ne vide, le genre &agrave; 
*{@link  jbp12.MorceauS#INCONNU}, le groupe &agrave; null.
* @param t de type String initialise le titre du morceau
* @param f de type String chemin d'acc&egrave;s et nom du fichier MPEG-3
* @param c de type boolean s'il vaut true le morceau est jou&eacute; en continu, s'il vaut false,
* le morceau est jou&eacute; une seule fois
**/
  public Morceau(String t,String f,boolean c){
    this(t,f,null,"",INCONNU,c);
  }
/**
* accesseur pour le thread du morceau
* @return le thread pour le jeu du morceau
**/
  public Thread getThread(){
    return thread;
  }
/**
* accesseur pour le player pour le morceau
* @return le player pour le jeu du morceau
**/
  public MyPlayer getPlayer(){
    return player;
  }
/**
* joue le morceau lorsque le thread est d&eacute;marr&eacute; 
**/
  public void run(){
    try {
      if(continu){
        while(true){
          is=new FileInputStream(fichier);
          player=new MyPlayer(is);
          player.play();
        }
      }
      else{
        is=new FileInputStream(fichier);
        player=new MyPlayer(is);
        affiche();
        player.play();
      }
    }
    catch (Exception e){
      e.printStackTrace();
    }
  }
/**
* d&eacute;marre le thread
**/
  public void start(){
    thread.start();
  }
/**
* programme principal qui joue un morceau
**/
  public static void main(String[] args){
    String[] i1=new String[1];
    i1[0]="voix";
    Musicien m1=new Musicien("","Fran",i1);
    String[] i2=new String[2];
    i2[0]="voix";  
    i2[1]="guitare";  
    Musicien m2=new Musicien("","Jimmy",i2);
    GroupeMusiciens girafe=new GroupeMusiciens("Girafe","France");
    girafe.getMusiciens().add(m1);
    girafe.getMusiciens().add(m2);
    Morceau secret=new Morceau("Le terrible secret","../../mp3/05-leterriblesecret.mp3",girafe,"2006",ROCK,false);
    secret.afficheGroupe();
    secret.start();
    try{
      Thread.sleep(16000);
      secret.getPlayer().pause();
      System.out.println("pause");
      Thread.sleep(6000);
      secret.getPlayer().resume();
      System.out.println("resume");
    }
    catch (Exception e){
      e.printStackTrace();
    }
  }
}

