




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、多媒体综合课程设计报告课题名称:android 音乐播放器姓名:杨超学号:2011 年 10 月 31 日计算机综合课程设计报告目录目录目录1 需求分析需求分析 .21.1 问题定义.21.2 可行性研究.21.3 需求分析.21.4 总体设计.32. 概要设计概要设计.42.1 1引言引言.52.1.1.编写目的52.1.2.背景52.1.3.术语定义52.1.4.参考资料52.22.2 总体设计总体设计 .62.2.1.总体技术框架62.2.2.需求与设计对应表62.3 3功能设计功能设计 .62.3.1.音乐播放62.3.2.后台运行62.3.3.读取sd卡 62.3.4.歌词同步 62
2、.3.5.手势换歌 62.4 4 接口设计接口设计 .82.5 5 部署与组件设计部署与组件设计 .92.5.1.部署模型9计算机综合课程设计报告目录3. 详细设计详细设计.83.1 模块功能实现3.1.1 在线音乐下载.83.1.2. 在线播放音乐.83.1.3 读取 sdcard.93.1.4重力感应换歌. .103.1.5 歌词同步.103.1.6 歌词获取.113.2 编码、单元测试3.3 综合测试3.4 软件使用培训及后期维护4.使用说明使用说明 .144.1 软件的操作流程.14计算机综合课程设计报告目录chapterchapter 1 1需求分析需求分析 一、一、问题定义问题定义
3、本软件是为了用户智能手机 android 而开发的一套智能软件,播放音乐,读取 sd 卡音乐文件等功能。二、二、可行性研究可行性研究社会可行性分析:android 飞速发展,为满足人们对音乐的追求,音乐播放器层出不从,然而市面上大多音乐播发器软件都太难操作,或者音质不好,不能给用户以更好体验,故提出开放一套更加人性化的手机播放器。技术可行性分析:以现阶段 android 技术发展水平,技术人员的技术配备,以及现有资源文档的配备来说,实现本软件是可能的。经济可行性分析:有本人个人时间以及经费支持,使得开发此软件有了资金保障,可以充分利用这一优势,尽快开发。其他可行性分析:三、三、需求分析需求分析
4、 随着 android 时代的到来,应用越来越普遍,加之国民手机持有量更是爆炸式增长。移动音乐服务正是为这一形势而发展起来,本人提出一种多功能手机音乐播放器的应用,主要为了满足不同人群的音乐需要,并且提高优质的音乐服务,于是提出本音乐播放器的主要功能。 需求功能如下:后台运行播放音乐提供读取 sd 卡音乐音量调节 提供歌词跟随音乐滚动更能提供手势换歌 四、总体设计:四、总体设计:模块模块简要说明简要说明播放音乐提供音乐播放的基本功能后台运行用户可以退回到桌面继续听歌,同时实现看书听音乐计算机综合课程设计报告目录提供读取 sd 卡音乐检测 sd 卡,并显示出音乐文件音量调节由滑动条调节音质的大小
5、 0-100提供歌词跟随音乐滚动更能采用多线程以及解析 lrc 歌词文件同步播放音乐以及歌词提供手势换歌采用 android 系统的手势操作,以便选择上下首歌曲进行播放计算机综合课程设计报告目录chapterchapter 2 2概要设计概要设计 1 1引言引言1.11.1编写目的编写目的写出概要设计的总体流程,方便老师参考1.21.2背景背景综合课程设计1.31.3术语定义术语定义暂无1.41.4参考资料参考资料android开发指南2 2总体设计总体设计2.12.1总体技术框架总体技术框架由 google 提供的 sdk 开发 android 播放器,参考 api 文档完成开发2.22.2
6、需求与设计对应表需求与设计对应表模块模块简要说明简要说明播放音乐提供音乐播放的基本功能后台运行用户可以退回到桌面继续听歌,同时实现看书听音乐提供读取 sd 卡音乐检测 sd 卡,并显示出音乐文件音量调节由滑动条调节音质的大小 0-100提供歌词跟随音乐滚动更能采用多线程以及解析 lrc 歌词文件同步播放音乐以及歌词提供手势换歌采用 android 系统的手势操作,以便选择上计算机综合课程设计报告目录下首歌曲进行播放3 3功能设计功能设计3.13.1播放音乐播放音乐调用android自带的播放器进行音乐的播放3.23.2后台运行后台运行运用 android 的 service 进行后台3.33.
7、3读取读取 sd 卡卡调用 sdk 的 media 中的静态方法扫描 sd 卡中的音频文件3.43.4歌词同步歌词同步通过播放时间将歌词显示进度与播放进度同步起来。3.53.5手势换歌手势换歌sdk 自带的 api 进行手势换歌,识别手势。4 4接口设计接口设计检测sd卡-调用外部media接口进行静态扫描音乐播放-调用系统接口进行播放手势换歌-调用sdk的api进行手势识别5 5部署与组件设计部署与组件设计5.15.1部署模型部署模型计算机综合课程设计报告目录chapterchapter 3 3详细设计详细设计3.13.1 模块的详细设计了:模块的详细设计了:3.1.1 在线下载音乐: 提供
8、一个文本框供用户输入网络音乐文件地址,然后确定下载,并提供进度条显示,下载完毕后关闭对话框,注意进程之间的问题。3.1.2 在线播放音乐提供音乐播放的基本功能,快进,暂停,播放,快退,同时进度滑块条需跟随滑动,用户也可以滑动滑动条进行调整播放位置。3.1.3 提供读取 sd 卡音乐 检测用户 sd 卡,如果没有,则弹出信息提示,并提示用户下载网络音乐,如果检测有 sd 卡,则再遍历是否有可播放文件,如果没有,则返回。如果有,则显示出全部音乐文件,并提供点击播放功能。 用户可以定制音乐均衡器,以满足不同音质需求 以一个对话框形式表现出,并提供多项滑动条供用户调节音频,同时更新音乐播放的质量。音量
9、调节提供提供滑动条供用户调节音量,音量范围在 0100 之间 提供歌词跟随音乐滚动更能解析 lrc 歌词文件,并同步歌词已经播放声音,注意以多线程方式以及解析xml 方式处理3.1.4 重力感应换歌 提供重力感应选择上、下首歌曲功能 根据系统自带 api 开启重力感应功能,同时根据感应的方向选择切换到上下不同首歌曲,然后播放。3.1.5 歌词同步歌词同步的原理其实很简单:歌词显示是一个线程, 音乐播放时一个线程,通过播放时间将歌词显示进度与播放进度同步起来。网络标准的歌词格式是 lrc. 我们看下一个 lrc 文档,其格式就一目了然了.计算机综合课程设计报告目录ti:爱ar:小虎队al:华纳国
10、语情浓 13 首by:爱上你了音乐网02:08.0000:38.00把你的心、我的心串一串02:11.0000:41.00串一株幸运草、串一?同心圆02:16.0000:46.00让所有期待未?的呼唤02:19.0000:49.00趁青春做?伴03:16.0002:24.0000:53.00?让年轻越长大越孤单03:19.0002:27.0000:56.00把我的幸运草种在你的梦田03:23.0002:31.0001:01.00让地球随我?的同心圆.lrc 格式为 歌词显示起始时间歌词显示结束时间歌词内容。了解歌词同步原理,我们可以想到要做如下工作:1. lrc 解析2. lrc 歌词显示3.
11、 歌词与播放音乐同步4. 歌词的获取一 lrc 解析这边我推荐 yoyoplayer 音乐播放开源项目. 源代码已经非常好的支持了 lrc 解析. 我拿过来就用了.过程大概如此: 把 lrc 文件读到内存里面,用 sentence 数据结构存放. sentence 里面有 fromtime, totime, content 三个成员变量。显示的时候需要这些数据。二. lrc 歌词显示歌词的绘制通过重写 ondraw 方法.绘制的代码贴出来:计算机综合课程设计报告目录long t = temptime;int index = getnowsentenceindex(t);if (index =
12、-1) return;sentence now = list.get(index);float f = (t - now.getfromtime() * 1.0f/ (now.gettotime() - now.getfromtime();if (f 0.98f) f = 0.98f;shader shader = new lineargradient(0, 0,now.getcontentwidth(mtxtpaint), 0, new int color.red,color.blue , new float f, f + 0.01f ,tilemode.clamp);mtxtpaint.s
13、etshader(shader);canvas.drawtext(now.getcontent(), 0, 20, mtxtpaint);上面的代码很简单,关键一个函数是 getnowsentenceindex(t). 通过播放时间来获得歌词的索引. 我们看下 getnowsentenceindex()如何实现./* 得到当前正在播放的那一句的下标 不可能找不到,因为最开头要加一句 自己的句子 ,所以加了以后就不可能找不到了* return 下标*/private int getnowsentenceindex(long t) 计算机综合课程设计报告目录for (int i = 0; i li
14、st.size(); i+) if (list.get(i).isintime(t) return i;/ throw new runtimeexception(竟然出现了找不到的情况!);return -1;还有一个歌词渐变的效果,其关键代码在与对画笔的设置,如下.shader shader = new lineargradient(0, 0,now.getcontentwidth(mtxtpaint), 0, new int color.red,color.blue , new float f, f + 0.01f ,tilemode.clamp);mtxtpaint.setshader(
15、shader);三. 歌词与播放音乐同步音乐播放的时候,同时启动歌词显示线程. 将音乐播放的时间设置到歌词 view 的成员变量中, 以达到同步的目的。private class myhandler extends handler overridepublic void handlemessage(message msg) / log.v(#hahah, + mp.getcurrentposition();/ 重画lrcview.mlyric.settime(mp.getcurrentposition();lrcview.invalidate();计算机综合课程设计报告目录3.1.6 歌词获取
16、歌词的获取是通过百度搜索出来的. 具体代码如下,很好看懂,关键代码如下:getmethod get = new getmethod(http:/ + urlencoder.encode(filetype:lrc + key, gbk);get.addrequestheader(host, );get.addrequestheader(user-agent, mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1) gecko/20071127 firefox/1);get.addrequestheader(accep
17、t, text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5);get.addrequestheader(accept-language, zh-cn,zh;q=0.5);get.addrequestheader(keep-alive, 300);get.addrequestheader(referer, http:/ keep-alive);int i = http.executemethod(get);返回的结果是歌词的 xml 格式转化字符串就可
18、以了,这个太简单了,懒得说了.3.23.2 编码、单元测试。编码、单元测试。部分代码:部分代码:/* * 数据库操作 * param pos */private void dboperate(int pos)dbhelper = new dbhelper(this, music.db, null, 2);cursor c = dbhelper.query(pos);date currenttime = new date(); simpledateformat formatter = new simpledateformat(yyyy-mm-dd hh:mm:ss); string datest
19、ring = formatter.format(currenttime); if (c=null|c.getcount()=0)/如果查询结果为空contentvalues values = new contentvalues();values.put(music_id, pos);values.put(clicks, 1);values.put(latest, datestring);计算机综合课程设计报告目录dbhelper.insert(values); elsec.movetonext();int clicks = c.getint(2);clicks+;contentvalues v
20、alues = new contentvalues();values.put(clicks, clicks);values.put(latest, datestring);dbhelper.update(values, pos);if (c!=null)c.close();c = null;if (dbhelper!=null)dbhelper.close();dbhelper = null;/* * 来电广播接收器 */protected broadcastreceiver incomingsmsreceiver = new broadcastreceiver() overridepublic void onreceive(context context, intent intent) system.out.println(ent.action.answer);if (intent.getaction().equ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025荆门职业学院辅导员考试试题及答案
- 正畸治疗中的口呼吸问题综合解析
- 幼儿园健康课件《注意饮食卫生》
- 健康体检科护士课件
- 江苏南通市如皋市科创投集团招聘笔试题库2025
- 四川凉山州盐源县县属国有企业招聘笔试题库2025
- 海洋灵感首饰设计
- 2025年中级财务会计考试试题及答案
- 消防工程师考试题及答案2025年
- 2025年运动康复与训练方法课程学习考试试卷及答案
- 小学数学五年级下同《折线统计图》教学实录
- 水利工程质量缺陷处理方案
- 2024年全国软件水平考试之初级程序员考试经典测试题附答案
- 2024至2030年中国叉车出租行业发展运行现状及投资战略规划报告
- 大国三农-辉煌成就版智慧树知到期末考试答案章节答案2024年中国农业大学
- 2023-2024学年贵州省贵阳市部分学校高二(下)期末数学试卷(含答案)
- 2024年吉林长春市中考生物试卷真题
- JTG 3432-2024 公路工程集料试验规程(正式版)
- JTG-QB-003-2003公路桥涵标准图钢筋混凝土盖板涵
- (高清版)JTG 6310-2022 收费公路联网收费技术标准
- 2024-2034年中国不锈钢焊管市场发展现状及行业发展趋势报告
评论
0/150
提交评论