基于JSP开发平台的在线音乐播放器的实现==
更新时间:2023-05-14 07:26:01 阅读量: 实用文档 文档下载
- sql在线开发平台推荐度:
- 相关推荐
基于JSP开发平台的在线音乐播放器的实现?
组长:薛辉 20087610232
组员:杜学鑫20087610907
袁茁 20087610137 刘一峰20087730124 杨硕 20087610235 李明哲20087610114
Android音乐播放器
问题定义
本软件是为了用户智能手机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; } }
// 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(); } }
四. 歌词的获取
歌词的获取是通过百度搜索出来的. 具体代码如下,很好看懂,关键代码如下: GetMethod get = new GetMethod("/s?wd=" 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.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", "/"); get.addRequestHeader("Connection", "keep-alive"); int i = http.executeMethod(get);
正在阅读:
江南大学2018年上半年信息检索与利用第3阶段参考_ss05-20
2013年上海市及全国木质家具月度产量数据统计报告08-19
2017-2018学年江苏省常州市溧阳市竹箦中学高考物理模拟试卷(9月份) Word版含解析11-11
初中英语听力资料03-08
五年级数学1+1社团活动资料05-04
实验三、线性分组码的编译码01-12
财务管理模拟试题103-18
新人教版六年级上册数学第五单元《整理和复习》教案板书设计11-19
高考试题研究心得体会03-05
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 开发平台
- 在线音乐
- 播放器
- 基于
- 实现
- JSP
- 基于GIS技术的宽甸县居民点空间分布特征分析_范红梅
- 2015年4月全国自考合同法考前密卷00230(含答案)
- 2011香港特别行政区农村信用社招考考试重点和考试技巧
- 危险化学品清单及MSDS资料
- 复制 -喷油工安全操作规程
- 管理运筹学第四版第六章习题答案
- 东北证券海外宏观周度观察(2018年第50周):欧央行退出量化宽松,英首相加速无协议脱欧准备
- 高考地理常见22个答题模式
- 精编中考英语复习专项训练---完形填空
- 股权出质登记申请书(上海最新版)
- 气-煤混烧锅炉改烧燃气的实践
- 加油站安全生产责任制
- 设计投标合作协议
- 物流仓库管理制度
- 1.2.1 函数的概念 第2课时 函数概念的综合应用
- 第一章 导言(微观经济学-东南大学,苏莱曼)
- 部编版四年级上册 18 牛和鹅
- 高中物理解题高手:专题13 动量守恒和能量守恒
- 心理学基础知识试题及答案(一)
- 2009年注册安全工程师安全生产技术考试真题 答案