// main method for testing
  // used before integrating with gui
  public static void main(String[] args) {
    Playlist p1 = new Playlist("timer_test");
    String song = "test";

    p1.addSong("1");
    p1.addSong("2");
    p1.addSong("3");
  }
    public void run() {
      list.load(musicHome.getMusicDirectory().getAbsolutePath() + "/" + list.getName());
      // add all songs in Playlist to queue, refresh, and play
      for (int i = 0; i < list.getSize(); i++) {
        list.setPosition(i);
        songQueue.add(new File(list.getCurrentSong()));
      }
      musicHome.refreshQueue();
      musicPlayer.setSong(songQueue.remove(0));
      musicHome.refreshQueue();
      if (!musicPlayer.isPlaying()) {
        musicPlayer.play(-1);
      }

      t.cancel();
    }
 public static void next() throws Exception {
   if (REPEATMEDIA == ACTIVE) {
     REPEATMEDIA = UNACTIVE;
     GUI.getInstance().repeatTrack.setState(false);
   }
   GUI.getInstance().jTable.setValueAt(" ", CURRENTINDEXMEDIA, 0);
   if (CURRENTINDEXMEDIA == CURRENTPLAYLIST.getNumberOfMedia() - 1) {
     if (REPEATPLAYLIST == ACTIVE) {
       CURRENTINDEXMEDIA = 0;
       play(CURRENTPLAYLIST, CURRENTINDEXMEDIA);
     }
   } else {
     CURRENTINDEXMEDIA++;
     play(CURRENTPLAYLIST, CURRENTINDEXMEDIA);
   }
 }
 // schedule list to be played at time
 ScheduledPlay(Date time, Playlist list, MusicHome mh) {
   t = new Timer();
   isPlaylist = true;
   t.schedule(new scheduledPlaylist(list, mh), time);
   System.out.println("Playlist \"" + list.getName() + "\" scheduled for: " + time);
 }
  public static void play(Playlist playlist, int indexofmedia) throws Exception {
    // la valeur x est utilis�e pour le positionnement du JScroolPane de la
    // JTable
    // la valeur qu'elle cotient � �t� choisit par des experiences que nous
    // avons r�alis�s
    instance.setsStates(SunoneStates.IN_PLAY);
    int x = (4 * 414) / 23;
    // recup�ration du chemin d'une musique dans la playlist
    // la m�thode open file est d�finie dans la classe FileEdited permet juste
    // de lire et renvoyer le chemin d'un fichier
    BufferedReader br = FileEdited.openFile(playlist.getName(), indexofmedia);
    String s = br.readLine();
    br.close();
    CURRENTMEDIA = s;

    do { // debut la grande boucle qui boucle jusqu'� la fin du fin de la playlist
      // et r�p�te eventuellement lorsque Repeter la playlist(REPEATPLAYLIST) est
      // activ�e
      while (s != null) { // boucle de lecture jusqu'� la fin du fichier afin de reinitialiser
        // les param�tres pour la lecture avant de tester repeatPlaylist.

        if (s != null) // debut du trraitement pour chaque fichier multimedia
        // dont le chemin a �t� lu dans la playlist.
        {
          // localisation du m�dia gr�ce � la classe Medialocator de JMF
          // cette methode permet d'encapsuler le media elle permet nous permet
          // donc
          // de faire abstraction du format du fichier utili� ( qu'il soit
          // mp3,mpg, avi ou autres)
          MediaLocator mediaLocator = new MediaLocator((new File(s).toURL()).toString());
          do { // debut de la boucle dont la condition de sortit est que repeter
            // musique
            // ne soit pas activ�.si REPEATMEDIA est activ� il repete la m�me
            // musique.
            try {

              // creation du player. c'est sur lui que le traitement se fait
              // on utilise la classe Manager qui est le gestionnaire permettant
              // return
              // un player (qui est en fait une thread) et c'est sur elle que
              // les op�rations de lecture se feront.
              player = Manager.createPlayer(mediaLocator);

              // ajout du listener qui permet d'�couter les differents phases
              // par lesquels passent
              // le player: de la realisation au debut de la lecture comme nous
              // le verons dans son code
              player.addControllerListener(
                  new ControllerAdapter() {
                    double dureeTotale = 0;

                    // permet d'�couter la fin de la r�alisation du media cet �tat
                    // ne peut �tre atteint que lorsque
                    // la m�thode realise() a �t� appel� auparavant.
                    // lorsque la r�alisation se termine par exemple par exemple, on
                    // peut retirer plusieurs
                    // propri�t� du media. Comme la dur�e totale
                    public void realizeComplete(RealizeCompleteEvent re) {
                      // recuperation de la dur�e du media.
                      dureeTotale = player.getDuration().getSeconds();
                      try {
                        if (PLAYSTATUS != NEXTWASPAUSE) {
                          // quelques initialisations des labels centraux de
                          // l'interface graphique
                          // aussi bien celui du nom de l'artiste que celui de la
                          // dur�e totale de la musique
                          GUI.getInstance().jLabel6.setText("00:00/00:00");
                          GUI.getInstance().jLabel.setText(getArtistName(CURRENTMEDIA));
                          GUI.getInstance().jSlider1.setValue(0);
                        }
                      } catch (Exception e) {
                      }
                      GUI.getInstance().jSlider1.setMaximum((int) dureeTotale);
                      player.prefetch();
                    }

                    public void prefetchComplete(PrefetchCompleteEvent pe) {
                      GUI.getInstance().reinitialiseComposantsLecteur();
                      GUI.getInstance().mediaVisuel = player.getVisualComponent();
                      if (GUI.getInstance().mediaVisuel != null)
                        GUI.getInstance()
                            .mediaVisuel
                            .addMouseListener(
                                new MouseListener() {

                                  public void mouseClicked(MouseEvent e) {
                                    if (e.getClickCount() == 2) {
                                      if (fullScrean == 0) {
                                        fullScrean = 1;
                                        GUI.getInstance().fullScrean =
                                            GUI.getInstance().getFullScrean();
                                        Toolkit kit = Toolkit.getDefaultToolkit();
                                        Dimension screen = kit.getScreenSize();
                                        GUI.getInstance().fullScrean.setSize(screen);
                                        GUI.getInstance()
                                            .fullScrean
                                            .add(GUI.getInstance().mediaVisuel);
                                        GUI.getInstance().setVisible(false);
                                        GUI.getInstance().fullScrean.setAlwaysOnTop(true);
                                        GUI.getInstance().fullScrean.setVisible(true);

                                      } else {
                                        fullScrean = 0;
                                        GUI.getInstance()
                                            .videoPanel
                                            .add(
                                                GUI.getInstance().mediaVisuel, BorderLayout.CENTER);
                                        GUI.getInstance().fullScrean.setVisible(false);
                                        GUI.getInstance().setVisible(true);
                                        GUI.getInstance().fullScrean = null;
                                      }
                                    }
                                  }

                                  public void mouseEntered(MouseEvent e) {}

                                  public void mouseExited(MouseEvent e) {}

                                  public void mousePressed(MouseEvent e) {}

                                  public void mouseReleased(MouseEvent e) {}
                                });
                      player.getGainControl().setDB(-70 + GUI.getInstance().jSlider.getValue());
                      if (GUI.getInstance().mediaVisuel != null) {
                        GUI.getInstance()
                            .jContentPane
                            .add(GUI.getInstance().getJPanel4(), BorderLayout.CENTER);
                        GUI.getInstance()
                            .videoPanel
                            .add(GUI.getInstance().mediaVisuel, BorderLayout.CENTER);
                        GUI.getInstance().videoPanel.setVisible(true);
                        GUI.getInstance().videoPanel.setTitle("SunOne");
                        GUI.getInstance().videoPanel.pack();
                        if (GUI.getInstance().fullScrean != null) {
                          GUI.getInstance().fullScrean.add(GUI.getInstance().mediaVisuel);
                          GUI.getInstance().fullScrean.setVisible(true);
                        }
                      }
                      player.start();
                    }
                  });
              player.realize();

              while (player.getState() != Player.Started) {
                Thread.sleep(70);
              }
              String timeTotal = conversion((int) player.getDuration().getSeconds());
              GUI.getInstance().jTable.setValueAt(timeTotal, CURRENTINDEXMEDIA, 2);
              GUI.getInstance().jTable.setValueAt(GUI.fleche, CURRENTINDEXMEDIA, 0);
              if (CURRENTINDEXMEDIA != 0)
                GUI.getInstance().jTable.setValueAt(" ", CURRENTINDEXMEDIA - 1, 0);
              GUI.getInstance()
                  .jScrollPane
                  .getVerticalScrollBar()
                  .setValue(((4 * 414) / 23) * (CURRENTINDEXMEDIA / 4));
              x += x;
              scrollIncrement = 0;
              if (PLAYSTATUS == NEXTWASPAUSE) {
                player.setMediaTime(TIME);
                PLAYSTATUS = -1;
              }
              while (player.getState() == Player.Started) {
                Thread.sleep(1000);
                int i = (int) player.getMediaTime().getSeconds();
                GUI.getInstance().jSlider1.setValue(i);
                GUI.getInstance().jLabel6.setText(conversion(i) + "/" + timeTotal);
              }

            } catch (NoPlayerException noplayeur) {

              noplayeur.printStackTrace();
            } catch (IOException io) {
              io.printStackTrace();
            }
          } while (REPEATMEDIA == ACTIVE);
        }
        CURRENTINDEXMEDIA = CURRENTINDEXMEDIA + 1;
        br = FileEdited.openFile(playlist.getName(), CURRENTINDEXMEDIA);
        s = br.readLine();
        br.close();
        CURRENTMEDIA = s;
      } // fin de while on a atteint la fin du fichier
      // est assez important car il faut reinitialiser les param�tres et tester
      // si repeat eat actif
      // c'est � dire se replacer au debut du fichier.
      br = FileEdited.openFile(playlist.NAME, 0);
      s = br.readLine();
      br.close();
      CURRENTMEDIA = s;
      CURRENTINDEXMEDIA = 0;

    } while (REPEATPLAYLIST == ACTIVE); // fin de la grande boucle qui tete repeat
    // playlist

  }