1. Le principe de mise en œuvre du lecteur de musique
La fonction multimédia de Javase est très faible, il existe donc un plug-in spécialisé dans le multimédia appelé JMF. Les modèles fournis par JMF peuvent être à peu près divisés en sept catégories.
* Source de données
* Dispositif de capture (y compris l'intercepteur vidéo et audio)
* Joueur
* Processeur
* Enfin de données
* Format de données (format)
* Directeur
Le lecteur de musique MyMusicplayer (c'est le nom de classe que j'ai créé) J'ai passé des appels à la classe Player dans JMF pour implémenter diverses fonctions telles que sa lecture.
La première chose que nous devons faire est d'installer JMF. Je crois que l'installation de JMF est très gênante pour de nombreux novices. JMF ne prend en charge que la version JDK 32 bits, mais les environnements IDE comme Eclipse doivent correspondre à JDK, c'est-à-dire que l'environnement IDE doit prendre en charge la version JDK 32 bits. Après avoir installé JMF, la lecture de MP3 n'est parfois pas réussie, et vous devez également installer MP3Plugin de JMF.
2. Diagramme d'effet d'interface
3. Diagramme de structure fonctionnelle
4. Divers codes pour implémenter les fonctions
La classe publique MyMusicPlayer implémente ActionListener, ControllerListener, Runnable {jFrame j = new JFrame ("Music Player"); JLABEL TablePlaer = new JLabel ("Playlist"); JBUTTON BADD = NOUVEAU JBUTTON ("Ajouter Song"); JBUTTON BDELECT = NEW JBUTTON ("Delete Song"); Jbutton bdelectTable = new JButton ("list claire"); JBUTTON BMOVENEXT = NOUVEAU JBUTTON ("Suivant Song"); Jbutton bmoveprevious = new Jbutton ("chanson précédente"); JBUTTON BPLAYER = NOUVEAU JBUTTON ("PAUSE"); JBUTTON BSTOP = NOUVEAU JBUTTON ("STOP"); Jbutton bset = new JBUTTON ("show paroles"); Jbutton bend = new Jbutton ("stop"); String [] s = {"Sequential Play", "Single Loop", "Shutter Play"}; // Array d'options de liste déroulante JCOMBOBOX SELECT = NOUVEAU JCOMBOBOX (S); // Créer des options de liste déroulante JPanel P1 = new JPanel (); // zone de playlist jpanel p = new JPanel (); Jpanel p2 = new JPanel (); // Button Zone JPanel P3 = new JPanel (); JLabel l = new JLabel (); Jpanel p5 = new JPanel (); // Place la playlist jpanel p6 = new JPanel (); // Placez le nom de la chanson de jeu statique jpanel pp = new JPanel (); JLABEL STATIQUE LB; public static jTextArea jt = new jTextArea (); Index INT statique; // Indice de la playlist int count; INT Flag; // est le marqueur de la playlist jouant au hasard ou en jouant séquentiellement int countsecond; // Obtenez la valeur de temps totale de la musique static int newtime = 0; int ischanging = 0; // Lorsque la souris clique sur le curseur, la valeur de progression modifiera également int ispressing = 0; // défendez si la souris clique sur le fichier de curseur musicname = null; statique java.util.list <Fichier> musicNames = null; // Utilisez des génériques pour créer un fichier de fichiers currentDirectory = null; Liste de liste; // Liste de fichiers FileDialog Open; // Définir la boîte de dialogue de fichiers objet Random Random = new Random (); String File Name; // Bar de progression JBUTTON TIMEInformation = new JBUTTON (); Jslider timeslider = new JSlider (swingConstants.Horizontal, 0, 100, 0); //(SwingConstants.Horizontal) est utilisé pour diriger l'ensemble des constantes avec la barre de progression comme direction horizontale // (0, 100, 0) Créer un curseur horizontal avec les valeurs minimales, maximales et initiales spécifiées. // Joue Player Player = NULL; MusicFileChoOSer filechoOser = new musicfileChoOser (); statique jTextPane tp = new JTextPane (); // montre la zone lyrique JTextArea est = new JTextArea (); // Afficher la zone d'image publique MyMusicplayer () {J.SetSize (1200, 700); J.SetLayout (null); J.GetContentPane (). SetBackground (Color.Black); J.SetDefaultCloseOperation (jframe.exit_on_close); P.Setbounds (2, 563, 1180, 95); p.SetLayout (new BorderLayout ()); P1.SetBounds (2, 3, 298, 30); p1.setbackground (nouvelle couleur (255, 255, 255)); p2.SetLayout (nouveau GridLayout (2, 3, 20, 20)); P2.SetBackground (Color.light_Gray); P3.SetLayout (nouveau GridLayout (2,0,200,10)); P3.SetBackground (nouvelle couleur (255 255 255)); P5.SetBounds (2, 35, 298, 526); p5.SetLayout (null); P5.SetBackground (nouvelle couleur (255 255 255)); p6.setbounds (301, 3 880, 30); p6.setLayout (null); p6.setbackground (nouvelle couleur (255 255 255)); l.setbounds (250, 4, 600, 30); // définit la chanson affichée et jouée p6.add (l); / * Implémentation de l'insertion d'image * * / ImageIcon ic = new ImageIcon ("Image // 2.3.jpg"); ic = new ImageIcon (ic.getImage (). GetScaledInstance (880, 477, 2)); // Obtenez l'image et définissez la taille de l'image lb = new JLabel (ic); lb.setOpaque (false); pp.setOpaque (false); // réglé sur transparent pp.setbounds (241, 80 990, 500); are.setbounds (241, 56 990, 520); are.setOpaque (false); tp.setbackground (nouvelle couleur (255 255 255)); tp.setbounds (301, 35 880, 49); pp.add (are); pp.add (lb); // File list = new list (10); list.setbounds (100, 55, 187, 495); // lister la zone list.addactionListener (this); J.Add (liste); J.Add (JT); J.Add (TP); Badd.setbounds (5,20, 90,30); Badd.setbackground (nouvelle couleur (255 255 255)); Bdelect.setbounds (5, 80, 90, 30); Bdelect.setbackground (nouvelle couleur (255 255 255)); Bdelect.setbounds (5, 140, 90, 30); Bdelect.setbackground (nouvelle couleur (255 255 255)); TablePlaer.setbounds (30, 100, 200, 50); TablePlaer.setfont (nouvelle police ("安安", 1, 20)); p1.add (tableplaer); Bmoveprevious.setbackground (nouvelle couleur (255 255 255)); BPlayer.setbackground (nouvelle couleur (255 255 255)); BMoVenext.SetBackground (nouvelle couleur (255 255 255)); Bstop.setbackground (nouvelle couleur (255 255 255)); select.setbackground (nouvelle couleur (255 255 255)); Bset.setbackground (nouvelle couleur (255 255 255)); P2.Add (BmovePrevious); P2.Add (BPlayer); P2.Add (bmoVeNext); P2.Add (BSTOP); P2.Add (SELECT); P2.Add (BSET); P2.SetBackground (nouvelle couleur (255 255 255)); P.ADD (P2, BorderLayout.West); P.ADD (P3, BorderLayout.Center); P5.Add (P); P5.Add (Badd); P5.Add (BDelect); p5.Add (bdelectTable); Badd.addactionListener (this); Bdelect.addactionListener (this); BdelectTable.addactionListener (this); BMoVEnext.AddactionListener (this); BPlayer.AddactionListener (this); Bmoveprevious.addactionListener (this); BSTOP.AddactionListener (this); select.addactionListener (this); BSet.addactionListener (this); TimeInformation.SetEnabled (false); / * * Bar de progression de l'implémentation * * / TimesLider.SetMajortickSpacing (1); // Appelez cette méthode pour définir l'intervalle de la marque d'échelle principale. Le nombre entrant représente la distance mesurée par valeur entre chaque marqueur d'échelle principale. TimesLider.SetPaintTicks (true); // Pour dessiner l'échelle principale, SetPaintTicks doit être défini sur True TimesLider.AddChangeListener (new ChangeListener () {// Créez un nouveau ChangeListener et ajoutez-le au curseur. Public void statTechanged (changeevent arg0) {if (lecteur! = Null && isPressing == 1) {newtime = (int) (jslider) arg0.getSource (). TimesLider.AddMouseListener (new MouseAdapter () {public void Mousdressressed (Mouseevent Arg0) {Ispressing = 1; // lorsque la souris clique sur le curseur} public void Mouselelent (Mouseevent Arg0) {ISPRESSING = 0; // lorsque la souris ne clique pas sur le curseur}}); TimeInformation.SeTText ("Heure actuelle: 00:00 || Temps total: 00:00"); TimeInformation.setbackground (nouvelle couleur (255 255 255)); P3.Add (TimeInformation, BorderLayout.north); P3.Add (Timeslider, BorderLayout.South); J.ADD (PP); J.ADD (P5); J.Add (P); J.ADD (P1); J.ADD (P6); J.SetVisible (true); // J.SetResiSable (false); } / * * Fonction principale * * / public static void main (String [] args) lève IOException, InterruptedException {// InterruptedException: lorsque le thread est dans un état d'attente, de sommeil ou d'occupation avant ou pendant l'activité et que le fil est interrompu, l'exception est jetée. MyMusicplayer play = new myMusicplayer (); Thread TimerUn = nouveau thread (play); TIMERUN.START (); } @Override public void ActionPerformed (ActionEvent e) {String cmd = e.getActionCommand (); // jugez s'il faut jouer ou faire une pause en obtenant la chaîne, chaîne box = (String) select.getSelectedItem (); // juge l'ordre de lecture if (e.getsource () == badd) {if (player == null) {if (filechooser.showopenDialog (j) == musicfilechooser.approve_option) {this.musicname = filechooser.getSelectedFile (); File cd = filechooser.getCurrentDirectory (); // Obtenez le chemin actuel if (cd! = This.currentDirectory || this.currentDirectory == null) {fileFilter [] fileFilters = fileChooser.getChoosableFileFilters (); // FileFilter est une classe abstraite, que JFileChoOser utilise pour filtrer l'ensemble des fichiers affichés dans les fichiers utilisateur [] = cd.listFiles (); //cd.listFiles () signifie renvoyer un tableau de pathNames abstraits, qui représentent des fichiers dans le répertoire représenté par ce chemin de chemin abstrait. this.musicNames = new ArrayList <Fichier> (); pour (fichier de fichier: fichiers) {// chaque fois que l'objet de fichier dans le tableau est attribué à la variable de fichier, puis cette variable est exploitée dans le corps de boucle, tel que: // pour (int i = 0; i <files.length; i ++) {file = files [i]; ...} filename = file.getName (). TolowerCase (); // Obtenez tous les noms de musique pour (fichier Filter: fileFilters) {if (! File.isdirectory () && filter.accept (file)) {this.musicames.add (file); list.add (nom de fichier); filename = e.getActionCommand (); }}}}} index = musicNames.Indexof (MusicName); // Définissez l'indice de la chanson Count = MusicNames.size (); PlayFile (); }} else {player.start (); }} if (cmd.equals ("pause")) {BPlayer.setText ("play"); player.stop (); } if (cmd.equals ("play")) {BPlayer.seTTExt ("Pause"); player.start (); } if (e.getSource () == bSTOP) {// stop if (player! = null) {Player.stop (); TimeInformation.SeTText ("Heure actuelle: 00: 00 || Temps total: 00: 00"); TimesLider.SetValue (0); player.setMediatime (nouveau temps (0)); // définit le temps sur zéro}} if (e.getsource () == bmoVeNExt) {// la chanson suivante if (le player! = Null) {if ("playback séquestre" .equals (box)) {nextMusic (); } if ("shutter playback" .equals (box)) {int index = (int) rand.nextint (this.musicNames.size ()) + 1; if (this.musicNames! = null &&! this.musicNames.iSempty ()) {if (++ index == this.musicNames.size ()) {index = (int) rand.nextint (this.musicNames.size ()) + 1; } player.stop (); // Si vous cliquez sur la chanson précédente, la chanson actuelle sera arrêtée et la chanson précédente sera jouée, essayez {player = manager.crearealalizedplayer (MusicNames.get (index) .touri (). Tourl ()); player.prefetch (); player.setMediatime (new Time (0.0)); // play Player.AddControllerListener (this); l.setText ("Playing:" + this.musicNames.get (index) .toString ()); list.select (index); player.start (); drapeau = 1; } catch (noplayeRexception | ne peut pasRealizEException | ioException e1) {e1.printStackTrace (); }}}}}} if (e.getsource () == bmovePrevious) {// chanson précédente if (le player! = null) {if ("séquentiel play" .equals (box)) {précédemmentmusic (); } if ("shutter play" .equals (box)) {int index = (int) rand.nextint (this.musicNames.size ()) + 1; if (this.musicNames! = null &&! this.musicNames.iSempty ()) {if (index - == (int) rand.nextint (this.musicames.size ()) + 1) {index = this.musicNames.size () - 1; } player.stop (); // Si vous cliquez sur la chanson précédente, la chanson actuelle sera arrêtée et la chanson précédente sera jouée, essayez {player = manager.crearealalizedplayer (MusicNames.get (index) .touri (). Tourl ()); player.prefetch (); player.setMediatime (new Time (0.0)); // commence à jouer à Player.AddControllerListener (this); l.setText ("Playing:" + this.musicNames.get (index) .toString ()); list.select (index); player.start (); drapeau = 1; } catch (noplayeRexception | ne peut pasRealizEException | ioException e1) {e1.printStackTrace (); }}}}}}} if (e.getsource () == bdelect) {// delete Song index = list.getSelectedIndex (); list.Remove (index); MusicNames.Remove (this.index); } if (e.getsource () == bdelectTable) {// effacer la liste list.removeall (); MusicNames.removeall (MusicNames); player.stop (); lecteur = null; } // double-cliquez sur la liste à lire list.AddMouseListener (new MouseAdapter () {public void Mouseclicked (MouseEvent e) {// double click if (e.getClickCount () == 2) {if (lecteur }});} // Parce que l'interface "ControllerListener" est implémentée, cette méthode est utilisée pour gérer les événements transmis à partir du lecteur multimédia; public void ControllerUpDate (ContrôleRevent e) {String Box = (String) select.getSelectedItem (); // juge l'ordonnance de lecture if (e instanceof endofmediaEvent) {Player.setMediatime (new Time (0)); if ("LOOP unique" .equals (box)) {player.start (); } if ("séquentiel play" .equals (box)) {nextMusic (); } if ("shutter play" .equals (box)) {if (this.musicNames! = null &&! this.musicames.isempty ()) {int index = (int) rand.nextint (this.musicNames.size ()) + 1; essayez {player = manager.creerealizelizedplayer (musicNames.get (index) .touri (). tourl ()); player.prefetch (); player.setMediatime (new Time (0.0)); // play Player.AddControllerListener (this); l.setText ("Playing:" + this.musicNames.get (index) .toString ()); list.select (index); player.start (); drapeau = 1; } catch (noplayeRexception | ne peut pasRealizEException | ioException e1) {e1.printStackTrace (); }}}}}}} / ** * Obtenez le nom de la chanson MP3 * * @ Path de fichier MP3 * @song Nom * / public String getMusicName (String str) {int i; pour (i = str.length () - 1; i> 0; i--) {if (str.charat (i) == '//') Break; } str = str.substring (i + 1, str.length () - 4); retour STR; } / ** * Fonction d'implémentation suivante * / public void nextMusic () {} / ** * Fonction d'implémentation précédente * / public void PREVERMUSIC () {} / ** * Play Fonction Mating Fonction * / public Void PlayFile () .Touri (). player.prefetch (); player.setMediatime (new Time (0.0)); // play Player.AddControllerListener (this); l.setfont (nouvelle police ("宋体", 0,20)); l.setText ("Playing:" + this.musicNames.get (index) .toString ()); // montre la chanson en cours de lecture list.Select (index); player.start (); MyThread11 tt = new myThread11 (); tt.start (); } catch (exception e1) {// Lorsqu'une musique ne peut pas être jouée, gérez-la de conroreserror (); retour; } this.setFrame (); } public void setFrame () {countSecond = (int) player.getDuration (). getSeconds (); TimesLider.setMaxim (CountSecond); TimesLider.SetValue (0); newtime = 0; } private void DealError () {// TODO Méthode générée automatique Stub MusicNames.Remove (index); if (--pount == index) index = 0; if (count == 0) joueur = null; else playfile (); } / ** * Filtrage de fichiers MP3 classe interne * / classe MusicFileChooser étend JFileChooser {} / ** * Filtrage de fichiers MP3 Classe interne auxiliaire * * / classe MyFileFilter étend FileFilter {// filefilter est une classe abstraite, le suffarre de JFilechooser pour filtrer la collection de fichiers affichée à la chaîne utilisateur [] Suffaisceau; Description de la chaîne; public myFileFilter () {super (); } public myFileFilter (String [] Suffarr, String Description) {super (); this.Suffarr = Suffarr; this.deScript = Description; } public boolean accepte (file f) {for (String s: subARr) {if (f.getName (). toupperase (). Endswith (s)) {return true; }} return f.isdirectory (); } public String getDescription () {return this.dection; }} / ** * lire la barre de progression du temps d'affichage * / public void run () {while (true) {sleep (); if (player! = null) {if (isPressing == 0) {if (isChanging == 1) {newtime = TimesLider.getValue (); Player.setMediatime (New Time (((Long) Newtime) * 1000000000)); ischanging = 0; } else {newtime = (int) Player.getMediatime (). getSeconds (); TimesLider.SetValue (Newtime); TimeInformation.SeTText ("Heure actuelle:" + newtime / 60 + ":" + newtime% 60 + "||" + "Temps total:" + countsecond / 60 + ":" + countsecond% 60); }}}}}}}}}} // Thread qui implémente les paroles MyThread11 étend Thread {public void run () {// TODO Méthode générée automatiquement Stub Try {lrc lrc = readlrc.readlrc ("Traveling Light.lrc"); Paroles ls = parselrc.parselrc (lrc); Playtest (LS); } catch (exception e) {}}} static void playTest (paroles ls) lance InterruptedException {tp.setfont (new Font ("宋体", 1,20)); tp.setForeground (Color.Blue); StyledDocument doc = tp.getStyledDocument (); SimpleatTributeSet Center = new SimpleatTributesET (); StyleConstants.SetAlignment (Centre, StyleConstants.Align_Center); // affiche doc.setParagraphAtTributes (0, doc.getLength (), centre, false); tp.setText ("artiste:" + ls.Getar ()); tp.setText ("Album:" + ls.Getal ()); tp.seTText ("Song:" + ls.Getti ()); TP.SETTEXT ("Production de paroles:" + ls.Getby ()); pour (lyric l: ls.GetLyrics ()) {tp.setText (l.getTxt ()); Thread.sleep (l.getTimesize ()); }}}V. Résultats des tests globaux
comme suit
Pour plus d'informations sur le lecteur, veuillez cliquer sur "Fonction Java Player" pour apprendre.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.