Android音乐播放器开发文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android音乐播放器

撰写人:张XX

2011-3-15

一、问题定义

本软件是为了用户智能手机Android而开发的一套智能软件,提供在线下载音乐,在线播放音乐,读取SD卡音乐文件等功能。

二、可行性研究

社会可行性分析:3G技术飞速发展,为满足人们对音乐的追求,音乐播放器层出不从,然而市面上大多音乐播发器软件都太难操作,或者音质不好,不能给用户以更好体验,故提出开放一套更加人性化的手机播放器。

技术可行性分析:以现阶段android技术发展水平,技术人员的技术配备,以及现有资源文档的配备来说,实现本软件是可能的。

经济可行性分析:有本人个人时间以及经费支持,使得开发此软件有了资金保障,可以充分利用这一优势,尽快开发。

其他可行性分析:

三、需求分析

随着3G时代的到来,手机应用越来越普遍,加之国民手机持有量更是爆炸式增长。移动音乐服务正是为这一形势而发展起来,本人提出一种多功能手机音乐播放器的应用,主要为了满足不同人群的音乐需要,并且提高优质的音乐服务,于是提出本音乐播放器的主要功能。

需求功能如下:

在线下载音乐功能。

在线播放音乐

显示声音波段表示

提供读取SD卡音乐

用户可以定制音乐均衡器,以满足不同音质需求音量调节

提供歌词跟随音乐滚动更能

提供重力感应选择上、下首歌曲功能

四、概要设计(总体设计):

软件程序流程图

五:详细设计

那么接下来就开始我们的每一个模块的详细设计了:

在线下载音乐:

提供一个文本框供用户输入网络音乐文件地址,然后确定下载,并提供进度条显示,下载完毕后关闭对话框,注意进程之间的问题。

在线播放音乐

提供音乐播放的基本功能,快进,暂停,播放,快退,同时进度滑块条需跟随滑动,用户也可以滑动滑动条进行调整播放位置。

提供读取SD卡音乐

检测用户SD卡,如果没有,则弹出信息提示,并提示用户下载网络音乐,如果检测有SD卡,则再遍历是否有可播放文件,如果没有,则返回。如果有,则显示出全部音乐文件,并提供点击播放功能。

用户可以定制音乐均衡器,以满足不同音质需求

以一个对话框形式表现出,并提供多项滑动条供用户调节音频,同时更新音乐播放的质量。

音量调节提供

提供滑动条供用户调节音量,音量范围在0—100之间

提供歌词跟随音乐滚动更能

解析LRC歌词文件,并同步歌词已经播放声音,注意以多线程方式以及解析xml 方式处理

提供重力感应选择上、下首歌曲功能

根据系统自带API开启重力感应功能,同时根据感应的方向选择切换到上下不

同首歌曲,然后播放。

六:编码、单元测试。

七:综合测试

组织人员对其进行一般性操作测试,针对每一模块进行,同时编写测试报告。程序员修正Bug,根据用户反映,及时调整。

如果条件允许,可以变编写:测试计划,测试大纲,搭建测试环境,设计和生成测试用例,测试报告

八:软件使用培训以及后期维护

组织人员进行软件使用培训,并且由程序员或者美工人员制作培训指南。程序员需熟悉相关模块,并熟悉文档,以便进行后期维护。

歌词同步的原理其实很简单:

歌词显示是一个线程, 音乐播放时一个线程,通过播放时间将歌词显示进度与播放进度同步起来。

网络标准的歌词格式是LRC. 我们看下一个LRC文档,其格式就一目了然了.

[ti:爱]

[ar:小虎队]

[al:华纳国语情浓13首]

[by:爱上你了音乐网]

[02:08.00][00:38.00]把你的心、我的心串一串

[02:11.00][00:41.00]串一株幸运草、串一?同心圆

[02:16.00][00:46.00]让所有期待未?的呼唤

[02:19.00][00:49.00]趁青春做?伴

[03:16.00][02:24.00][00:53.00]?让年轻越长大越孤单

[03:19.00][02:27.00][00:56.00]把我的幸运草种在你的梦田

[03:23.00][02:31.00][01: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;

}

}

相关文档
最新文档