android解析歌词
Android
作词:H.U.B.作曲:Emil Carlin
演唱:东方神起
君は谁?心を抜かれ
右にならえ思考停止の果て
监视続け何の为追い诘め
苦労かさんで不実の底へと
If wanna goIf wanna show
If wanna goIf wanna go
for your mind
爱からも梦からも
敌からも自分にも
Let's break it through
we can do
决して恐れず挑む自由光求めて
make it true make it soul
照らしだせ Oh Oh Oh Oh Oh Oh Oh Oh
never give up for my life
命がけのlove
伤も毒も受けてたつのさ
followもsparrowもはねつけろ
Oh Oh Oh Oh Oh Oh Oh Oh
emptyに痩せた
支配された世界に情热なんか
もうどこにもない
Androidは嫌胜利しても孤独
それでいいの?まだ间に合うのなら
If wanna goIf wanna show
If wanna goIf wanna go
for your mind
壊れても无谋でも
どうしても何度でも前にchance
Let's break it through we can do
决して恐れず挑む自由热い身体で
make it true make it soul
照らしだせ Oh Oh Oh Oh Oh Oh Oh Oh
never give up for my life
命がけのlove
伤も毒も受けてたつのさ
followもsparrowもはねつけろ
Oh Oh Oh Oh Oh Oh Oh Oh
ただ自分を信じればいい
屈せずに忘れずに
そこに道はできる
get down down down down
目指している
次の场所に辿り着くためには
覚悟なら决めた
get down down down down
ANDROID
Let's break it through
we can do
决して恐れず挑む自由光求めて
make it true make it soul
照らしだせ Oh Oh…
never give up for my life
命がけのlove
伤も毒も受けてたつのさ
followもsparrowもはねつけろ
Oh Oh Oh Oh Oh Oh Oh Oh
Let's break it through
we can do
决して恐れず挑む自由热い身体で
make it true make it soul
照らしだせ Oh Oh Oh Oh Oh Oh Oh Oh
Oh Oh Oh Oh Oh Oh Oh Oh
先从最基本的读取歌词文件开始:
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表示毫秒数,当然,我们最后是要将它们转化为毫秒数处理才比较方便。