首页 > 编程知识 正文

lrc歌词文件,最好用的音乐播放器

时间:2023-05-04 03:28:26 阅读:59620 作者:404

音乐播放器很久以前就想写一个,但无论如何水平不够,而且非常不勤奋。 拖拖拉拉直到现在才解析了lrc歌词。 网上有很多关于歌词分析的例子。 各有各的写法。 我想随便复印一下就结束了,觉得不方便,就老实自己写了分析。 要分析我想先知道格式,现在进入正题。

lrc文件通常是存储音乐歌词文件的地方,里面的格式大致分为三种,一种是[ti:],这样的一般是歌手、歌词制片人; 一种是[00:01.67],这是时间戳,格式为mm:ss:ff,是歌词的时间,用它来判断何时显示什么歌词; 最后一个类别是歌词的内容。 大概的格式是这样的。 接下来就是根据格式剪切和转换数据,使之成为自己想要的数据。

接下来直接上代码,程序猴子相信看代码会很容易。 首先定义LrcRow类。 publicclasslrcrowimplementscomparable {

公共字符串流;

公共长时间;

公共字符串内容;

公共LRC row () {

} publiclrcrow (字符串流、长时间、字符串内容)。

this.strTime=strTime;

this.time=time;

this.content=content;

}@Override

公共字符串字符串

返回' [ ' strtime ' ] ' content;

}

其中三个参数,strtime是用于转换的时间,time是用于判断该歌词显示的时间,content是歌词的内容,只是一个简单的类。

接下来是正式解析。 publicstaticlrcrowanalysis _ lyrics (字符串线)。

intstart=line.indexof('[ ' );

intstop=line.indexof (' );

if (开始!=-1停止!=-1 ()

LrcRow lrcrow=newLrcRow (;

string result=line.substring (开始1,stop );

lrcrow.strTime=result;

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

LRCrow.time=getlong(result );

} string content=line.substring (stop1);

内容!=空! content.equals (' ' ) {

lrcrow.content=content;

}else{

lrcrow.content=' ';

}

returnlrcrow;

}

返回空值;

}隐私统计龙(stringtime ) )

stringm=time.substring(0,time.indexof(': ' );

strings=time.substring (time.indexof (' : ' ) ) 1,time.index of ).);

string ms=time.substring (time.index of ('.' ) 1,time.length );

转换为returninteger.valueof(m ) *60*1000//毫秒

转换为integer.valueof(s ) *1000//毫秒

integer.valueof(ms;

}

首先,得到歌词。 首先得到[]、位数和内容。 当然,它可能是空字符串。 于是用-1判断了。 获取[]中的内容后,如果是时间戳,则调用getlong方法,将时间戳转换为毫秒值并返回。 当然,我判断是否是时间戳的条件不是最佳方案。 我在这里偷懒了。 继续变更,拿着。 取歌词的内容很简单。 ]后面的歌词全部拿出来就可以了,有些行只占时间,没有内容,也需要别的判断。 果然歌词显示不完,长时间不动的话,用户体验也会变得相当差。 内容分类后,用new一个LrcRow,保存全部数据,按照时间顺序排列歌词。 文件读取有优先顺序,但请做好以防万一的准备

公共int比较到(lrcrowo ) {

返回(int ) ) time- o.time;

}

至此,lrc歌词文件的分析完成。 期待您的指正

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。