音乐播放器开发文档

上传人:平*** 文档编号:18155472 上传时间:2017-11-13 格式:DOC 页数:9 大小:94.50KB
返回 下载 相关 举报
音乐播放器开发文档_第1页
第1页 / 共9页
音乐播放器开发文档_第2页
第2页 / 共9页
音乐播放器开发文档_第3页
第3页 / 共9页
音乐播放器开发文档_第4页
第4页 / 共9页
音乐播放器开发文档_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《音乐播放器开发文档》由会员分享,可在线阅读,更多相关《音乐播放器开发文档(9页珍藏版)》请在金锄头文库上搜索。

1、音乐播放器开发计划书组长:薛辉 20087610232组员:杜学鑫 20087610907袁茁 20087610137刘一峰 20087730124杨硕 20087610235李明哲 20087610114Android音乐播放器问题定义本软件是为了用户智能手机 Android而开发的一套智能软件,提供在线下载音乐,在线播放音乐,读取 SD卡音乐文件等功能。一、 可行性研究社会可行性分析:3G 技术飞速发展,为满足人们对音乐的追求,音乐播放器层出不从,然而市面上大多音乐播发器软件都太难操作,或者音质不好,不能给用户以更好体验,故提出开放一套更加人性化的手机播放器。技术可行性分析:以现阶段 an

2、droid技术发展水平,技术人员的技术配备,以及现有资源文档的配备来说,实现本软件是可能的。经济可行性分析:有本人个人时间以及经费支持,使得开发此软件有了资金保障,可以充分利用这一优势,尽快开发。其他可行性分析:二、 需求分析随着 3G时代的到来,手机应用越来越普遍,加之国民手机持有量更是爆炸式增长。移动音乐服务正是为这一形势而发展起来,本人提出一种多功能手机音乐播放器的应用,主要为了满足不同人群的音乐需要,并且提高优质的音乐服务,于是提出本音乐播放器的主要功能。需求功能如下:在线下载音乐功能。在线播放音乐显示声音波段表示提供读取 SD卡音乐用户可以定制音乐均衡器,以满足不同音质需求音量调节提

3、供歌词跟随音乐滚动更能提供重力感应选择上、下首歌曲功能 四、概要设计(总体设计):模块 简要说明在线下载音乐功能 本根据用户输入音乐文件地址,自动下载在 SD卡或者内存中并播放在线播放音乐 提供音乐播放的基本功能显示声音波段表示 根据声音波段产生震动的波段提供读取 SD卡音乐 检测 SD卡,并显示出音乐文件用户可以定制音乐均衡器,以满足不同音质需求提供不等的滑动条,用以控制声音的质量,均衡器音量调节 由滑动条调节音质的大小 0-100提供歌词跟随音乐滚动更能 采用多线程以及解析 LRC歌词文件同步播放音乐以及歌词提供重力感应选择上、下首歌曲功能 采用 Android系统的重力感应,以便选择上下

4、首歌曲进行播放软件程序流程图五:详细设计那么接下来就开始我们的每一个模块的详细设计了:在线下载音乐:提供一个文本框供用户输入网络音乐文件地址,然后确定下载,并提供进度条显示,下载完毕后关闭对话框,注意进程之间的问题。在线播放音乐提供音乐播放的基本功能,快进,暂停,播放,快退,同时进度滑块条需跟随滑动,用户也可以滑动滑动条进行调整播放位置。提供读取 SD卡音乐检测用户 SD卡,如果没有,则弹出信息提示,并提示用户下载网络音乐,如果检测有 SD卡,则再遍历是否有可播放文件,如果没有,则返回。如果有,则显示出全部音乐文件,并提供点击播放功能。用户可以定制音乐均衡器,以满足不同音质需求以一个对话框形式

5、表现出,并提供多项滑动条供用户调节音频,同时更新音乐播放的质量。音量调节提供提供滑动条供用户调节音量,音量范围在 0100之间 提供歌词跟随音乐滚动更能解析 LRC歌词文件,并同步歌词已经播放声音,注意以多线程方式以及解析xml方式处理提供重力感应选择上、下首歌曲功能根据系统自带 API开启重力感应功能,同时根据感应的方向选择切换到上下不同首歌曲,然后播放。六:编码、单元测试。七:综合测试组织人员对其进行一般性操作测试,针对每一模块进行,同时编写测试报告。程序员修正 Bug,根据用户反映,及时调整。如果条件允许,可以变编写:测试计划,测试大纲,搭建测试环境,设计和生成测试用例,测试报告八:软件

6、使用培训以及后期维护组织人员进行软件使用培训,并且由程序员或者美工人员制作培训指南。程序员需熟悉相关模块,并熟悉文档,以便进行后期维护。歌词同步的原理其实很简单:歌词显示是一个线程, 音乐播放时一个线程,通过播放时间将歌词显示进度与播放进度同步起来。网络标准的歌词格式是 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.

7、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 文件读到内存里面,用 sent

8、ence 数据结构存放. 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 (

9、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). 通过播放时间来获得歌词的索引

10、. 我们看下 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;还有一个歌词渐变的效果,其关键代码在与对画笔的设置,如下.Sha

11、der 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 Overridepublic void h

12、andleMessage(Message msg) / Log.v(#hahah, + mp.getCurrentPosition();/ 重画lrcView.mLyric.setTime(mp.getCurrentPosition();lrcView.invalidate();四. 歌词的获取歌词的获取是通过百度搜索出来的. 具体代码如下,很好看懂,关键代码如下:GetMethod get = new GetMethod(http:/ + URLEncoder.encode(filetype:lrc + key, GBK);get.addRequestHeader(Host, );get.a

13、ddRequestHeader(User-Agent, Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11);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, http:/ keep-alive);int i = http.executeMethod(get);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号