基于java的音乐播放器的设计源代码+实验报告_第1页
基于java的音乐播放器的设计源代码+实验报告_第2页
基于java的音乐播放器的设计源代码+实验报告_第3页
基于java的音乐播放器的设计源代码+实验报告_第4页
基于java的音乐播放器的设计源代码+实验报告_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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("关于");menuMode=newJMenu('播放模式");itemOpen=newJMenuItem("添加文件");itemOpens=newJMenuItem("添加文件夹");itemExit=newJMen

10、uItem("退出");itemAbout=newJMenuItem("关于");itemOpen.addActionListener(this);itemOpens.addActionListener(this);itemExit.addActionListener(this);itemAbout.addActionListener(this);itemSequence=newJRadioButtonMenuItem("顺序播放");itemSequence.setSelected(true);itemSingle=newJRadi

11、oButtonMenuItem("单曲循环");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("暂停结束");isPause=false;else(try(playerManager.createPlayer(newMediaLocator("file:"+currentItem.getPath();playe

22、r.addControllerListener(this);/提取媒体内容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直转动条jScrollBar.setValue(p.y);/设置ft直转动条位置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直转动条jScrollBar.setValue(p.y);/设置ft直转动条位置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)(/单曲循环System.out.println("播放结束");p

30、layer.setMediaTime(newTime(0);System.out.println("单曲循环");player.start();elseif(mode=2)(System.out.println("随机播放");rand();return;/当提取媒体的内容结束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的音乐播放器的设计摘要:在信息,技术高速发展的今天,多媒体技术也越来越受到人们的重视。文章对目前使用较多的音乐播放器作出较详细的比较。通过阅读多张文献,分析了一些音乐播放器的功能并考虑了怎样能实现支持更多格式的音乐文件,怎样能满足使用者对播放器的需求。本文主要介绍了一个基于JavaApplet来实现的音乐播放器的设计。并对系统开发中涉及到的关键技术作了探讨,简要分析介绍了Java技术和Applet的工作原理,最后说明系统需要实

33、现的功能。关键词:java;Applet;音乐播放器;前言近年来,听音乐已成为人们生活的一部分,与此同时,音乐播放器以其平易近人的价格也日趋普及,这大大丰富了业余生活也缓解了工作压力,但尚有诸多不足之处有待改进日常生活中,我们在听音时,常感手动操作其是麻烦且想寻找某个音频文件须从头到尾逐个查看这样费时费力很是不便。音乐播放器的实现方法,采用口述音乐文件名的方式即可播放指定歌曲文件,避免了繁琐的查找,亦使其更加人性化,实现了播放器的全自动语音控制。我将来要采用javaApplet的多媒体技术,设计出一个基于javaApplet的音乐播放器。现在电脑上的音乐播放器白花齐放,以WinampFooba

34、r2000,千千静听,酷狗和酷我音乐盒最流行。播放器最重要的参数当届支持的格式了,即使只图个响,也需要有丰富的格式作为后盾。在此方面,千千静听支持多种音频格式,除了常见的MP3WM痔,也支持APEFLAC等无损压缩格式,它一共支持三十多种音频格式,是一个比较全能的播放器。Winamp也支持非常多的格式,但对APE格式的支持需要安装对应插件;除音频格式外,Winamp还支持一些常见的视频格式,这个功能能为用户带来一些方便。Foobar2000支持的格式数量也差不多,但是对APE的支持仍然需要安装插件。不过Foobar2000有一个特色功能,它支持直接读取压缩包里的音乐文件,从电骡上下载的APE完

35、整碟通常都是打包的,如果用Foobar2000的这个功能就可以不解压直接听歌了。相比之下,酷我音乐盒支持的格式就比较单一了,无论是网上搜索还是本地播放歌曲,都仅支持MP痢WMA中格式。酷狗的表现则稍微好点,除了支持MP3ffiWMAL外,还支持APE和FLACa式。而酷我音乐盒,则支持在线M俶频的播放。在本文中我利用java语言设计的音乐播放器的功能跟千千静听,酷狗和酷我音乐盒,WinampFoobar2000的功能差不多,不过利用java设计的音乐播放器支持的音频文件格式比它们丰富一点。如:WAP,AIFF,MIDI,AU,RMF?跨平台功能比较强。1Java技术Java技术已经成为当今In

36、ternet应用开发的核心与主流技术。这一方面是因为java语言具有面向对象,可移植性,强壮性与安全性等优良特征,另一方面也由于java技术对各个层次的分布式应用(包括电器设备的嵌入式计算,桌面计算与企业级计算)都提供了全面系统的方法与技术。因此,目前java已经从单纯的程序设计语言发展成为支撑Internet计算的大技术体系,进入了发展与应用的高级阶段。1. Ijava语言对于都数程序设计语言,其程序运行要么采用编译执行,要么采用解释执行的方式。而java语言的特殊之处在于,程序运行既要经过编译乂要进行解释,如图1-1所示。首先,java程序由编译器进行编译,产生了一种中间代码,称为java

37、字节码(javabytecodes)。字节码是java虚拟机的代码,是与平台无关的中性代码,因此不能在各种计算机平台上直接运行,必须在JVM上运行。Java解释器是JVM的实现,它把字节码转换为底层平台的机器码,使Java程序最终得以运行。无论是Application还是嵌入式在浏览器中的Applet,都需要通过解释器才能运行。图1-1Java语言的运行1.2Java的特征Java是一种”简单”(simple),面向对象(objectoriented),分布式(distributed),解释性(interpreted),健壮(orbust),安全(secure),体系结构中立(architec

38、tureneutral),可移植性(portable),高性能(highperformance),多线程(multithreaded),和动态(dynamic)“的编程语言。1) 简单性:Java语言语法和语义都比较单纯,容易学习和使用。2) 面向对象:作为一种面向对象的编程语f,Java不仅最为“纯洁”,同时,它对面向对象方法的支持最为全面。另外,Java通过抽象类和接口(interface)支持面向的多态性要求,既一个对外接口,多种内部实现。3) 分布式特征:Java实现两种层次上的分布。(1)数据分布支持:通过java的URLt,Java程序可以访问网络撒谎那个的各类信息资源。访问方式完

39、全类似丁本地文件系统。(2)操作分布支持:java通过嵌在WWW面中的Applet(小应用程序)将计算从服务器分布至客户机。Applet由WWW览器在客户端执行,从而避免了网络拥挤,提高了系统效率。4) java的解释性:运行Java程序需要解释器。程序被编译为成为字节代码的Java虚拟机代码。字节代码与机器无关,可以在任何有Java解释器的机器上运行。5) 健壮性:Java提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。6) 安全性:在发分布式环境中,安全性是一个十分重要的问题。Java在语言和运行环境中引入了多级安全措施,其采用的主要安全机制有:(1) 内存分配及布局

40、由Java运行系统规定。(2) 运行系统执行基丁数字签名技术的代码认证,字节码验证与代码访问权限控制的7)体系结构中立:Java语言的设计不是针对某种具体平台结构的。8)可移植性:Java是迄今为止对可移植性支持最佳的编程语言。Java的最大特点是“一次编程,处处运行”09)高性能:Java语言虽然采取字节码解释运行方式,但由于字节码与机器码十分接近,使得字节码到机器码的转换十分快捷。10)多线性:线程是比进程更小,更为经济的并发执行单位,它与进程的主要差异在于它不拥有单独的资源,而是与其他线程共享所届进程的资源。11)动态性:Java的动态性是其面向对象设计的延伸。2JavaApplet概念

41、Applet(小应用程序)是Java与Wetffi结合而引入的一种重要的Java应用形式,它不仅使WetM具有动画,声音,图像和其他特殊效果,更重要的是可以使WetM能够与用户动态进行交互,接收用户的输入,然后根据用户的输入作出不同的反应。它是能够嵌入到HTMIM面中,并能够在浏览器中运行的Java类。Applet自身不能运行,必须嵌入在其他应用程序(例如Web浏览器或JavaAppletviewer)中运行。Applet类提供了从制定的URL获取图像和声音的方法,使Applet可以很方便地实现多媒体功能。当图像数据通过网络下载时,由于受网络带宽等因素的限制,用户在浏览器中看到的一般是渐渐增长

42、的图像显示过程。获取指定URL±的声音数据,返回一个类型为AudioClip的对象,通过该对象可以实现声音演播。2. 1Applet类生成Applet要创建Applet类的子类,一个Applet的运行为框架由Applet类来决定的。Applet类提供了从指定的URL获取图像和声音的方法,使Applet可以很方便地实现多媒体功能的。要编写Applet小应用程序,就必须继承Applet类,并覆盖其中必要的方法。Applet类为applet提供了基本的框架结构是applet和其运行环境之间的标准接口。WebM览器能够自动调用下列方法来控制applet小应用程序的生成和运行:®in

43、it方法©Start方法©stop方法(4destroy方法3设计本系统要用到的Java关键技术3.1在Applet中播放声音的方法和步骤在Java.Applet包中的Applet类和AudioClip接口提供了播放声音的基本支持。以前计算机存储声音文件的格式有许多,目前Java只支持一种声音文件格式有.au,.mid,.wav等。对于其他格式的文件,可以用相应地工具软件将它们转换为.au或.mid等Java支持的文件。在Applet中播放声音文件有两种方法:(1)在Java的API中,Applet类提供了一个方法play(),它可以直接根据URL®址来播放声音。这个方法指定如下:Publicvoidplay(URLurl);Publicvoidp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论