




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、主類MUSICPLAYEimportjava.util.*;importjavax.swing.JSlider;importjava.awt.BorderLayout;importjava.awt.FlowLayout;importjava.awt.Point;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.io.BufferedOutputStream
2、;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.io.Serializable;importjavax.media.ControllerEvent;importjavax.media.ControllerLis
3、tener;importjavax.media.EndOfMediaEvent;importjavax.media.Manager;importjavax.media.MediaLocator;importjavax.media.NoPlayerException;importjavax.media.Player;importjavax.media.PrefetchCompleteEvent;importjavax.media.Time;importjavax.swing.ButtonGroup;importjavax.swing.DefaultListModel;importjavax.sw
4、ing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JFileChooser;importjavax.swing.JFrame;importjavax.swing.JList;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JRadioButtonMenuItem;importj
5、avax.swing.JScrollBar;importjavax.swing.JScrollPane;importjavax.swing.filechooser.FileNameExtensionFilter;publicclassMusicPlayerimplementsActionListener,Serializable,ControllerListenerprivatestaticfinallongserialVersionUID=1L;privateJFrameframe=null;privateJPanelcontrolPanel=null;privateJButtonbtnPl
6、ay=null;privateJButtonbtnPre=null;privateJButtonbtnNext=null;privateJScrollPanelistPane=null;privateJListlist=null;privateDefaultListModellistModel=null;privateJMenuBarmenubar=null;privateJMenumenuFile=null,menuAbout=null,menuMode=null;privateJMenuItemitemOpen,itemOpens,itemExit,itemAbout;privateJRa
7、dioButtonMenuItemitemSingle,itemSequence,itemRandom;privateListItemcurrentItem=null;privatestaticPlayerplayer=null;privatebooleanisPause=false;privateintmode;privateintcurrentIndex;privateImageIconiconPlay=newImageIcon("d:1.jpg”);privateImageIconiconPre=newImageIcon("d:3.jpg”);privateImage
8、IconiconNext=newImageIcon("d:2.jpg”);privateImageIconiconPause=newImageIcon("d:4.jpg”);publicstaticvoidmain(Stringargs)newMusicPlayer();publicMusicPlayer()init();publicvoidinit()frame=newJFrame();frame.setTitle("音樂播放器");frame.setSize(400,300);frame.setResizable(false);frame.setLo
9、cationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);menubar=newJMenuBar();menuFile=newJMenu("文件");menuAbout=newJMenu("關(guān)于");menuMode=newJMenu('播放模式");itemOpen=newJMenuItem("添加文件");itemOpens=newJMenuItem("添加文件夾");itemExit=newJMen
10、uItem("退出");itemAbout=newJMenuItem("關(guān)于");itemOpen.addActionListener(this);itemOpens.addActionListener(this);itemExit.addActionListener(this);itemAbout.addActionListener(this);itemSequence=newJRadioButtonMenuItem("順序播放");itemSequence.setSelected(true);itemSingle=newJRadi
11、oButtonMenuItem("單曲循環(huán)");itemSequence.addActionListener(this);itemRandom=newJRadioButtonMenuItem("隨機播放");itemRandom.addActionListener(this);itemSingle.addActionListener(this);ButtonGroupbg=newButtonGroup();bg.add(itemRandom);bg.add(itemSequence);bg.add(itemSingle);menuFile.add(ite
12、mOpen);menuFile.add(itemOpens);menuFile.add(itemExit);menuAbout.add(itemAbout);menuMode.add(itemSequence);menuMode.add(itemSingle);menuMode.add(itemRandom);menubar.add(menuFile);menubar.add(menuAbout);menubar.add(menuMode);frame.setJMenuBar(menubar);frame.setLayout(newBorderLayout();controlPanel=new
13、JPanel();controlPanel.setLayout(newFlowLayout();btnPlay=newJButton(iconPlay);btnPre=newJButton(iconPre);btnNext=newJButton(iconNext);btnPlay.addActionListener(this);btnPre.addActionListener(this);btnNext.addActionListener(this);controlPanel.add(btnPre);controlPanel.add(btnPlay);controlPanel.add(btnN
14、ext);listPane=newJScrollPane();listModel=load();list=newJList(listModel);if(list.getSelectedIndex()=-1&&listModel.size()>0)(currentItem=(ListItem)listModel.get(0);list.setSelectedIndex(0);currentIndex=0;listPane.getViewport().add(list);list.addMouseListener(newMouseAdapter()(publicvoidmou
15、seClicked(MouseEvente)(if(e.getClickCount()=2)(if(player!=null)(player.close();btnPlay.setIcon(iconPlay);currentIndex=list.locationToIndex(e.getPoint();currentItem=(ListItem)listModel.get(currentIndex);list.setSelectedIndex(currentIndex);play(););frame.setLayout(newBorderLayout();frame.add(controlPa
16、nel,BorderLayout.NORTH);frame.add(listPane,BorderLayout.CENTER);frame.setVisible(true);publicvoidactionPerformed(ActionEvente)(if(e.getSource()=itemOpen)(/addfilesJFileChooserjfc=newJFileChooser();FileNameExtensionFilterfilter=newFileNameExtensionFilter(”音樂文件","mp3","wav");j
17、fc.setFileFilter(filter);jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);jfc.setMultiSelectionEnabled(true);if(jfc.showOpenDialog(frame)=JFileChooser.APPROVE_OPTION)Filefiles=jfc.getSelectedFiles();for(Filef:files)(Listitemitem=newListItem(f.getName(),f.getAbsolutePath();listModel.addElement(item)
18、;elseif(e.getSource()=itemOpens)(/addfilesinadirectoryJFileChooserjfc=newJFileChooser();jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);if(jfc.showOpenDialog(frame)=JFileChooser.APPROVE_OPTION)_Filedirectory=jfc.getSelectedFile();Filefiles=directory.listFiles(newjava.io.FileFilter()publicboo
19、leanaccept(Filef)if(f.getName().toLowerCase().endsWith(".mp3")|f.getName().toLowerCase().endsWith(".wav")returntrue;returnfalse;);for(Filefile:files)ListItemitem=newListItem(file.getName(),file.getAbsolutePath();listModel.addElement(item);save(listModel);elseif(e.getSource()=item
20、Exit)System.exit(O);elseif(e.getSource()=itemAbout)JOptionPane.showMessageDialog(frame,"作者:陸鑫");elseif(e.getSource()=btnPlay)(/playorpausepiay();elseif(e.getSource()=btnPre)(pre();elseif(e.getSource()=btnNext)(/nextmusicnext();elseif(e.getSource()=itemSequence)(mode=0;elseif(e.getSource()=
21、itemSingle)(mode=1;elseif(e.getSource()=itemRandom)(mode=2;/playcontrol/*播放*/publicvoidplay()(if(btnPlay.getIcon()=iconPlay)(if(isPause)(player.start();System.out.println("暫停結(jié)束");isPause=false;else(try(playerManager.createPlayer(newMediaLocator("file:"+currentItem.getPath();playe
22、r.addControllerListener(this);/提取媒體內(nèi)容player.prefetch();catch(NoPlayerExceptione1)e1.printStackTrace();catch(IOExceptione1)e1.printStackTrace();btnPlay.setIcon(iconPause);elseplayer.stop();isPause=true;System.out.println("暫停");btnPlay.setIcon(iconPlay);publicvoidnext()if(currentIndex=listMo
23、del.getSize()-1)currentIndex=0;elsecurrentIndex+;currentItem=(ListItem)listModel.get(currentIndex);list.setSelectedIndex(currentIndex);Pointp=list.indexToLocation(currentIndex);JScrollBarjScrollBar=listPane.getVerticalScrollBar();/獲得ft直轉(zhuǎn)動條jScrollBar.setValue(p.y);/設(shè)置ft直轉(zhuǎn)動條位置btnPlay.setIcon(iconPlay)
24、;if(player!=null)player.close();isPause=false;play();publicvoidrand()(list.setSelectedIndex(int)(Math.random()%(listModel.getSize()-1);Pointp=list.indexToLocation(int)(Math.random()%(listModel.getSize()-1);JScrollBarjScrollBar=listPane.getVerticalScrollBar();jScrollBar.setValue(p.y);btnPlay.setIcon(
25、iconPlay);if(player!=null)player.close();isPause=false;play();publicvoidpre()(if(currentIndex=0)(currentIndex=listModel.getSize()-1;else(currentIndex-;currentItem=(ListItem)listModel.get(currentIndex);list.setSelectedIndex(currentIndex);Pointp=list.indexToLocation(currentIndex);JScrollBarjScrollBar=
26、listPane.getVerticalScrollBar();/獲得ft直轉(zhuǎn)動條jScrollBar.setValue(p.y);/設(shè)置ft直轉(zhuǎn)動條位置btnPlay.setIcon(iconPlay);if(player!=null)(player.close();isPause=false;play();/endplaycontrolpublicDefaultListModelload()(Filefile=newFile("list.lst");DefaultListModeldlm=newDefaultListModel();if(file.exists()try
27、(ObjectInputStreamois=newObjectInputStream(newFilelnputStream(file);Integersize=(Integer)ois.readObject();if(size!=0)(for(inti=0;i<size;i+)(ListItemitem=(ListItem)ois.readObject();dlm.addElement(item);ois.close();returndlm;catch(FileNotFoundExceptione)(e.printStackTrace();catch(IOExceptione)(e.pr
28、intStackTrace();catch(ClassNotFoundExceptione)(e.printStackTrace();returndlm;publicvoidsave(DefaultListModeldlm)(try(ObjectOutputStreamoos=newObjectOutputStream(newBufferedOutputStream(newFileOutputStream("list.lst");Integersize=dlm.getSize();oos.writeObject(size);for(inti=0;i<size;i+)(
29、ListItemitem=(ListItem)dlm.get(i);oos.writeObject(item);oos.close();catch(Exceptione)(e.printStackTrace();publicvoidcontrollerUpdate(ControllerEvente)(if(einstanceofEndOfMediaEvent)(if(mode=0)(/順序播放System.out.println("順序播放");next();elseif(mode=1)(/單曲循環(huán)System.out.println("播放結(jié)束");p
30、layer.setMediaTime(newTime(0);System.out.println("單曲循環(huán)");player.start();elseif(mode=2)(System.out.println("隨機播放");rand();return;/當提取媒體的內(nèi)容結(jié)束if(einstanceofPrefetchCompleteEvent)(System.out.println("開始播放");player.start();return;LISTITEM類importjava.io.Serializable;publiccla
31、ssListItemimplementsSerializable(privatestaticfinallongserialVersionUID=1L;privateStringname;privateStringpath;publicListItem()publicListItem(Stringname,Stringpath)=name;this.path=path;publicStringgetName()returnname;publicvoidsetName(Stringname)=name;publicStringgetPath()returnpat
32、h;publicvoidsetPath(Stringpath)this.path=path;publicStringtoString()returnname;基于java的音樂播放器的設(shè)計摘要:在信息,技術(shù)高速發(fā)展的今天,多媒體技術(shù)也越來越受到人們的重視。文章對目前使用較多的音樂播放器作出較詳細的比較。通過閱讀多張文獻,分析了一些音樂播放器的功能并考慮了怎樣能實現(xiàn)支持更多格式的音樂文件,怎樣能滿足使用者對播放器的需求。本文主要介紹了一個基于JavaApplet來實現(xiàn)的音樂播放器的設(shè)計。并對系統(tǒng)開發(fā)中涉及到的關(guān)鍵技術(shù)作了探討,簡要分析介紹了Java技術(shù)和Applet的工作原理,最后說明系統(tǒng)需要實
33、現(xiàn)的功能。關(guān)鍵詞:java;Applet;音樂播放器;前言近年來,聽音樂已成為人們生活的一部分,與此同時,音樂播放器以其平易近人的價格也日趨普及,這大大豐富了業(yè)余生活也緩解了工作壓力,但尚有諸多不足之處有待改進日常生活中,我們在聽音時,常感手動操作其是麻煩且想尋找某個音頻文件須從頭到尾逐個查看這樣費時費力很是不便。音樂播放器的實現(xiàn)方法,采用口述音樂文件名的方式即可播放指定歌曲文件,避免了繁瑣的查找,亦使其更加人性化,實現(xiàn)了播放器的全自動語音控制。我將來要采用javaApplet的多媒體技術(shù),設(shè)計出一個基于javaApplet的音樂播放器。現(xiàn)在電腦上的音樂播放器白花齊放,以WinampFooba
34、r2000,千千靜聽,酷狗和酷我音樂盒最流行。播放器最重要的參數(shù)當屆支持的格式了,即使只圖個響,也需要有豐富的格式作為后盾。在此方面,千千靜聽支持多種音頻格式,除了常見的MP3WM痔,也支持APEFLAC等無損壓縮格式,它一共支持三十多種音頻格式,是一個比較全能的播放器。Winamp也支持非常多的格式,但對APE格式的支持需要安裝對應(yīng)插件;除音頻格式外,Winamp還支持一些常見的視頻格式,這個功能能為用戶帶來一些方便。Foobar2000支持的格式數(shù)量也差不多,但是對APE的支持仍然需要安裝插件。不過Foobar2000有一個特色功能,它支持直接讀取壓縮包里的音樂文件,從電騾上下載的APE完
35、整碟通常都是打包的,如果用Foobar2000的這個功能就可以不解壓直接聽歌了。相比之下,酷我音樂盒支持的格式就比較單一了,無論是網(wǎng)上搜索還是本地播放歌曲,都僅支持MP痢WMA中格式。酷狗的表現(xiàn)則稍微好點,除了支持MP3ffiWMAL外,還支持APE和FLACa式。而酷我音樂盒,則支持在線M俶頻的播放。在本文中我利用java語言設(shè)計的音樂播放器的功能跟千千靜聽,酷狗和酷我音樂盒,WinampFoobar2000的功能差不多,不過利用java設(shè)計的音樂播放器支持的音頻文件格式比它們豐富一點。如:WAP,AIFF,MIDI,AU,RMF?跨平臺功能比較強。1Java技術(shù)Java技術(shù)已經(jīng)成為當今In
36、ternet應(yīng)用開發(fā)的核心與主流技術(shù)。這一方面是因為java語言具有面向?qū)ο?,可移植性,強壯性與安全性等優(yōu)良特征,另一方面也由于java技術(shù)對各個層次的分布式應(yīng)用(包括電器設(shè)備的嵌入式計算,桌面計算與企業(yè)級計算)都提供了全面系統(tǒng)的方法與技術(shù)。因此,目前java已經(jīng)從單純的程序設(shè)計語言發(fā)展成為支撐Internet計算的大技術(shù)體系,進入了發(fā)展與應(yīng)用的高級階段。1. Ijava語言對于都數(shù)程序設(shè)計語言,其程序運行要么采用編譯執(zhí)行,要么采用解釋執(zhí)行的方式。而java語言的特殊之處在于,程序運行既要經(jīng)過編譯乂要進行解釋,如圖1-1所示。首先,java程序由編譯器進行編譯,產(chǎn)生了一種中間代碼,稱為java
37、字節(jié)碼(javabytecodes)。字節(jié)碼是java虛擬機的代碼,是與平臺無關(guān)的中性代碼,因此不能在各種計算機平臺上直接運行,必須在JVM上運行。Java解釋器是JVM的實現(xiàn),它把字節(jié)碼轉(zhuǎn)換為底層平臺的機器碼,使Java程序最終得以運行。無論是Application還是嵌入式在瀏覽器中的Applet,都需要通過解釋器才能運行。圖1-1Java語言的運行1.2Java的特征Java是一種”簡單”(simple),面向?qū)ο?objectoriented),分布式(distributed),解釋性(interpreted),健壯(orbust),安全(secure),體系結(jié)構(gòu)中立(architec
38、tureneutral),可移植性(portable),高性能(highperformance),多線程(multithreaded),和動態(tài)(dynamic)“的編程語言。1) 簡單性:Java語言語法和語義都比較單純,容易學習和使用。2) 面向?qū)ο螅鹤鳛橐环N面向?qū)ο蟮木幊陶Zf,Java不僅最為“純潔”,同時,它對面向?qū)ο蠓椒ǖ闹С肿顬槿妗A硗?Java通過抽象類和接口(interface)支持面向的多態(tài)性要求,既一個對外接口,多種內(nèi)部實現(xiàn)。3) 分布式特征:Java實現(xiàn)兩種層次上的分布。(1)數(shù)據(jù)分布支持:通過java的URLt,Java程序可以訪問網(wǎng)絡(luò)撒謊那個的各類信息資源。訪問方式完
39、全類似丁本地文件系統(tǒng)。(2)操作分布支持:java通過嵌在WWW面中的Applet(小應(yīng)用程序)將計算從服務(wù)器分布至客戶機。Applet由WWW覽器在客戶端執(zhí)行,從而避免了網(wǎng)絡(luò)擁擠,提高了系統(tǒng)效率。4) java的解釋性:運行Java程序需要解釋器。程序被編譯為成為字節(jié)代碼的Java虛擬機代碼。字節(jié)代碼與機器無關(guān),可以在任何有Java解釋器的機器上運行。5) 健壯性:Java提供自動垃圾收集來進行內(nèi)存管理,防止程序員在管理內(nèi)存時容易產(chǎn)生的錯誤。6) 安全性:在發(fā)分布式環(huán)境中,安全性是一個十分重要的問題。Java在語言和運行環(huán)境中引入了多級安全措施,其采用的主要安全機制有:(1) 內(nèi)存分配及布局
40、由Java運行系統(tǒng)規(guī)定。(2) 運行系統(tǒng)執(zhí)行基丁數(shù)字簽名技術(shù)的代碼認證,字節(jié)碼驗證與代碼訪問權(quán)限控制的7)體系結(jié)構(gòu)中立:Java語言的設(shè)計不是針對某種具體平臺結(jié)構(gòu)的。8)可移植性:Java是迄今為止對可移植性支持最佳的編程語言。Java的最大特點是“一次編程,處處運行”09)高性能:Java語言雖然采取字節(jié)碼解釋運行方式,但由于字節(jié)碼與機器碼十分接近,使得字節(jié)碼到機器碼的轉(zhuǎn)換十分快捷。10)多線性:線程是比進程更小,更為經(jīng)濟的并發(fā)執(zhí)行單位,它與進程的主要差異在于它不擁有單獨的資源,而是與其他線程共享所屆進程的資源。11)動態(tài)性:Java的動態(tài)性是其面向?qū)ο笤O(shè)計的延伸。2JavaApplet概念
41、Applet(小應(yīng)用程序)是Java與Wetffi結(jié)合而引入的一種重要的Java應(yīng)用形式,它不僅使WetM具有動畫,聲音,圖像和其他特殊效果,更重要的是可以使WetM能夠與用戶動態(tài)進行交互,接收用戶的輸入,然后根據(jù)用戶的輸入作出不同的反應(yīng)。它是能夠嵌入到HTMIM面中,并能夠在瀏覽器中運行的Java類。Applet自身不能運行,必須嵌入在其他應(yīng)用程序(例如Web瀏覽器或JavaAppletviewer)中運行。Applet類提供了從制定的URL獲取圖像和聲音的方法,使Applet可以很方便地實現(xiàn)多媒體功能。當圖像數(shù)據(jù)通過網(wǎng)絡(luò)下載時,由于受網(wǎng)絡(luò)帶寬等因素的限制,用戶在瀏覽器中看到的一般是漸漸增長
42、的圖像顯示過程。獲取指定URL±的聲音數(shù)據(jù),返回一個類型為AudioClip的對象,通過該對象可以實現(xiàn)聲音演播。2. 1Applet類生成Applet要創(chuàng)建Applet類的子類,一個Applet的運行為框架由Applet類來決定的。Applet類提供了從指定的URL獲取圖像和聲音的方法,使Applet可以很方便地實現(xiàn)多媒體功能的。要編寫Applet小應(yīng)用程序,就必須繼承Applet類,并覆蓋其中必要的方法。Applet類為applet提供了基本的框架結(jié)構(gòu)是applet和其運行環(huán)境之間的標準接口。WebM覽器能夠自動調(diào)用下列方法來控制applet小應(yīng)用程序的生成和運行:®in
43、it方法©Start方法©stop方法(4destroy方法3設(shè)計本系統(tǒng)要用到的Java關(guān)鍵技術(shù)3.1在Applet中播放聲音的方法和步驟在Java.Applet包中的Applet類和AudioClip接口提供了播放聲音的基本支持。以前計算機存儲聲音文件的格式有許多,目前Java只支持一種聲音文件格式有.au,.mid,.wav等。對于其他格式的文件,可以用相應(yīng)地工具軟件將它們轉(zhuǎn)換為.au或.mid等Java支持的文件。在Applet中播放聲音文件有兩種方法:(1)在Java的API中,Applet類提供了一個方法play(),它可以直接根據(jù)URL®址來播放聲音。這個方法指定如下:Publicvoidplay(URLurl);Publicvoidp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年部編版語文五年級下冊第一二單元復(fù)習題及答案
- 學術(shù)研究成果及專利證書證明(5篇)
- 年度銷售數(shù)據(jù)對比表格
- 品牌營銷咨詢服務(wù)合作協(xié)議細則
- 學校與社區(qū)互動對教育生態(tài)系統(tǒng)的優(yōu)化
- 《初中數(shù)學代數(shù)方程求解技巧教學教案》
- 小學課程改革與教學創(chuàng)新
- 鐵路運輸安全管理規(guī)定匯編
- 《生物學知識講解:小學科學生物知識教案》
- 個人承包協(xié)議協(xié)議
- 《員工執(zhí)行力培訓》課件
- 病區(qū)消防應(yīng)急演練
- 化妝品監(jiān)督管理條例培訓2024
- 2024年度中國第三方支付行業(yè)研究報告
- 2024年安全員C3證考試題庫及解析
- 數(shù)字經(jīng)濟學 課件全套 第1-15章 數(shù)字經(jīng)濟學基礎(chǔ) - 數(shù)字經(jīng)濟監(jiān)管
- 2024年山東省青島市中考地理試題卷(含答案及解析)+2023年中考地理及答案
- 《籃球原地運球》教案 (共三篇)
- 《手衛(wèi)生知識培訓》培訓課件
- 倉庫作業(yè)風險防控措施計劃
- 智能制造工程專業(yè)專業(yè)課教學大綱匯編
評論
0/150
提交評論