了解歌词同步原理,我们可以想到要做如下工作:
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);
上面的代码很简单,关键一个函数是getNo