糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > php 解析lrc文件格式 音乐播放器之LRC歌词解析

php 解析lrc文件格式 音乐播放器之LRC歌词解析

时间:2019-10-28 12:14:01

相关推荐

php 解析lrc文件格式 音乐播放器之LRC歌词解析

音乐播放器我很早就想写一个,奈何水平不够再加上实在不是很勤奋,拖拖拉拉直到现在才去弄了下lrc歌词解析,关于歌词解析的例子网上有很多,各有各的写法,本来想随便复制一篇了事,但是又觉得不妥,最后还是老老实实去自己写解析,想解析先要了解格式,下面就开始正题。

lrc文件通常是存放音乐歌词文件的地方,里面的格式大概分为三类,一类就是[ti:],这种一般是歌手,歌词制作人;一类则为[00:01.67],这个是时间戳,格式是mm:ss:ff,就是歌词的时间,用这个来判定什么时候显示什么歌词;最后一类就是歌词内容了,大概格式就是这样,接下来就是按照格式截取或转化数据,将其变成自己所要的数据。

接下来直接上代码,相信程序猿看代码都会舒服一些:首先定义一个LrcRow类:public class LrcRow implements Comparable {

public String strTime;

public long time ;

public String content ;

public LrcRow () {

}public LrcRow (String strTime , long time , String content ) {

this.strTime = strTime;

this.time = time;

this.content = content;

}@Override

public String toString() {

return "[" + strTime + "]" + content ;

}

里面三个参数,strtime是为转换的时间,time则是用来判断显示那句歌词的时间,content就是歌词内容,只是很简单一个类。

接下来就是正式解析了,public staticLrcRowAnalysis_Lyrics(Stringline) {

intstart= line.indexOf("[");

intstop= line.indexOf("]");

if(start!= -1&&stop!= -1) {

LrcRow lrcrow=newLrcRow();

String result= line.substring(start+1,stop);

lrcrow.strTime=result;

if(!result.equals("ti:") && !result.equals("ar:") && !result.equals("al:")) {

lrcrow.time=getlong(result);

}String content= line.substring(stop+1);

if(content!=null&& !content.equals("")) {

lrcrow.content=content;

}else{

lrcrow.content="";

}

returnlrcrow;

}

return null;

}private static long getlong(Stringtime) {

String m= time.substring(0,time.indexOf(":"));

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

String ms= time.substring(time.indexOf(".") +1,time.length());

return Integer.valueOf(m) *60*1000//转为毫秒

+Integer.valueOf(s) *1000//转为毫秒

+Integer.valueOf(ms);

}

首先,拿到一句歌词,先截取[],拿到位数,截取其中内容,当然,有可能是空字符串,于是最了-1判断,拿到[]内的内容后,如果是时间戳则调用getlong方法,将时间戳转换成毫秒值并返回出来,当然我判断是否为时间戳的条件并不是最优方案,我在这偷了懒,还要继续改,拿完时间后接下来就是歌词内容了,取歌词内容则比较容易,只要把]之后的歌词全部取出就行了,但是有些行只占时间,没有内容,也需要另加判断,毕竟歌词显示不能断,长时间不动,对用户体验也会差很多,将内容分门归类后,new一个LrcRow,将数据全部存入,将歌词按时间顺序排序,虽然文件读取有先后,但是要做好以防万一的准备,毕竟使用者可不会听你解释,排序如下:@Override

public int compareTo(LrcRow o) {

return (int) (time- o.time);

}

以上便完成lrc歌词文件的解析,欢迎指正

如果觉得《php 解析lrc文件格式 音乐播放器之LRC歌词解析》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。