最近在做一款android手机上的音乐播放器,学习到了很多东西,像是Fragment,ActionBar的使用等等,这里就先介绍一下歌词同步的实现问题。

歌词同步的实现思路很简单:获取歌词文件LRC中的时间和歌词内容,然后在指定的时间内播放相应的内容。获取不难,难就在于如何在手机屏幕上实现歌词的滚动。

先上效果图:

先从最基本的读取歌词文件开始:

Public class LrcHandle {

private List mWords = new ArrayList();

private List mTimeList = new ArrayList();

//处理歌词文件

public void readLRC(String path) {

File file = new File(path);

try {

FileInputStream fileInputStream = new FileInputStream(file);

InputStreamReader inputStreamReader = new InputStreamReader(

fileInputStream, "utf-8");

BufferedReader bufferedReader = new BufferedReader(

inputStreamReader);

String s = "";

while ((s = bufferedReader.readLine()) != null) {

addTimeToList(s);

if ((s.indexOf("[ar:") != -1) || (s.indexOf("[ti:") != -1)

|| (s.indexOf("[by:") != -1)) {

s = s.substring(s.indexOf(":") + 1, s.indexOf("]"));

} else {

String ss = s.substring(s.indexOf("["), s.indexOf("]") + 1);

s = s.replace(ss, "");

}

mWords.add(s);

}

bufferedReader.close();

inputStreamReader.close();

fileInputStream.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

mWords.add("没有歌词文件,赶紧去下载");

} catch (IOException e) {

e.printStackTrace();

mWords.add("没有读取到歌词");

}

}

public List getWords() {

return mWords;

}

public List getTime() {

return mTimeList;

}

// 分离出时间

private int timeHandler(String string) {

string = string.replace(".", ":");

String timeData[] = string.split(":");

// 分离出分、秒并转换为整型

int minute = Integer.parseInt(timeData[0]);

int second = Integer.parseInt(timeData[1]);

int millisecond = Integer.parseInt(timeData[2]);

// 计算上一行与下一行的时间转换为毫秒数

int currentTime = (minute * 60 + second) * 1000 + millisecond * 10;

return currentTime;

}

private void addTimeToList(String string) {

Matcher matcher = Pattern.compile(

"[d{1,2}:d{1,2}([.:]d{1,2})?]").matcher(string);

if (matcher.find()) {

String str = matcher.group();

mTimeList.add(new LrcHandle().timeHandler(str.substring(1,

str.length() - 1)));

}

}

}

一般歌词文件的格式大概如下:

[ar:艺人名]

[ti:曲名]

[al:专辑名]

[by:编者(指编辑LRC歌词的人)]

[offset:时间补偿值] 其单位是毫秒,正值表示整体提前,负值相反。这是用于总体调整显示快慢的。

但也不一定,有时候并没有前面那些ar:等标识符,所以我们这里也提供了另一种解析方式。

歌词文件中的时间格式则比较统一:[00:00.50]等等,00:表示分钟,00.表示秒数,.50表示毫秒数,当然,我们最后是要将它们转化为毫秒数处理才比较方便。

android 歌词同步代码,android手机音乐播放器实现歌词同步相关推荐

  1. java歌词高亮显示滚动_js如何处理音乐播放器的歌词文件达到高亮以及滚动的效果?...

    原理 把每句歌词都输出为一个li元素,添加data-timeline为该歌词的时间 监听 audio的timeupdate时间,遍历第1步添加的歌词,检测data-timeline为当前audio播放 ...

  2. [转]全方位对比 安卓手机音乐播放器推荐

    现在手机应用发展迅速,各种只怕想不到,不怕做不到的应用也是如雨后春笋般应运而生.听歌早已经告别了以前庞大.笨拙.不便带来的烦恼,之后mp3播放器的普及更是随处都可见戴着耳机听歌的人.而手机近几年来革命 ...

  3. Android应用开发--MP3音乐播放器滚动歌词实现

    Android应用开发--MP3音乐播放器滚动歌词实现 2013年6月2日  简.美音乐播放器开发记录 -----前话 有网友给我博客评论说,让我借鉴好的Android代码,代码贴出来的时候最好整体先 ...

  4. 张利国,龚海平,王植萌.android移动开发入门与进阶,开题报告-基于Android的手机音乐播放器的设计与实现.doc...

    盐城师范学院 毕业设计开题报告 题 目: 基于android的手机音乐播放器 的设计与实现 姓 名: 二级学院: 信息工程学院 专 业: 软件工程 班 级: 12(1) 学 号: 指导教师: 职称: ...

  5. 基于Android的手机音乐播放器的设计与实现

    源码及论文下载:http://www.byamd.xyz/tag/android/ 摘 要 随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活 ...

  6. 一个手机android音乐播放器,酷我听听 Android最好用的手机音乐播放器

    歌曲播放与听听曲库 添加好自己手机中的歌曲之后,用户就能够选择歌曲进行播放收听了.酷我听听的播放页面非常华丽哦.支持歌曲专辑图片,以及歌词同步.小编试听了两首歌曲许嵩的<素颜>以及柯有伦的 ...

  7. Android应用开发 MP3音乐播放器滚动歌词实现

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Andr ...

  8. [内附完整源码和文档] 基于Android的手机音乐播放器的设计与实现

    摘 要 随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活节奏的加快,生活压力越来越大,碎片化的时间越来越多,那么一个可以在碎片化的时间内调节 ...

  9. Android项目:基于Android的手机音乐播放器的设计

    本次程序的设计,对手机音乐播放器的框架进行了精心的构思和实现,采用主要开发工具Eclipse+Java语言,Android Development Tool的插件和Android SDK版本来完成的. ...

最新文章

  1. C++实现九九乘法表
  2. js 前端操作的分页路由设计
  3. Tensorflow【实战Google深度学习框架】使用 HDF5 处理大型数据集with TFLearn
  4. ES6--基础语法(一)
  5. 小米usb3.0修复补丁_今日热闻 | Redmi 10X系列发布、小米手环5产品外观曝光、Win10补丁导致蓝屏、AXON 11 SE 6月发布...
  6. ros::spin() 和 ros::spinOnce()
  7. jvm面试之 Java内存模型之线程独占部分,线程共享部分,常问问题分析
  8. 2018安卓应用安全白皮书:超98%安卓应用存有安全风险
  9. 转摘:工厂方法模式(Factory Method Pattern)
  10. PHP composer
  11. 鼠标宏会不会封号_每天一个英雄联盟封号技巧:峡谷先锋可以连续撞塔两次,你会吗?...
  12. wps android 安装包下载地址,WPS Office手机版下载安装_WPS Office下载软件安卓版13.0.1...
  13. python极简讲义 pdf_Python极简讲义:一本书入门数据分析与机器学习
  14. python开发微信点餐_微信点餐平台开发 (一)
  15. 渠道类:新APP上线都有哪些具体的推广方式可以学习(最新)
  16. c语言陈湘骥答案,c语言程序设计教程陈湘骥答案
  17. 计算机专业排名211大学排名,计算机专业大学排名,计算机专业强的211!
  18. 推动外部董事高效履职,提高国资国企治理能力
  19. 如何有效管理自己电脑里的文件
  20. 完美解决Win10“无法登陆到你的账户”问题,无法登录账户的全方面解决方案!

热门文章

  1. Excel卡方检验,chisq.test()对数据排列有要求
  2. Python 读取excel数据并填入excel,批量生成模板
  3. html元素拖拽预览图,HTML5拖拽上传图片预览
  4. 手感虽重要,工具更可靠|SunTorque智能扭矩系统
  5. 汽车安全带E-mark认证优秀的认证机构有哪些特点?
  6. 使用 HTML 控件创建出色的 Metro 风格应用
  7. 基于JavaWeb的网站图片爬虫系统
  8. (一) 在Windows上搭建Qt环境
  9. RabbitMQ Centos7 安装以及使用
  10. List remove