1。音楽プレーヤーの実装原則
Javaseのマルチメディア機能は非常に弱いため、JMFと呼ばれるマルチメディアを専門とするプラグインがあります。 JMFによって提供されるモデルは、ほぼ7つのカテゴリに分割できます。
*データソース
*キャプチャデバイス(ビデオおよびオーディオインターセプターを含む)
*プレーヤー
*プロセッサ
* DataSink
*データ形式(フォーマット)
* マネージャー
音楽プレーヤーMyMusicPlayer(これは私が作成したクラス名です)私はJMFのプレーヤークラスに電話をかけ、その再生などのさまざまな機能を実装しました。
最初にしなければならないことは、JMFをインストールすることです。 JMFの設置は、多くの初心者にとって非常に面倒だと思います。 JMFは32ビットJDKバージョンのみをサポートしますが、EclipseのようなIDE環境はJDKに対応する必要があります。つまり、IDE環境は32ビットJDKバージョンをサポートする必要があります。 JMFをインストールした後、MP3の再生が成功しない場合があり、JMFのmp3Pluginもインストールする必要があります。
2。インターフェイス効果図
3。機能構造図
4。機能を実装するためのさまざまなコード
パブリッククラスMyMusicPlayerは、ActionListener、ControllListener、Runnable {JFrame J = new JFrame( "Music Player"); jlabel tableplaer = new Jlabel( "Playlist"); jbutton badd = new jbutton( "add song"); jbutton bdelect = new jbutton( "delete song"); jbutton bdelecttable = new JButton( "Clear List"); jbutton bmovenext = new jbutton( "Next Song"); jbutton bmoveprevious = new jbutton( "前曲"); jbutton bplayer = new jbutton( "Pause"); jbutton bstop = new jbutton( "stop"); jbutton bset = new jbutton( "Show歌詞"); jbutton bend = new jbutton( "stop"); string [] s = {"sequential play"、 "single loop"、 "shutter play"}; //ドロップダウンリストオプション配列jcombobox select = new jcombobox(s); //ドロップダウンオプションを作成jpanel p1 = new JPanel(); //プレイリスト領域jpanel p = new JPanel(); jPanel P2 = new JPanel(); //ボタンエリアjPanel P3 = new JPanel(); jlabel l = new Jlabel(); jPanel P5 = new JPanel(); //プレイリストjpanel p6 = new JPanel(); //プレイソングの名前を配置Static JPanel pp = new JPanel();静的jlabel lb; public static jtextarea jt = new jtextarea();静的intインデックス; //プレイリストintカウントの添え字。 intフラグ; //プレイリストのマーカーは、ランダムに再生されるか、INTカウントセカンドを順次再生します。 //音楽の合計時間値を取得static int newtime = 0; int ischanging = 0; //マウスがカーソルをクリックすると、進行状況値も変更されます= 0; //マウスがカーソルファイルをクリックするかどうかを防御します。musicName= null; static java.util.list <file> musicNames = null; //ジェネリックを使用してファイルオブジェクトファイルcurrentDirectory = nullを作成します。リストリスト; //ファイルリストFileDialog Open; //ファイルダイアログオブジェクトを定義するランダムrand = new Random();文字列ファイル名; // Progress Bar JButton TimeInformation = new JButton(); jslider timeslider = new jslider(swingconstants.horizontal、0、100、0); //(SwingConstants.Horizontal)を使用して、Progress Barを水平方向にする定数のセットを導きます//(0、100、0)指定された最小値、最大値、初期値を持つ水平スライダーを作成します。 //プレーヤープレーヤーを再生= null; MusicFileChooser FileChooser = new MusicFileChooser(); static jtextpane tp = new jtextpane(); //叙情的な領域を表示静的jtextareaは= new jtextarea(); //画像領域を表示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(新しい色(255、255、255)); p2.setlayout(new gridlayout(2、3、20、20)); p2.setbackground(color.light_gray); p3.setlayout(新しいgridlayout(2,0,200,10)); p3.setbackground(新しい色(255,255,255)); p5.setbounds(2、35、298、526); p5.setlayout(null); p5.setbackground(新しい色(255,255,255)); p6.setbounds(301、3,880、30); p6.setlayout(null); p6.setbackground(新しい色(255,255,255)); l.setbounds(250、4、600、30); //表示され、再生されたSong P6.Add(L)を設定します。 /*画像挿入を実装**/ImageIcon IC = new ImageIcon( "Image // 2.3.jpg"); IC = new ImageIcon(ic.getImage()。getScaledInstance(880、477、2)); //画像を取得して画像サイズを設定しますlb = new Jlabel(IC); lb.setopaque(false); pp.setopaque(false); //透明なpp.setbounds(241、80,990、500)に設定します。 are.setbounds(241、56,990、520); are.setopaque(false); tp.setbackground(新しい色(255,255,255)); TP.Setbounds(301、35,880、49); pp.add(are); pp.add(lb); //ファイルリスト=新しいリスト(10); list.setbounds(100、55、187、495); //リスト領域リスト.addactionlistener(this); J.Add(リスト); J.Add(JT); J.Add(TP); badd.setbounds(5,20、90,30); badd.setbackground(新しい色(255,255,255)); bdelect.setbounds(5、80、90、30); bdelect.setbackground(新しい色(255,255,255)); bdelect.setbounds(5、140、90、30); bdelect.setbackground(新しい色(255,255,255)); tableplaer.setbounds(30、100、200、50); tableplaer.setfont(new Font( "安安"、1、20)); p1.add(tableplaer); bmoveprevious.setbackground(新しい色(255,255,255)); bplayer.setbackground(新しい色(255,255,255)); bmovenext.setbackground(新しい色(255,255,255)); bstop.setbackground(新しい色(255,255,255)); select.setbackground(new Color(255,255,255)); bset.setbackground(新しい色(255,255,255)); p2.add(bmoveprevious); p2.add(bplayer); p2.add(bmovenext); p2.add(bstop); p2.add(select); p2.add(bset); p2.setbackground(新しい色(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 * */timeslider.setmajortickspacing(1); //このメソッドを呼び出して、メインスケールマークの間隔を設定します。着信数は、各メインスケールマーカー間の値で測定された距離を表します。 Timeslider.setPaintticks(true); //メインスケールを描画するには、SetPaintticksをTrue Timeslider.AddChangelistener(// new ChangElistener()に設定する必要があります。{//新しいChangeListenerを作成し、スライダーに追加します。 (int)(jslider)arg0.getSource())。 Timeslider.addmouseListener(new Mouseadapter(){public void mousepressed(mousevent arg0){ispressing = 1; //マウスがカーソルをクリックすると} public void mousereleased(mousevent arg0){ispressing = 0 ;/// timeformation.settext( "現在の時刻:00:00 ||合計時間:00:00"); timeinformation.setbackground(新しい色(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.setresizable(false); } / * * main function * * /public static void main(string [] args)throws ioException、arternedexception {// arternedexception:アクティビティの前またはアクティビティ中にスレッドが待機、睡眠状態、または占有されている場合、スレッドが中断され、例外がスローされます。 myMusicPlayer play = new myMusicPlayer();スレッドTimerun = newスレッド(再生); timerun.start(); } @Override public void ActionPerformed(actionEvent e){string cmd = e.getActionCommand(); //文字列を取得して再生するか一時停止するかを判断します。文字列box =(string)select.getSelectedItem(); //再生順序を判断するif(e.getSource()== badd){if(player == null){if(filechooser.showopendialog(j)== musicfilechooser.approve_option){this.musicname = filechooser.getSelectedFile();ファイルcd = filechooser.getCurrentDirectory(); //現在のパスを取得するif(cd!= this.currentdirectory || this.currentdirectory == null){filefilter [] filefilters = filechooser.getChoosableFilefilters(); // filefilterは抽象クラスであり、JFileChooserがユーザーファイルに表示されるファイルのセットをフィルタリングするために使用します[] = CD.LISTFILES(); //cd.listfiles()とは、この抽象的なパス名で表されるディレクトリ内のファイルを表す抽象パス名の配列を返すことを意味します。 this.musicNames = new ArrayList <file>(); for(file file:files){//配列内のファイルオブジェクトがファイル変数に割り当てられ、この変数がループ本体で操作されます。 //(filefilter filter:filefilters)のすべての音楽名を取得{if(!file.isdirectory()&& filter.accept(file)){this.musicnames.add(file); list.add(filename); filename = e.getActionCommand(); }}}}} index = musicNames.indexof(musicName); // 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(); timeformation.settext( "現在の時間:00:00 ||合計時間:00:00"); Timeslider.setValue(0); player.setmediatime(new Time(0)); //時間をゼロに設定}} if(e.getSource()== bmovenext){//次の曲if(player!= null){if( "Sequal Playback" .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(); //前の曲をクリックすると、現在の曲が停止し、前の曲が再生されます{player = manager.createrealizedplayer(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();フラグ= 1; } catch(noplayerexception | can count realizeexception | ioException e1){e1.printstacktrace(); }}}}}}} if(e.getSource()== bmoveprevious){//前の歌if(player!= null){if( "sequential play" .equals(box)){fortermusic(); } 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.musicnames.size())+1){index = this.musicnames.size() - 1; } player.stop(); //前の曲をクリックすると、現在の曲が停止し、前の曲が再生されます{player = manager.createrealizedplayer(musicnames.get(index).touri()。tourl()); player.prefetch(); player.setMediatime(new Time(0.0)); // player.addcontrollerListener(this)を再生し始めます。 l.settext( "playing:"+this.musicnames.get(index).tostring()); list.select(index); player.start();フラグ= 1; } catch(noplayerexception | can count realizeexception | ioException e1){e1.printstacktrace(); }}}}}}}} if(e.getSource()== bdelect){// delete song index = list.getSelectedIndex(); list.remove(index); MusicNames.Remove(this.index); } if(e.getSource()== bdelecttable){// list list.removeall(); MusicNames.RemoveAll(MusicNames); player.stop(); player = null; } // listを再生するリストをダブルクリックしますlist.addmouseListener(new Mouseadapter(){public void mouseclicked(mouseevent e){//ダブルクリックif(e.getClickCount()== 2){if(player!= null){player.stop(); }});} //「controllListener」インターフェイスが実装されているため、この方法はメディアプレーヤーから送信されるイベントを処理するために使用されます。 public void controllerupdate(controllerevent e){string box =(string)select.getSelectedItem(); //再生の順序を判断します(e instance of endof mediavent){player.setMediatime(new Time(0)); if( "single loop" .equals(box)){player.start(); } if( "Sequential Play" .equals(box)){nextMusic(); } if( "shutter play" .equals(box)){if(this.musicnames!= null &&!this.musicnames.isempty()){int index =(int)rand.nextint(this.musicnames.size()+1; try {player = manager.createrealizedplayer(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();フラグ= 1; } catch(noplayerexception | can count realizeexception | ioException e1){e1.printstacktrace(); }}}}}}} / *** mp3曲名を取得** @mp3ファイルパス* @song name* / public string getMusicName(string str){int i; for(i = str.length() - 1; i> 0; i-){if(str.Charat(i)== '//')break; } str = str.substring(i + 1、str.length()-4); strを返します。 } / ***次の実装関数* / public void nextmusic(){} / ***以前の実装関数* / public void fortermusic(){} / *** play mp3 file main function* / public void playfile(){try {player = manager = manager.createrealizedplayer(musicnames.get(index).touri()。 player.prefetch(); player.setMediatime(new Time(0.0)); // play player.addcontrollerListener(this); l.setfont(new Font( "宋体"、0,20)); l.settext( "playing:"+this.musicnames.get(index).tostring()); //演奏されている曲を表示しますlist.select(index); player.start(); mythread11tt = new mythread11(); tt.start(); } catch(例外e1){//音楽を再生できない場合は、dealerror()を処理します。戻る; } this.setframe(); } public void setFrame(){countSeCond =(int)player.getDuration()。getSeconds(); Timeslider.setMaximum(CountSecond); Timeslider.setValue(0); newTime = 0; } private void dealerror(){// todo auto-enerated method stub subs musicnames.remove(index); if(-count == index)index = 0; if(count == 0)player = null; else playfile(); }/*** MP3ファイルフィルタリング内部クラス*/class MusicFileChooser拡張jfileChooser {}/*** MP3フィルタリング補助内部クラス***/class myfilefilter extends filefilter {// filefilterは抽象クラスです。文字列の説明; public myfilefilter(){super(); } public myfilefilter(string [] supparr、string description){super(); this.suffarr = soupr; this.descript =説明; } public boolean accept(file f){for(string s:supparr){if(f.getname()。touppercase()。endswith(s)){return true; }} return f.isdirectory(); } public string getDescription(){return this.dection; }}/***ディスプレイ時間の進行状況bar*/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); timeformation.settext( "current time:"+newTime/60+":"+newTime%60+"||"+"合計時間:"+countSecond/60+":"+countSecond%60); }}}}}}}}}} //歌詞を実装するスレッドmythread11 extends thread {public void run(){// dodo auto-fuid methood stub try {lrc lrc = readlrc.readlrc( "traveling light.lrc");歌詞ls = parselrc.parselrc(lrc); PlayTest(LS); } catch(Exception e){}}} static void playtest(歌詞ls)throws strows interruptedexception {tp.setfont(new font( "宋体"、1,20)); tp.setforeground(color.blue); styleddocument doc = tp.getStyledDocument(); SimpleAttributeset Center = new simpleattributeset(); styleconstants.setalignment(center、styleconstants.align_center); // doc.setparagraphattributes(0、doc.getLength()、center、false)を表示します。 tp.settext( "アーティスト:" + ls.getar()); tp.settext( "アルバム:" + ls.getal()); tp.settext( "song:" + ls.getti()); tp.settext( "歌詞制作:" + ls.getby()); for(lyric l:ls.getlyrics()){tp.settext(l.gettxt()); thread.sleep(l.gettimesize()); }}}V.全体的なテスト結果
次のように
プレーヤーの詳細については、「Java Player Function」をクリックして学習してください。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。