/* * CortAudio v0.2 * */ import javax.swing.* ; import java.awt.event.* ; import javax.swing.event.* ; import java.awt.* ; import javax.media.* ; import java.io.* ; import javax.swing.table.* ; import java.util.* ; public class son extends JFrame implements ControllerListener, ActionListener, MouseListener, ChangeListener, Runnable { /* Creation des variables */ // panel principal JPanel p ; // interface de lecture JButton lire ; JButton pause ; JButton stopper ; JButton suivant ; JButton precedent ; public static JSlider slider ; //menu JMenuBar menu ; JMenu fichier ; JMenuItem ouvrir_fichier ; JMenuItem suppr_fichier ; JMenuItem ouvrir_playlist ; JMenuItem sauver_playlist ; JMenuItem quitter ; JMenu about ; JMenuItem propos ; //tableau JScrollPane scroll_table ; JTable liste ; DefaultTableModel table_modele ; public static JLabel titre ; public static JLabel temps ; //lecteur public static Player player ; //autres String nom_fichier ; Hashtable liste_fichier ; double temps_lecture ; int num_chanson ; public static int maximum_temps ; public static Thread thread_slider ; public static son lecteur ; public static son thread_son ; String zero ; String zero2 ; /* Constructeur, laissé vide */ public void son() { } /* Création de l'interface graphique */ public void graphique() { //instantiation des objets p = new JPanel() ; lire = new JButton (new ImageIcon("img/triangle.png")) ; pause = new JButton (new ImageIcon("img/pause.png")) ; stopper = new JButton (new ImageIcon("img/stop.png")) ; suivant = new JButton (new ImageIcon("img/suivant.png")) ; precedent = new JButton (new ImageIcon("img/precedent.png")) ; slider = new JSlider () ; liste = new JTable () ; liste_fichier = new Hashtable() ; scroll_table = new JScrollPane (liste) ; titre = new JLabel("Pas de lecture") ; temps = new JLabel() ; table_modele = new DefaultTableModel(){ //tableau public boolean isCellEditable(int row, int column) { return false; // override de la méthode pour rendre le tableau non éditable } }; liste.setModel (table_modele) ; menu = new JMenuBar () ; //menu fichier = new JMenu ("Fichier") ; ouvrir_fichier = new JMenuItem ("Ajouter à la playlist") ; suppr_fichier = new JMenuItem ("Supprimer de la playlist") ; ouvrir_playlist = new JMenuItem ("Ouvrir une playlist") ; sauver_playlist = new JMenuItem ("Sauver la playlist") ; quitter = new JMenuItem ("Quitter") ; about = new JMenu ("A propos") ; propos = new JMenuItem ("A propos de CortAudio") ; /* listeners */ ouvrir_fichier.addActionListener(this) ; suppr_fichier.addActionListener(this) ; ouvrir_playlist.addActionListener(this) ; sauver_playlist.addActionListener(this) ; quitter.addActionListener(this) ; propos.addActionListener(this) ; lire.addActionListener(this) ; pause.addActionListener(this) ; stopper.addActionListener(this) ; precedent.addActionListener(this) ; suivant.addActionListener(this) ; liste.addMouseListener (this) ; slider.addChangeListener (this) ; /* colonnes du tableau */ table_modele.addColumn("numéro") ; table_modele.addColumn("Titre") ; table_modele.addColumn("Artiste") ; table_modele.addColumn("Album") ; /* creation du menu */ this.setJMenuBar (menu) ; menu.add (fichier) ; fichier.add(ouvrir_fichier) ; fichier.add(suppr_fichier) ; fichier.addSeparator() ; fichier.add(ouvrir_playlist) ; fichier.add(sauver_playlist) ; fichier.addSeparator() ; fichier.add(quitter) ; menu.add (about) ; about.add(propos) ; /* options & layout */ this.setTitle ("CortAudio") ; Box vertical = Box.createVerticalBox(); Box horizontal = Box.createHorizontalBox(); Box horizontal2 = Box.createHorizontalBox(); horizontal.add (lire) ; horizontal.add (pause) ; horizontal.add (stopper) ; horizontal.add (precedent) ; horizontal.add (suivant) ; horizontal.add (slider) ; horizontal2.add (titre) ; horizontal2.add (temps) ; vertical.add (horizontal2) ; vertical.add (horizontal) ; vertical.add (scroll_table) ; liste.setSelectionMode(0) ; p.setLayout (new BorderLayout()) ; p.add ("Center", vertical) ; this.add(p) ; this.setSize (500, 500) ; this.setVisible(true) ; /* couleur */ p.setBackground (Color.lightGray) ; liste.setGridColor (Color.lightGray) ; slider.setBackground (Color.lightGray) ; lire.setBackground (Color.lightGray) ; pause.setBackground (Color.lightGray) ; stopper.setBackground (Color.lightGray) ; precedent.setBackground (Color.lightGray) ; suivant.setBackground (Color.lightGray) ; menu.setBackground (Color.lightGray) ; lire.setBorderPainted(false) ; pause.setBorderPainted(false) ; stopper.setBorderPainted(false) ; precedent.setBorderPainted(false) ; suivant.setBorderPainted(false) ; lire.setFocusPainted(false) ; pause.setFocusPainted(false) ; stopper.setFocusPainted(false) ; precedent.setFocusPainted(false) ; suivant.setFocusPainted(false) ; } /* creation du player et demarrage de la lecture */ public void lecture (String nom_fichier) { try { this.arret() ; player = Manager.createRealizedPlayer(new MediaLocator("file:"+nom_fichier)) ; player.addControllerListener(this) ; player.start() ; maximum_temps = ((int)player.getDuration().getSeconds()) ; String[] chanson_prem = ((String[])liste_fichier.get(num_chanson)) ; liste.getSelectionModel().addSelectionInterval(num_chanson, num_chanson); titre.setText (chanson_prem[1]+" ") ; slider.setMaximum (maximum_temps) ; slider.setValue (0) ; if (!thread_slider.isAlive()) { thread_slider.start() ; } } catch(Exception e) { System.out.println (e) ; } } /* arret du lecteur */ public void arret () { if (player !=null) { player.stop() ; } } /* creation de l'objet */ public static void main (String[]args) { lecteur = new son() ; lecteur.graphique() ; thread_son = new son() ; thread_slider = new Thread (thread_son) ; } /* méthodes des listeners */ // listener du player public void controllerUpdate( ControllerEvent ce ) { // passage a l'etat réalisé if(ce instanceof RealizeCompleteEvent) { } //passage à l'état terminé else if (ce instanceof EndOfMediaEvent) { lecteur.arret() ; temps_lecture = 0 ; if (num_chanson < (liste_fichier.size() -1)) // verifier on arrive a la fin de la playlist { num_chanson++ ; } else { num_chanson = 0 ; } String[] chanson_prem = ((String[])liste_fichier.get(num_chanson)) ; lecteur.lecture(chanson_prem[5]) ; } } //listener des boutons et du menu public void actionPerformed(ActionEvent evt) { slider.removeChangeListener (this) ; // pour eviter les sauts dus au slider Object obj = evt.getSource() ; if (player != null) { // bouton pause if (obj.equals(pause)) { temps_lecture = player.getMediaTime().getSeconds() ; lecteur.arret() ; } // bouton lecture if (obj.equals(lire)) { String[] chanson_prem = ((String[])liste_fichier.get(num_chanson)) ; lecteur.lecture(chanson_prem[5]) ; player.setMediaTime(new Time (temps_lecture)) ; } // bouton stop if (obj.equals(stopper)) { temps_lecture = 0 ; lecteur.arret() ; } // bouton precedent if (obj.equals(precedent)) { if (num_chanson > 0)// verifier on arrive a la fin de la playlist { num_chanson-- ; } else { num_chanson = liste_fichier.size() -1 ; } temps_lecture = 0 ; lecteur.arret() ; String[] chanson_prem = ((String[])liste_fichier.get(num_chanson)) ; lecteur.lecture(chanson_prem[5]) ; } // bouton suivant if (obj.equals(suivant)) { if (num_chanson < (liste_fichier.size() -1)) // verifier on arrive a la fin de la playlist { num_chanson++ ; } else { num_chanson = 0 ; } temps_lecture = 0 ; lecteur.arret() ; String[] chanson_prem = ((String[])liste_fichier.get(num_chanson)) ; lecteur.lecture(chanson_prem[5]) ; } // menu enlever musique if (obj.equals(suppr_fichier)) { liste_fichier.remove(liste.getSelectedRow()) ; table_modele.removeRow (liste.getSelectedRow()) ; lecteur.arret() ; num_chanson = 0 ; } } // menu ouvrir musique if (obj.equals(ouvrir_fichier)) { ouvrir ouverture = new ouvrir() ; if ((nom_fichier = ouverture.ouvrir()) != null) { int nb_ligne = table_modele.getRowCount() ; String[] fichier_open = ouverture.tagger(nom_fichier) ; liste_fichier.put(nb_ligne, fichier_open) ; table_modele.addRow (fichier_open) ; lecteur.arret() ; lecteur.lecture(nom_fichier) ; num_chanson = 0 ; } } // menu ouvrir playlist if (obj.equals(ouvrir_playlist)) { ouvrir ouverture = new ouvrir() ; //ouvrir fenetre d'ouverture if ((nom_fichier = ouverture.ouvrir()) != null) { for (int i = 0 ; i