1. Das Implementierungsprinzip des Musikplayers
Die Multimedia-Funktion von Javase ist sehr schwach, daher gibt es ein Plug-In, das sich auf Multimedia namens JMF spezialisiert hat. Die von JMF bereitgestellten Modelle können grob in sieben Kategorien unterteilt werden.
* Datenquelle
* Capture -Gerät (einschließlich Video- und Audio -Interceptor)
* Spieler
* Prozessor
* Datasink
* Datenformat (Format)
* Manager
Der Music -Player MyMuSicPlayer (dies ist der Klassenname, den ich erstellt habe) Ich habe in der Player -Klasse in JMF Anrufe getätigt, um verschiedene Funktionen wie die Wiedergabe zu implementieren.
Das erste, was wir tun müssen, ist JMF zu installieren. Ich glaube, dass die Installation von JMF für viele Anfänger sehr problematisch ist. JMF unterstützt nur 32-Bit-JDK-Version, aber IDE-Umgebungen wie Eclipse müssen JDK entsprechen, dh die IDE-Umgebung muss die 32-Bit-JDK-Version unterstützen. Nach der Installation von JMF ist die Wiedergabe von MP3 manchmal nicht erfolgreich, und Sie müssen auch JMFs MP3plugin installieren.
2. Schnittstelleneffektdiagramm
3. Funktionsstrukturdiagramm
4. Verschiedene Codes für die Implementierung von Funktionen
öffentliche Klasse myMusicPlayer implementiert ActionListener, ControllerListener, Runnable {Jframe J = New JFrame ("Music Player"); JLabel tablePlaer = new JLabel ("Playlist"); Jbutton Badd = New Jbutton ("Song hinzufügen"); Jbutton bdelect = new Jbutton ("delete Song"); Jbutton bdelectTable = new Jbutton ("Clear List"); Jbutton BMovext = new Jbutton ("Next Song"); Jbutton Bmoveprevious = new Jbutton ("Vorheriges Lied"); Jbutton bPlayer = new Jbutton ("pause"); Jbutton BStop = New Jbutton ("Stop"); Jbutton Bset = New Jbutton ("Show Lyrics"); Jbutton Bend = New Jbutton ("Stop"); String [] S = {"Sequentiell -Play", "Single Loop", "Shutter Play"}; // Dropdown -Liste Option Array JCombobox SELECT = new Jcombobox (s); // Dropdown-Optionen erstellen jpanel p1 = new jpanel (); // Playlist Area jpanel p = new jpanel (); Jpanel p2 = new jpanel (); // Button Area jpanel p3 = new jpanel (); Jlabel l = new JLabel (); Jpanel p5 = new jpanel (); // Place Playlist jpanel p6 = new jpanel (); // den Namen des Play Song static jpanel pp = new jpanel () platzieren; statischer JLabel LB; public static jTextArea jt = new JTextArea (); statischer intindex; // Index der Playlist Int Count; int Flag; // ist der Marker der Wiedergabeliste, die zufällig oder nacheinander int Countsecond spielt. // Erhalten Sie den Gesamtzeitwert der Musik static int Newtime = 0; int ischanging = 0; // Wenn die Maus auf den Cursor klickt, ändert der Fortschrittswert auch int isdruck = 0; // verteidigen Sie, ob die Maus auf die Cursor -Datei musicname = null klickt; static java.util.list <Datei> musicnames = null; // Verwenden Sie Generics, um Dateiobjektdatei currentDirectory = null zu erstellen. Listliste; // Dateilistenliste fungialog öffnen; // Dialogobjekt des Datei definieren randal rand = new random (); String -Dateiname; // Progress Bar Jbutton TimeInformation = new Jbutton (); Jslider TimesLider = new Jslider (SwingConstants.Horizontal, 0, 100, 0); //(Swingconstants.horizontal) wird verwendet, um den Satz von Konstanten mit der Fortschrittsleiste als horizontale Richtung zu lenken // (0, 100, 0) Erstellen Sie einen horizontalen Schieberegler mit dem angegebenen Minimum-, Maximal- und Anfangswerten. // Player Player = null spielen; MusicFilechoser filechooser = new MusicFilechooSer (); static jTextPane TP = new JTextPane (); // Lyric Area static jTextArea sind = new JtextArea (); // Image Area public 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 (neue Farbe (255, 255, 255)); p2.SetLayout (neuer GridLayout (2, 3, 20, 20)); p2.Setbackground (color.light_gray); p3.setLayout (neuer GridLayout (2,0,200,10)); P3.Setbackground (neue Farbe (255.255.255)); P5.Setbounds (2, 35, 298, 526); p5.setLayout (null); P5.Setbackground (neue Farbe (255.255.255)); P6.Setbounds (301, 3.880, 30); p6.setLayout (null); P6.Setbackground (neue Farbe (255.255,255)); L.SetBounds (250, 4, 600, 30); // Setzen Sie den angezeigten und gespielten Song p6.add (l); /*Bildinsertion implementieren**/imageicon ic = new ImageCon ("Bild // 2.3.JPG"); IC = new ImageCon (ic.getImage (). GetCaledInstance (880, 477, 2)); // das Bild abrufen und die Bildgröße lb = new JLabel (IC) festlegen; lb.setopaque (falsch); pp.setopaque (falsch); // auf transparente pp.setbounds einstellen (241, 80,990, 500); are.setbounds (241, 56.990, 520); sind.setopaque (falsch); TP.Setbackground (neue Farbe (255.255,255)); TP.SetBounds (301, 35.880, 49); pp.add (sind); pp.add (lb); // Dateiliste = neue Liste (10); list.setBounds (100, 55, 187, 495); // List Area List.addactionListener (this); J.Add (Liste); J.Add (JT); J.Add (TP); Badd.SetBounds (5,20, 90,30); Badd.Setbackground (neue Farbe (255.255,255)); Bdelect.SetBounds (5, 80, 90, 30); Bdelect.Setbackground (neue Farbe (255.255.255)); Bdelect.SetBounds (5, 140, 90, 30); Bdelect.Setbackground (neue Farbe (255.255.255)); TablePlaer.SetBounds (30, 100, 200, 50); Tableplaer.setfont (neue Schriftart ("安安", 1, 20)); p1.add (tablePlaer); BMovePrevious.Setbackground (neue Farbe (255.255.255)); BPlayer.Setbackground (neue Farbe (255.255.255)); BMOVENEXT.SetBackground (neue Farbe (255.255.255)); BStop.Setbackground (neue Farbe (255.255.255)); select.setbackground (neue Farbe (255.255.255)); Bset.setbackground (neue Farbe (255.255.255)); p2.add (BMOVEPrevious); p2.add (bPlayer); p2.Add (BMovenext); p2.add (BStop); p2.add (select); p2.add (bset); P2.Setbackground (neue Farbe (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 (dies); Bdelect.AddactionListener (this); BDelectTable.AddactionListener (this); BMoveXT.AddactionListener (this); BPlayer.AddactionListener (this); BMoveprevious.AddActionListener (this); BStop.AddactionListener (dies); select.addactionListener (this); Bset.addactionListener (this); TimeInformation.SetEnabled (false); / * * Implementierung Fortschrittsleiste * */timesLider.setMajortickspacing (1); // Rufen Sie diese Methode auf, um das Intervall der Hauptskala -Marke festzulegen. Die eingehende Zahl repräsentiert den Abstand, der durch den Wert zwischen den einzelnen Hauptskala -Marker gemessen wird. TimesLider.setPaintTicks (true); // Um die Hauptskala zu zeichnen, müssen SetPaintTicks auf echte Zeitleiter eingestellt werden (int) (jslider) arg0.getSource ()) GetValue (); TimesLider.AddMouselistener (neuer Mouseadapter () {public void mousespressed (MouseEvent arg0) {iSpressing = 1; // Wenn die Maus auf den Cursor klickt} public void mouseerleased (mouseEvent arg0) {iSpress = 0; TimeInformation.SetText ("Aktuelle Zeit: 00:00 || Gesamtzeit: 00:00"); TimeInformation.Setbackground (neue Farbe (255.255.255)); p3.add (Zeitinformation, 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.setResizable (falsch); } / * * Hauptfunktion. MyMusicPlayer play = new myMusicPlayer (); Thread Timerun = neuer Thread (Play); Timerun.Start (); } @Override public void actionperformed (actionEvent e) {String cmd = e.getActionCommand (); // Beurteilen Sie, ob Sie abspielen oder innehalten möchten, indem Sie die String -String -Box = (String) select.getSelectedItem () erhalten; // Beurteilen Sie die Reihenfolge der Wiedergabe von (e.getSource () == Badd) {if (Player == null) {if (filechooser.showopendialog (j) == musicFileCoSer.Approve_Option) {this.Musicname = Filechoser.GetselectedFile (); Datei cd = filechooser.getCurrentDirectory (); // Erhalten Sie den aktuellen Pfad if (cd! // FileFilter ist eine abstrakte Klasse, die JFilechooser zum Filtern der in den Benutzerdatei -Dateien angezeigten Dateien filtert [] = CD.Listfiles (); //cd.Listfiles () bedeutet, ein Array abstrakter Pathnames zurückzugeben, die Dateien im Verzeichnis darstellen, die durch diesen abstrakten Pfadnamen dargestellt werden. this.Musicnames = new ArrayList <Datei> (); Für (Dateidatei: Dateien) {// Jedes Mal, wenn das Dateiobjekt im Array der Dateivariablen zugewiesen wird, wird diese Variable im Schleifenkörper betrieben, z. // alle Musiknamen für (Dateifilter filter: filterFilters) {if (! File.isdirectory () && filter.accept (Datei)) {this.musicnames.add (Datei); list.add (Dateiname); fileName = e.getActionCommand (); }}}}} index = musicnames.indexof (musicName); // Definieren Sie den Index des Song 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 ("Aktuelle Zeit: 00: 00 || Gesamtzeit: 00: 00"); TimesLider.setValue (0); Player.SETMEDIATIMET (neue Zeit (0)); // Zeit auf Zero}} if (e.getSource () == BMOVENEXT) {// Nächster Song if (Player! } if ("Shutter -Wiedergabe" .Equals (Box)) {int index = (int) rand.nextint (this.musicnames.size ())+1; if (this.musicnames! } Player.Stop (); // Wenn Sie auf den vorherigen Song klicken, wird der aktuelle Song gestoppt und der vorherige Song wird gespielt. Player.Prefetch (); Player.SetMediatime (neue Zeit (0.0)); // Player.AddControllerListener (this); l.setText ("spiele:"+this.musicnames.get (Index) .ToString ()); list.Select (Index); Player.Start (); Flag = 1; } catch (noplayerException | kann nichtrealizeexception | ioException e1) {e1.printstacktrace (); }}}}}} if (e.getSource () == bMovePrevious) {// Vorheriger Song if (Player! } if ("Shutter Play" .Equals (Box)) {int index = (int) rand.nextint (this.musicnames.size ())+1; if (this.musicnames! } Player.Stop (); // Wenn Sie auf den vorherigen Song klicken, wird der aktuelle Song gestoppt und der vorherige Song wird gespielt. Player.Prefetch (); Player.SetMediatime (neue Zeit (0.0)); // Starten Sie Player.AddControllerListener (this); l.setText ("spiele:"+this.musicnames.get (Index) .ToString ()); list.Select (Index); Player.Start (); Flag = 1; } catch (noplayerException | kann nichtrealizeexception | ioException e1) {e1.printstacktrace (); }}}}}}} if (e.getSource () == BDELECT) {// Song index = list.getSelectedIndex (); list.remove (index); Musicnames.remove (this.index); } if (e.getSource () == bdelectTable) {// die Liste listen.removeall (); Musicnames.removeall (musicNames); Player.Stop (); Player = null; } // Doppelklicken Sie auf die Liste, die gespielt werden soll. }});} // Da die Schnittstelle "ControllerListener" implementiert ist, wird diese Methode verwendet, um Ereignisse zu verarbeiten, die vom Media Player übertragen werden. public void ControllerUpDate (ControllErEvent e) {String -Box = (String) select.getSelectedItem (); // Beurteilen Sie die Verordnung der Wiedergabe von (e Instanz von endofMediaEvent) {Player.SetMediDiate (neue Zeit (0)); if ("Single Loop" .Equals (Box)) {Player.Start (); } if ("sequentiell spielen" .Equals (box)) {nextMusic (); } if ("Shutter Play" .Equals (Box)) {if (this.musicnames! try {Player = Manager.CreateREFIREDPLAYER (musicnames.get (index) .touri (). tourl ()); Player.Prefetch (); Player.SetMediatime (neue Zeit (0.0)); // Player.AddControllerListener (this); l.setText ("spiele:"+this.musicnames.get (Index) .ToString ()); list.Select (Index); Player.Start (); Flag = 1; } catch (noplayerException | kann nichtrealizeexception | ioException e1) {e1.printstacktrace (); }}}}}}} / *** den MP3 -Songnamen** @mp3 -Dateipfad* @song Name* / public String getMusicName (String str) {int i; für (i = str.length ()-1; i> 0; i--) {if (str.charat (i) == '//') break; } Str = str.substring (i + 1, str.length () - 4); return str; } / *** Nächste Implementierungsfunktion* / public void NextMusic () {} / *** Vorherige Implementierungsfunktion* / public void potherMusic () {} / *** MP3 -Datei Hauptfunktion* / public void PlayFile () {try {Player = Manager.CreateRectioner (Musicnames.get (Index) .Touri () .Touri (). Player.Prefetch (); Player.SetMediatime (neue Zeit (0.0)); // Player.AddControllerListener (this); L.SetFont (neue Schriftart ("宋体", 0,20)); l.setText ("spiele:"+this.musicnames.get (Index) .ToString ()); // Zeigen Sie den Song, der gespielt wird. Select (Index); Player.Start (); MyThread11 TT = new myThread11 (); tt.start (); } catch (Ausnahme e1) {// Wenn eine Musik nicht gespielt werden kann, behandeln Sie es mit DealError (); zurückkehren; } this.setframe (); } public void setframe () {countsecond = (int) Player.getDuration (). GetEconds (); TimesLider.SetMaximum (countSecond); TimesLider.setValue (0); Newtime = 0; } private void DealError () {// Todo automatisch generierte Methode stub musicnames.remove (index); if (--count == INDEX) INDEX = 0; if (count == 0) Player = null; sonst PlayFile (); }/*** MP3 -Datei Filterung interner Klasse*/Klasse MusicFilechoOser erweitert JFilechoOser {}/*** MP3 -Datei -Filter -Hilfsklasse**/class MyFileFilter erweitert die Dateifilter {// Dateifilter ist eine abstrakte Klasse, die JFilechoser mit der Dateisammlung mit der Dateikollektion versehen. Zeichenfolge Beschreibung; public myFileFilter () {Super (); } public myFileFilter (String [] Sufarr, String Beschreibung) {Super (); this.suffarr = Sufarr; this.descript = Beschreibung; } public boolean Accept (Datei f) {für (String S: Sufarr) {if (f.getName (). touppercase (). Endswith (s)) {return true; }} return f.isdirectory (); } public String getDescription () {return this.Dektion; }}/*** Lesen Sie die Anzeigezeit Fortschrittsleiste*/public void run () {while (true) {sleep (); if (player! Player.SETMEDIATIME (neue Zeit (((lange) Newton)*1000000000); ischanging = 0; } else {Newtime = (int) Player.getmediatime (). GetSeconds (); TimesLider.SetValue (Newtime); TimeInformation.SetText ("Aktuelle Zeit:"+Newtime/60+":"+Newtime%60+"||"+"Gesamtzeit:"+countsecond/60+":"+countsecond%60); }}}}}}}}} // thread, der Texte mythread11 erweitert {public void run () {// Todo automatisch generierte Methode Stub Try {lrc lrc = readlrc.readlrc ("reisende licht.lrc"); Lyrics ls = parselrc.parselrc (LRC); Playtest (LS); } catch (Ausnahme e) {}}} static void Playtest (Texte ls) löscht InterruptedException {tp.setfont (neue Schriftart ("宋体", 1,20)); tp.setforenground (color.Blue); StyledDocument doc = tp.getStyledDocument (); SimpleateTributeset Center = new SimplEteTTributeset (); Styleconstants.setAnignment (Mitte, Styleconstants.Align_Center); // doc.setParagraphattributes (0, doc.getLength (), center, false) anzeigen; tp.setText ("Künstler:" + ls.getar ()); tp.setText ("Album:" + ls.getal ()); tp.setText ("Song:" + ls.getti ()); tp.setText ("Texte Produktion:" + ls.getby ()); für (lyric l: ls.getlyrics ()) {tp.setText (l.gettTxt ()); Thread.sleep (l.gettimeize ()); }}}V. Gesamttestergebnisse
wie folgt
Weitere Informationen zum Player finden Sie auf "Java Player -Funktion", um zu lernen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.