Java课程设计音乐播放器_第1页
Java课程设计音乐播放器_第2页
Java课程设计音乐播放器_第3页
Java课程设计音乐播放器_第4页
Java课程设计音乐播放器_第5页
已阅读5页,还剩27页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

程序设计课程设计综合实验音乐播放器班级:指导老师:组员:2014 年 12 月 2 日目录1 程序功能描述 -32 开发环境描述 -33 开发技术介绍 -34 详细设计 -44.1 功能模块划分 -44.2 用户界面设计 -54.2.1 歌曲列表面板 -54.2.2 播放控制面板 -84.2.3 搜索及展示面板 -84.3 播放功能实现 -94.3.1 播放歌曲 -94.3.2 暂停及继续播放 -114.3.3 音量控制 -124.3.4 播放模式 -124.3.5 时间进度条 -134.4 歌词展示实现 -144.4.1 加载歌词文件 -144.4.2 解析歌词文件 -144.4.3 展示歌词 -154.5 搜索网络歌曲资源 -164.5.1 获取 HTML 文本 -164.5.2 解析 HTML 文本 -184.5.3 抓取数据描述 -204.6 网络歌曲资源处理 -204.6.1 歌曲资源的载体 -204.6.2 歌曲资源的操作 -244.7 程序内置的游戏 -264.7.1 2048 -264.7.2 贪吃蛇 -274.7.3 五子棋 -275 程序运行 -286 实验小结 -301 程序功能描述音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。我们以酷狗音乐播放器的操作界面为原型,设计一个实现播放、搜索、下载歌曲的 Java 音乐播放器。此音乐播放器支持音乐格式较少,只有 MID、WMA、MP3。最后,为音乐播放器置入一些游戏,增强播放器的娱乐性。2 开发环境描述IDE:Eclipse(Luna) 、netbeansJDK:1.8图片处理:Photoshop3 开发技术介绍1)Java Sound :Java Sound API 是 Java SE 平台提供底层的处理声音接口。使用 Java Sound API 可以实现各种基于声音的应用,例如声音录制、音乐播放、音乐编辑等。同时其还提供了第三方的扩展接口(SPI) ,实现各种音乐格式的解码与转码。2)Java Zoom :为了支持 MP3 的播放,必须为 JavaSound 扩展 MP3 的 SPI 支持库。开源项目 JavaZoom 正是提供了一个兼容 JavaSound 的纯 Java 解码器。引用:jl1.0.1.jar、mp3spi1.9.5.jar、tritonus_share.jar3)Jaudiotagger :开源项目 Jaudiotagger 提供一个 Java 类库用于编辑音频文件的 tag 信息(附有此音频的歌手、标题、专辑、音轨长度等的信息) 。引用:jaudiotagger-2.0.3.jar4)Jsoup :Jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API。引用:jsoup-1.8.1.jar5)Substance:Swing 自带提供了几种 look and feel 类,然而要设计一个非常精美的 GUI界面,却相当麻烦。使用 java substance 可以很简单地实现。Substance 里面有很多现成的非常漂亮的皮肤。引用:substance.jar4 详细设计4.1 功能模块划分按结构化设计方法,划分出四个功能模块:歌曲列表、播放控制、搜索及音乐库。此四个模块正好对应酷狗用户界面的四部分。酷狗音乐播放器如下:Figure 4.1.1 Kugou程序构建的包main:主入口ui、ui.tool:用户界面及其使用的一些工具类song:包含有歌曲、歌词信息的类player:播放相关的类search:搜索相关的类程序结构图如下:Figure 4.1.2 程序结构图4.2 用户界面设计窗体(Frame):窗体初始大小为 975*670;内容面板(ContentPane)由播放面板(PlayPanel) 、歌曲列表面板(PlayListPanel) 、搜索面板(SearchPanel) 、展示面板(ShowPanel)构成,内容面板的布局采用的是BoxLayout+Box,PlayListPanel 和 SearchPanel 对应都绑定了一个工具条(ButtonToolBar)程序引用了外包 Substance 设计观感4.2.1 歌曲列表面板PlayListPanel 由一个工具条(ButtonToolBar extends JToolBar) 、JPanel 构成,其中 JPanel 采用 CardLayout 布局,JPanel 加入了 3 个歌曲列表面板(SongListPanel extends JScrollPanel) 、1 个应用面板(JScrollPanel)利用工具条的按钮切换显示面板Figure 4.2.1 1 歌曲目录歌曲列表面板(SongListPanel )- 列表的实现: 利用 JTree 实现二级目录。顾名思义,JTree 是树状元件,它由众多节点构成,其中 JTree 需要一个根节点(root) 。关于节点,我们用可派生节点DefaultMutableTreeNode 类(implements TreeNode ) 即这种节点可以做“树干”也可以做“叶子”1)利用一个节点构建一个 JTree,该节点为根节点,即一级节点其实我们要实现的歌曲列表是 3 级节点:根节点、歌曲目录、歌曲文件,这里我们需要隐藏点根节点:tree.setRootVisible(false); 否则我们将看到3 层目录2)根节点加入节点歌曲目录节点(rootNode.add(aNode))第 2 级节点为歌曲目录,可派生歌曲节点:节点(TreeNode)的其中一个构造器是接受 Object 对象 userObjectJTree 是以节点的 toString 方法返回的字符串显示节点,而节点的toString 是由 UserObjcet 的 toString 决定,所以用 String 来构建歌曲目录节点即可3)歌曲目录节点应该有一个计算当前歌曲数目并在目录中显示的方法目录节点计算其的子节点数,并更新到目录名4)歌曲目录节点加入歌曲文件节点加入方法与上面一样。这里每个歌曲(File)是一个节点,不可派生子节点上面说到每个节点在 JTree 显示的字符串,都是由该节点的UserObject.toString()决定,File 的 toString 返回的是该文件的路径,这里我们重写 DefaultMutableTreeNode 的 toString 让它返回歌曲名,所以构造了 SongNode 类(extends DefaultMutableTreeNode)5)弹出菜单再做下面各种操作前,需要一个使用载体,我们利用弹出菜单来实现Figure 4.2.1 2 弹出菜单6)移除歌曲目录因为用户只能选中第 2、3 级节点,这里需要判断当前选中的是第几级节点:获取选中的路径 TreePath path = tree.getSelectionPath()(如果path=null 可以不往下执行) ,通过 path.getPathCount()来判断,第 3 级节点是返回值是 3。如果是第 3 级节点,需获得它的上级节点(即歌曲目录)获取末端组件 DefaultMutableTreeNode node=(DefaultMutableTreeNode) path.getLastPathComponent()获取上级节点 DefaultMutableTreeNode aList=node. getParent()如果是第 2 级节点,可直接获取选中路径的末端组件aList=(DefaultMutableTreeNode)path.getLastPathComponent();这样保证都从歌曲目录节点操作,再按以下次序进行判断:1.如果当前目录是默认目录,不移除,可以通过当前节点在根节点的位置判断 root.getIndex(aList)2.如果当前目录含有歌曲,进行提示是否移除,可以获取该目录节点的子节点数目(getChildCount)或者该节点是否为“叶子” (isLeaf)3.如果当前目录播放着歌曲,终止播放,这里后面再叙述。4.最后移除,aList .removeFromParent();7)清空歌曲目录与移除目录类似,最后清空使用的方法 aList.removeAllChildren();8)删除歌曲可以参考移除目录的实现,需要注意的是,要保证当前选中的节点是第 3级节点,即歌曲文件,是第 2 级节点就不往下操作,删除方法同样是 aSong. removeFromParent()9)获取音频文件通过 JFileChooser 打开个对话框,获取外部文件,并给其安装过滤器。过滤器过滤出的格式为 mid,mp3,wav选择文件分为两种模式,1 获取多个音频文件,2 获取一个文件夹。需设置JFileChooser 的选择模式 setFileSelectionMode(int param)关于第 2 种模式,获取了文件夹后,也要给文件夹进行过滤操作(直接判断或者安装过滤器)这里的过滤器是抽象类 FileFilter,这里定义了一个AFilter(extends FileFilter)最后将这些 files 加入目录节点即可10)鼠标右击选中当前节点给 JTree 注册 MouseListener.,先判断是否鼠标右击,再取与点击点坐标最近的节点 tree.getPathForLocation(int x, int y)应用面板(AppPanel)的实现:应用面板用 JScrollPane,加入多个按钮,一个按钮对应着 Expandsion 包附加的小游戏程序(Expandsion 包导出游戏程序后,被删除)以上,歌曲列表面板界面基本实现,注意每次对 JTree 操作后,请更新JTree 的状态,tree.updateUI(),否则有可能出现 Bug。在我们实现歌曲播放面板操作功能时,与歌曲列表面板进行交互,会再往列表面板添加功能。4.2.2 播放控制面板PlayPanel 由于 Java Swing 布局复杂,我们可以用 Eclipse 的WindowBuilder 或者 netbeans 的 Matisse 可视化构建PlayPanel 由以下组件构成标签:歌曲名(songNameLabel)当前播放进度时间(currentTimeCountLabel)当前播放歌曲总时间(audioTotalTimeLabel)按钮:上一首(backPlay)下一首(frontPlay)播放(Play)静音(voiceControl)下载(download)标记(mark)分享(share)这里用到的按钮,都用到图片;为简化代码,构建一个 IconButton 来定义上面的按钮其它:组合框(JComboBox) mode 控制播放模式滑块条(JSlider) voiceAdjust 控制音量进度条(TimeProgressBar) 这里用到的进度条 timerProgressBar 由于要计时,所以也构建一个 TimeProgressBarFigure 4.2.2 2 播放控制面板4.2.3 搜索及展示面板SearchPanel/ShowPanel 的布局可以参考 PlayListPanel,这里说下折叠面板效果的实现(下图选中的按钮)折叠:SearchPanel/ShowPanel 均设不可见,再设置 Frame 的大小和刷新。展开:给 Frame 注册窗体状态监听器,如果用户按了最大化按钮,会产生一个事件给监听器,这里判断当前窗体的新状态是否为最大化,然后与折叠操作类似。 (也可以不用“最大化”按钮判断,可以设置一个新按钮作事件源)Figure 4.2.3 3 搜索及展示面板4.3 播放功能实现播放面板功能主要由BasicPlayer、HigherPlayer、TimeProgressBar,BasicPlayer 实现的是底层操作(播放、暂停、继续播放、终止、获取音频总时间等) 。HigherPlayer(extends BasicPlayer)处理面板间的交互,面板与BasicPlayer 的交互。TimeProgressBar 绑定了一个 Timer,作计时功能。4.3.1 播放歌曲为实现播放功能,我们这里用了 Java Sound API,它可以实现各种基于声音的应用。Java Sound API 的输入/输出相当于 IO 流,TargetDataLine/SourceDataLine 接口对应输入/输出设备,要得到这个设备的对象,需要设备信息:它是输入还是输出设备,它处理的音频数据格式-即编码格式,不是“WAV/MP3”等文件格式AudioSystem 在此过程中起着工厂类的作用这里先关注 SourceDataLine 如何实现播放功能:BasicPlayer 中关于播放的属性private AudioInputStream audioInputStream;public SourceDataLine sourceDataLine;public URL audio;public Thread playThread;1)获取 audio URL回到 SongListPanel,在 JTree 已注册的 MouseListener 里增加响应mouseClicked 的处理,进行判断,选取第 3 级节点。HigherPlayer 在 load 方法里获取这节点的 userObect(即 File) ,再转成 URL,这里在 HigherPlayer,议保存这个节点,因为节点很容易获取它所在的列表节点。2)从指定的 URL 获取音频输入流及音频编码格式先获取音频输入流 AudioSystem.getAudioInputStream(audio),再获取其音频编码格式 audioInputStream.getFormat()Javax.Sound 默认支持的编码格式有PCM_SIGNED、PCM_

温馨提示

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

评论

0/150

提交评论