Android音乐播放器开发课程设计报告.doc_第1页
Android音乐播放器开发课程设计报告.doc_第2页
Android音乐播放器开发课程设计报告.doc_第3页
Android音乐播放器开发课程设计报告.doc_第4页
Android音乐播放器开发课程设计报告.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

多媒体综合课程设计报告 课题名称:android 音乐播放器 姓名:杨超 学号: 2011 年 10 月 31 日 计算机综合课程设计报告目录 目录目录 1 需求分析需求分析 .2 1.1 问题定义.2 1.2 可行性研究.2 1.3 需求分析.2 1.4 总体设计.3 2. 概要设计概要设计.4 2.1 1引言引言.5 2.1.1.编写目的5 2.1.2.背景5 2.1.3.术语定义5 2.1.4.参考资料5 2.22.2 总体设计总体设计 .6 2.2.1.总体技术框架6 2.2.2.需求与设计对应表6 2.3 3功能设计功能设计 .6 2.3.1.音乐播放6 2.3.2.后台运行6 2.3.3.读取sd卡 6 2.3.4.歌词同步 6 2.3.5.手势换歌 6 2.4 4 接口设计接口设计 .8 2.5 5 部署与组件设计部署与组件设计 .9 2.5.1.部署模型9 计算机综合课程设计报告目录 3. 详细设计详细设计.8 3.1 模块功能实现 3.1.1 在线音乐下载.8 3.1.2. 在线播放音乐.8 3.1.3 读取 sdcard.9 3.1.4重力感应换歌. .10 3.1.5 歌词同步.10 3.1.6 歌词获取.11 3.2 编码、单元测试 3.3 综合测试 3.4 软件使用培训及后期维护 4.使用说明使用说明 .14 4.1 软件的操作流程.14 计算机综合课程设计报告目录 chapterchapter 1 1 需求分析需求分析 一、一、问题定义问题定义 本软件是为了用户智能手机 android 而开发的一套智能软件,播放音 乐,读取 sd 卡音乐文件等功能。 二、二、可行性研究可行性研究 社会可行性分析:android 飞速发展,为满足人们对音乐的追求,音 乐播放器层出不从,然而市面上大多音乐播发器软件都太难操作,或者音质不 好,不能给用户以更好体验,故提出开放一套更加人性化的手机播放器。 技术可行性分析:以现阶段 android 技术发展水平,技术人员的技术 配备,以及现有资源文档的配备来说,实现本软件是可能的。 经济可行性分析:有本人个人时间以及经费支持,使得开发此软件有 了资金保障,可以充分利用这一优势,尽快开发。 其他可行性分析: 三、三、需求分析需求分析 随着 android 时代的到来,应用越来越普遍,加之国民手机持有量更是爆炸式 增长。移动音乐服务正是为这一形势而发展起来,本人提出一种多功能手机音 乐播放器的应用,主要为了满足不同人群的音乐需要,并且提高优质的音乐服 务,于是提出本音乐播放器的主要功能。 需求功能如下: 后台运行 播放音乐 提供读取 sd 卡音乐 音量调节 提供歌词跟随音乐滚动更能 提供手势换歌 四、总体设计:四、总体设计: 模块模块简要说明简要说明 播放音乐提供音乐播放的基本功能 后台运行用户可以退回到桌面继续听歌,同时 实现看书听音乐 计算机综合课程设计报告目录 提供读取 sd 卡音乐检测 sd 卡,并显示出音乐文件 音量调节由滑动条调节音质的大小 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 需求与设计对应表需求与设计对应表 模块模块简要说明简要说明 播放音乐提供音乐播放的基本功能 后台运行用户可以退回到桌面继续听歌,同时实现看 书听音乐 提供读取 sd 卡音乐检测 sd 卡,并显示出音乐文件 音量调节由滑动条调节音质的大小 0-100 提供歌词跟随音乐滚动更能采用多线程以及解析 lrc 歌词文件同步播放 音乐以及歌词 提供手势换歌采用 android 系统的手势操作,以便选择上 计算机综合课程设计报告目录 下首歌曲进行播放 3 3功能设计功能设计 3.13.1播放音乐播放音乐 调用android自带的播放器进行音乐的播放 3.23.2后台运行后台运行 运用 android 的 service 进行后台 3.33.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 在线下载音乐: 提供一个文本框供用户输入网络音乐文件地址,然后确定下载,并提供进度条 显示,下载完毕后关闭对话框,注意进程之间的问题。 3.1.2 在线播放音乐 提供音乐播放的基本功能,快进,暂停,播放,快退,同时进度滑块条需跟随 滑动,用户也可以滑动滑动条进行调整播放位置。 3.1.3 提供读取 sd 卡音乐 检测用户 sd 卡,如果没有,则弹出信息提示,并提示用户下载网络音乐,如 果检测有 sd 卡,则再遍历是否有可播放文件,如果没有,则返回。如果有,则 显示出全部音乐文件,并提供点击播放功能。 用户可以定制音乐均衡器,以满足不同音质需求 以一个对话框形式表现出,并提供多项滑动条供用户调节音频,同时更新音乐 播放的质量。 音量调节提供 提供滑动条供用户调节音量,音量范围在 0100 之间 提供歌词跟随音乐滚动更能 解析 lrc 歌词文件,并同步歌词已经播放声音,注意以多线程方式以及解析 xml 方式处理 3.1.4 重力感应换歌 提供重力感应选择上、下首歌曲功能 根据系统自带 api 开启重力感应功能,同时根据感应的方向选择切换到上下不 同首歌曲,然后播放。 3.1.5 歌词同步 歌词同步的原理其实很简单: 歌词显示是一个线程, 音乐播放时一个线程,通过播放时间将歌词显示进度与播放进 度同步起来。 网络标准的歌词格式是 lrc. 我们看下一个 lrc 文档,其格式就一目了然了. 计算机综合课程设计报告目录 ti:爱 ar:小虎队 al:华纳国语情浓 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. 歌词与播放音乐同步 4. 歌词的获取 一 lrc 解析 这边我推荐 yoyoplayer 音乐播放开源项目. 源代码已经非常好的支持了 lrc 解析. 我拿过来就用了. 过程大概如此: 把 lrc 文件读到内存里面,用 sentence 数据结构存放. sentence 里 面有 fromtime, totime, content 三个成员变量。显示的时候需要这些数据。 二. lrc 歌词显示 歌词的绘制通过重写 ondraw 方法. 绘制的代码贴出来: 计算机综合课程设计报告目录 long t = temptime; int index = getnowsentenceindex(t); if (index = -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.setshader(shader); canvas.drawtext(now.getcontent(), 0, 20, mtxtpaint); 上面的代码很简单,关键一个函数是 getnowsentenceindex(t). 通过播放时间来获得歌词 的索引. 我们看下 getnowsentenceindex()如何实现. /* * 得到当前正在播放的那一句的下标 不可能找不到,因为最开头要加一句 自己的句 子 ,所以加了以后就不可能找不到了 * * return 下标 */ private int getnowsentenceindex(long t) 计算机综合课程设计报告目录 for (int i = 0; i list.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(shader); 三. 歌词与播放音乐同步 音乐播放的时候,同时启动歌词显示线程. 将音乐播放的时间设置到歌词 view 的成员 变量中, 以达到同步的目的。 private class myhandler extends handler override public void handlemessage(message msg) / log.v(#hahah, + mp.getcurrentposition(); / 重画 lrcview.mlyric.settime(mp.getcurrentposition(); lrcview.invalidate(); 计算机综合课程设计报告目录 3.1.6 歌词获取 歌词的获取是通过百度搜索出来的. 具体代码如下,很好看懂,关键代码如下: getmethod get = new getmethod( + 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(accept, 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, get.addrequestheader(connection, keep-alive); int i = http.executemethod(get); 返回的结果是歌词的 xml 格式转化字符串就可以了,这个太简单了,懒得说了. 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 datestring = 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); else c.movetonext(); int clicks = c.getint(2); clicks+; contentvalues values = 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() override public void onreceive(context context, intent intent) system.out.println(ent.action.answer); if (intent.getaction().e

温馨提示

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

评论

0/150

提交评论