java音乐播放器 文档.docx
- 文档编号:10317857
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:22
- 大小:1.51MB
java音乐播放器 文档.docx
《java音乐播放器 文档.docx》由会员分享,可在线阅读,更多相关《java音乐播放器 文档.docx(22页珍藏版)》请在冰豆网上搜索。
java音乐播放器文档
基于java的音乐播放器
系统需求分析规格说明书
二○一三年十一月
1引言
1.1编写目的
本文档首先给出了整个软件系统的整体网络结构和功能结构的概貌,从总体架构上给出整个系统的轮廓,然后又对功能需求、性能需求和其它非功能性需求进行了详细的描述。
这些文字和图形都为了本文档能详细准确地描述用户的需求,同时也为用户更容易地理解这些需求的描述创造了条件。
本文档用于描述“基于java的音乐播放器”项目的系统需求,为该项目概要设计,详细设计和测试用例的设计依据。
同时,本文档也是用户确定软件功能需求的主要依据。
1.2项目背景
●“基于java的音乐播放器”是我们小组自主开发的一款音频解码播放器,通过前续java以及面向对象的学习,我们已经有了一定的编程基础并能熟练运用进行实际编程。
●随着中国经济的快速发展,人民的生活水平日益的提高,大家越来越注重自己的娱乐方式的多样性和趣味性,无疑,MP3播放器的诞生解决了这一难题。
数码消费品工艺水平的日益改进和劳动生产率的提高,创造出了越来越多的高性价比MP3播放器,闲暇之余的听歌放松已成逐渐成为我们生活当中不可或缺的一部分。
对于可预见的旺盛的需求使得我们有了开发一款MP3音乐播放器的想法,后续诞生了我们这个项目。
1.3预期的读者和阅读建议
本文档的主要内容共分4部分:
综合描述、系统特性、和非功能性需求和外部接口描述。
综合描述部分主要对软件的整体结构进行了大致的介绍;系统特性部分对软件的功能需求进行了详细描述,是本文的主要部分;非功能性需求部分对非功能需求进行了详细的描述;外部接口需求部分对用户界面、软件接口等进行了描述。
2.系统结构图和功能表
功能类别
子功能
子功能
播放列表
播放列表菜单
更新列表
退出程序
歌曲菜单
播放音乐
下载音乐
播放界面
播放
播放歌曲->启动服务->时间更新
暂停/继续
暂停歌曲->启动服务->时间暂停
停止
停止歌曲->启动服务->时间停止
上一首
播放列表索引变化->寻找上一个ID
下一首
播放列表索引变化->寻找下一个ID
播放界面菜单
设置
添加音乐
隐藏界面
2.1系统功能表(表2.1)和系统功能结构图(图2.2)
表2.1系统功能表
图2.2系统功能结构图
3系统需求分析
根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述。
系统的功能需求,我们分成三部分来概括,即播放器的基本控制需求,歌词及图片显示需求和播放器友好性需求。
以下分别描述:
3.1播放器的基本控制需求
基本控制需求的UML图:
3.1.1音量控制
用例名称:
音量控制
参与者:
用户
目标:
使得用户可以调节播放器的音量
前置条件:
播放器正在运行
基本事件流:
1.用户右或左滑动音量控制按钮
2.播放器的音量增大或降低,
3.1.2静音控制
用例名称:
静音控制
参与者:
用户
目标:
使得用户可以快速将播放器调到无声状态
前置条件:
播放器正在运行
基本事件流:
1.用户点击静音控制按钮
2.播放器的音量立即降到最低,即无声状态
3.1.3上一首/下一首控制
用例名称:
上一首/下一首
参与者:
用户
目标:
使得用户可以选择播放播放列表中上一首/下一首歌曲
前置条件:
播放器正在运行,当前播放列表有上一首/下一首歌曲
基本事件流:
1.用户单击“下一首/下一首”按钮
2.播放器将播放播放列表中的上一首/下一首歌曲
3.1.4播放控制
用例名称:
播放
参与者:
用户
目标:
使得用户可以播放在播放播放列表中选中的歌曲
前置条件:
播放器正在运行
基本事件流:
1.用户单击“播放”按钮
2.播放器将播放播放列表中当前的歌曲
3.1.5暂停控制
用例名称:
暂停
参与者:
用户
目标:
使得用户可以暂停正在播放的歌曲
前置条件:
歌曲正在播放
基本事件流:
1.用户点击暂停按钮
2.正在播放的歌曲暂停播放,
3.1.6播放文件控制
用例名称:
播放文件
参与者:
用户
目标:
使得用户可以播放本地计算机的歌曲文件
前置条件:
播放器正在运行
基本事件流:
1.用户点击播放文件的按钮
2.用户选择要播放的歌曲文件
后置条件:
将用户选择要播放的歌曲文件添加到当前播放列表,并播放歌曲文件
3.1.7播放歌曲文件控制
用例名称:
播放歌曲文件
参与者:
用户
目标:
使得用户可以选择播放播放列表中的歌曲文件
前置条件:
播放器正在运行,播放列表有歌曲文件
基本事件流:
1.用户双击或右击要播放的歌曲文件
后置条件:
播放选定的歌曲文件
3.1.8添加歌曲文件控制
用例名称:
添加歌曲文件
参与者:
用户
目标:
使得用户可以添加本地计算机的音乐文件或文件夹
前置条件:
播放器正在运行,并且本地计算机存储有音乐文件
基本事件流:
1.用户单击【添加歌曲】按钮
2.系统弹出一个“选择文件/文件夹”对话框,
3.用户选定要添加的文件或文件夹并按“确定”
4文件或文件夹被添加到播放列表
后置条件:
播放列表显示了添加的音乐文件
3.1.9删除歌曲文件控制
用例名称:
删除歌曲文件
参与者:
用户
目标:
使得用户可以删除播放列表中的音乐文件
前置条件:
播放器正在运行,并且播放列表中有要删除的音乐文件
基本事件流:
1.用户右击选定要删除的音乐文件
2.用户选择“删除”
3.文件在播放列表中被删除
后置条件:
播放列表删除了被选定的音乐文件
3.2播放器友好性需求
3.2.1视觉外观显示
用例名称:
视觉外观显示
参与者:
系统或用户
目标:
使得播放器根据歌曲文件的特性,通过视觉外观来动态显示
前置条件:
播放器正在播放歌曲文件
基本事件流:
1.系统读取要播放的歌曲文件的特性,
2接着调用一个视觉外观显示组件来动态显示出来
后置条件:
视觉外观显示组件来动态显示播放中的歌曲文件
3.2.2播放状态显示
用例名称:
播放状态显示
参与者:
系统
目标:
使得播放器能显示播放器现时的状态,是播放还是暂停中
前置条件:
播放器已打开
基本事件流:
1.系统读取播放器状态,
2通过文字标签显示出来
后置条件:
文字标签将播放器状态显示出来
3.3歌词及背景显示
3.3.1歌词显示
用例名称:
歌词显示
参与者:
系统
目标:
播放器播放音乐时能自动检索出相应歌词并根据歌曲进度显示出来
前置条件:
播放器已打开
基本事件流:
1.播放器打开音乐文件
2通过音乐文件名称检索相应的歌词文件
3若存在歌词文件就同步显示,不存在则给出相应提示
后置条件:
文字标签将播放器状态显示出来
3.3.2歌曲背景显示
用例名称:
歌曲背景图片显示
参与者:
系统
目标:
播放器播放音乐时能自动检索出相应背景图片并根据显示出来
前置条件:
播放器已打开
基本事件流:
1.播放器打开音乐文件
2通过音乐文件名称检索相应的背景图片文件
3若存在图片文件就显示,不存在则使用系统默认图片文件
后置条件:
文字标签将播放器状态显示出来
4系统类图
5关键代码
5.1Lrc歌词处理
5.2歌词展示
classLrcListenerimplementsActionListener{
privateinti=0;
privatelongnextMill=0;
privateStringmessage="";
publicvoidactionPerformed(ActionEvente){
for(intj=0;j nextMill=times.get(j); if(currentTime nextMill=times.get(j-1); i=j-1; break; } } currentTime=currentTime+10; if(currentTime>nextMill){ if(message.equals(messages.get(i))){ }else{ for(inta=0;a } message=messages.get(i); System.out.println(message); for(intindex=0;index<5;index++){ if(index==0){ l_texts[(currentLocation+index)%9].setFont(newjava.awt.Font("Dialog",0,22)); l_texts[(currentLocation+index)%9].setForeground(Color.yellow); l_texts[(currentLocation+index)%9].setText(messages.get(i+index)); l_text[currentLoca+index].setFont(newjava.awt.Font("Dialog",0,22)); l_text[currentLoca+index].setForeground(Color.red); l_text[currentLoca+index].setText(messages.get(i+index)); if(i>0){ l_text[0].setFont(newjava.awt.Font("Dialog",0,16)); l_text[0].setForeground(Color.white); l_text[0].setText(messages.get(i-1)); } if(i<(messages.size()-1)){ l_text[2].setFont(newjava.awt.Font("Dialog",0,16)); l_text[2].setForeground(Color.white); l_text[2].setText(messages.get(i+1)); } }else{ if(i+index l_texts[(currentLocation+index)%9].setFont(newjava.awt.Font("Dialog",0,16)); l_texts[(currentLocation+index)%9].setForeground(Color.white); l_texts[(currentLocation+index)%9].setText(messages.get(i+index)); }else{ l_texts[(currentLocation+index)%9].setText(""); } } } for(intc=1;c<5;c++){ if(c-1 if(currentLocation-c>=0){ l_texts[currentLocation-c].setFont(newjava.awt.Font("Dialog",0,16)); l_texts[currentLocation-c].setForeground(Color.white); l_texts[currentLocation-c].setText(messages.get(i-c)); }else{ l_texts[currentLocation-c+9].setFont(newjava.awt.Font("Dialog",0,16)); l_texts[currentLocation-c+9].setForeground(Color.white); l_texts[currentLocation-c+9].setText(messages.get(i-c)); } } } for(intje=0;je<9;je++){ if(currentLocation>=4){ l_texts[(currentLocation-4+je)%9].setBounds(20,20+je*L_WIDTH,270,20); }else{ l_texts[(currentLocation+9-4+je)%9].setBounds(20,20+je*L_WIDTH,270,20); } } } } } } 5.3背景显示 classPanel1extendsJPanel{ BorderLayoutborderLayout1=newBorderLayout(); publicstaticintcurrentImage=0; privateImageIconimage1=null; privateImageIconimage2=null; privateImageIconimage3=null; privateintindex=0; publicPanel1(inttype){ try{ this.currentImage=type; jbInit(); }catch(Exceptionexception){ exception.printStackTrace(); } } privatevoidjbInit()throwsException{ newThread(newPaintThread()).start(); this.setLayout(null); } publicstaticvoidsetImage(inta){ currentImage=a; } protectedvoidpaintComponent(Graphicsg){ setOpaque(false); super.paintComponent(g); if(currentImage==3){ this.image1=newImageIcon("ee.png"); this.image2=newImageIcon("2.png"); this.image3=newImageIcon("3.png"); }elseif(currentImage==2){ this.image1=newImageIcon("4.png"); this.image2=newImageIcon("5.png"); this.image3=newImageIcon("6.png"); }elseif(currentImage==1){ this.image1=newImageIcon("7.png"); this.image2=newImageIcon("8.png"); this.image3=newImageIcon("9.png"); }else{ this.image1=newImageIcon("b1.png"); this.image2=newImageIcon("b2.png"); this.image3=newImageIcon("b3.png"); } Dimensiond=getSize(); if(index==0){ for(intx=0;x for(inty=0;y g.drawImage(image1.getImage(),x,y,null,null); }elseif(index==1){ for(intx=0;x for(inty=0;y g.drawImage(image2.getImage(),x,y,null,null); }elseif(index==2){ for(intx=0;x for(inty=0;y g.drawImage(image3.getImage(),x,y,null,null); } } privateclassPaintThreadimplementsRunnable{ publicvoidrun(){ while(true){ try{ Thread.sleep(5000); index=(index+1)%3; repaint(); }catch(InterruptedExceptione){ e.printStackTrace(); } } } } } 6程序截图 6.1程序启动界面 6.2显示脉冲界面 6.3显示歌词界面 7性能需求 7.1数据精确度 我们开发的是音乐播放器,音乐播放器解码的时候本身就需要很高的精确度才行,不然会出现乱码或有损音质的情况发生。 失真控制循环和非归一化量化控制循环是量化编码循环过程,它通过量化减少各MDCT系数的精度,使编码比特数得以降低。 不同系数采用不同的量化阶,从耳敏感的频率量化精度高,不敏感的频率量化精度低,量化误差则不会被人耳察觉。 7.2时间特性 音乐播放器的响应时间是需要严格把关控制的,太长则会影响用户体验,不利于流畅的切换,我们的播放器需要很短的时间内响应用户的请求并作出高效的应答。 具体时间要求如下: (1)当要求歌曲播放时,软件响应时间最长不能超过2秒。 (2)当要求歌曲暂停时,软件响应时间最长不能超过1秒。 7.3适应性 软件主要是由java编写的,功能齐全,应用方便简洁,这决定了我们的软件能在各个操作系统下顺畅的进行,容易上手。 8运行需求 操作系统: MicrosoftWindows7 支持环境: JDK6.0以上 9产品质量需求 9.1故障分析 ●该软件需要不定时查看并优化正常运行时的诊断级别。 ●当程序遇到不可逆转的错误时,储存当前进程运行的上下文,保护CPU现场。 ●当程序运行出错时,启用第一次失败数据捕获(FFDC)工具,并生成特殊的跟踪文件,以便查找错误信息。 ●当用户越权读写程序的重要文件是时,给出错误信息的同时,终止程序,返回操作系统。 ●当主机主存储设备无存储空间时,系统发出警示。 9.2系统利用率 此款音乐播放器程序较小,占用资源少,功能简洁,略低于市场上的音乐播放器的系统利用率,CPU约占用1%,内存占用2%。 9.3可靠性 ●安全性 A.权限控制 根据不同用户角色,设置相应权限,用户涉及个人偏好设置的重要操作都做相应的日志记录以备查看,没有权限的用户禁止访问偏好设置。 B.记录日志 本软件应该能够记录软件运行时所发生的所有错误,包括本机错误、文件错误、操作错误,以便查找错误的原因。 C.控制必录入项 本软件能够对必须录入文件子信息等项目进行控制,使用户能够确保信息录入的完整。 D.操作完成时有统一规范的提示信息 例如删除操作时,系统可提示警示框“您确认删除记录吗? 操作不可恢复! ”,用户点击确认后,系统才执行删除操作,删除后可直接返回相关页面。 E.进程提示 在播放音频时,可视化界面可以提供当前的播放时间显示、歌曲总时间显示和剩余时间显示,这方便用户了解播放信息。 10心得体会 通过本次现象对象课程设计,我对面向对象的程序设计有了更深程度的掌握,它将重点放在对象与对象的接口上。 在通过对题目进行需求分析,考虑一些编程中可能遇到的问题。 其次开始界面设计、类的设计、类功能的连接等等实现。 在遇到问题解决问题的过程中不断完善功能。 这次面向对象课程设计不仅考查了对Java语言基本理论知识的学习程度还考核了我们综合运用以及学习新知识的能力。 在以后的学习道路上必须多加强自己的实际业务能力,才能适应社会对应用型人才实际工作能力的需求。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java音乐播放器 文档 java 音乐 播放