涉及几个问题。
首先,需要有LRC文件,可以放在本地或者用Ajax读取。
其次需要解析LRC文件,生成排序的数组。下面的代码供参考。
最后,利用<audio>标签的currentTime属性获得当前播放的时间,实时刷新歌词显示。具体的显示代码可做成单行(最简单,替换标签内文本即可)、双行或者多行高亮都可以。
function parseLyric(text) {lyric = text.split('\r\n') //先按行分割
var _l = lyric.length //获取歌词行数
lrc = new Array() //新建一个数组存放最后结果
for(i=0i<_li++) {
var d = lyric[i].match(/\[\d{2}:\d{2}((\.|\:)\d{2})\]/g) //正则匹配播放时间
var t = lyric[i].split(d) //以时间为分割点分割每行歌词,数组最后一个为歌词正文
if(d != null) { //过滤掉空行等非歌词正文部分
//换算时间,保留两位小数
var dt = String(d).split(':')
var _t = Math.round(parseInt(dt[0].split('[')[1])*60+parseFloat(dt[1].split(']')[0])*100)/100
lrc.push([_t, t[1]])
}
return lrc
}
按照你的说法,应该要用到Ajax,对网页中播放器插件进行帧听,然后再对歌词部分进行处理,百度的Mp3就是这样做的。 下面就简单的说一下吧 材料:歌曲、歌曲对应的歌词(可以是XML,当然也可以是歌词专用格式lrc,随便啦,什么文件都可以)、几条简单的JS语句 处理: 1、JSP生成网页的时候,将音乐播放器插件的ID命名为WMA,当然,你可以随便命名,只是这里便于说明。 2、读取XML或LRC内容,利用Ajax加载到id为lrc的div中。 并将XML或LRC的每行的歌词存到数组testmp3中(此数组当然是二维数组,数据组分别播放时间与歌词内容) 好了,到此,准备工作就做好了,下面就是重点---歌词同步。 3、相关语句: 一、定义函数getWMAtime 二、利用Interval=setInterval("getWMAtime()",900),意思就是每隔900毫秒调用getWMAtime这个函数,并将其放入Interval中。 如果要用到“上一曲”“下一曲”,可以将其做为了一个函数, 将音乐的地址赋给WMA.URL,用WMA.controls.play()播放,用WMA.controls.stop()停止播放,用WMA.controls.pause()暂停播放。改变了音乐地址后,记得用Ajax载入新的歌词! 另: getWMAtime函数的内容为读取当前词曲的播放时间 当前的播放时间:WMA.controls.currentPosition歌曲总时间:WMA.currentMedia.duration读取当前的时候后,与数组中时间项进行对比,相同(由于其它原因,可能会出现不相同的情况,因此则用“>=”)则用Ajax对id为lrc的div进行更改,具体怎么改那就随便你咯,一般就是改变一下指定行的颜色。 如果前当播放时间==歌曲总时间,那么就用clearInterval(Interval),停止Interval继续调用。 好了,一个简单的JS的歌词同步播放器就完工啦参考资料:网上查的资料第一:将<meta http-equiv="Content-Type" content="text/htmlcharset=GB2312" />中的GB2312改为UTF-8
第二:将lrc歌词文件用UltraEdit打开另存时,选择格式为UTF8-无BOM
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)