研究这长的歌词技术,今天才发现最精简的!
演示:[url=http://aboutplayer.com/box]http://aboutplayer.com/box[/url]代码:
function lrcrun(){
var rtl="|"+tl;
if(rtl.indexOf("|"+Cs+"|") != -1){
$("LrcDiv").scrollTop=$("T_"+Cs).offsetTop-parseInt($("LrcDiv").clientHeight/2)+9;
if($("T_"+St)) $("T_"+St).className="a";
$("T_"+Cs).className="b";
St=Cs;
}
}
function ldL() {if(MPlayer.playState==3) {Cs=Math.floor(MPlayer.controls.CurrentPosition+ffbb); lrcrun();} lrcT=setTimeout("ldL()", 1000);}
欢迎讨论! :P :ohh: :lol: 不错,值得分享 效果不错~~ 比较喜欢他的方式 不错, 不错!!!! 牛人一个 楼主是这方面的专家 楼主是LRC方面的强人 作过记号............ 不错 *** 作者被禁止或删除 内容自动屏蔽 *** 大家过奖了! *** 作者被禁止或删除 内容自动屏蔽 *** 乱扯,根本是因为还有其他JS里有相关内容,楼主不厚道,贴出来的代码根本完成不了需要! 关键是在服务器端已对歌词按时间标签进行了排序处理,客户端就省了这个步骤,代码量减少一大半以上,比如:
[url=http://aboutplayer.com/box/inc/lyrics.asp?song=孤单爱情海]http://aboutplayer.com/box/inc/lyrics.asp?song=孤单爱情海[/url]
[code]
<!--#include file="inc.asp"--><%
response.charset="gb2312"
Response.ContentType="application/xml"
Response.Write "<?xml version=""1.0"" encoding=""gb2312""?>"&vbNewLine
dim song
dim tPage,tContent
dim re,LinkArray,lrcContent
Dim TagStr,LrcStr,TagArray,LrcArray,TagCount,i
dim xmlDom,rootNode,itemNode
set xmlDom=Server.CreateObject("msxml2.FreeThreadedDOMDocument.3.0")
xmlDom.appendChild(XmlDom.createElement("root"))
song=request("song")
tPage="http://mp3.baidu.com/m?f=ms&tn=baidump3lyric&ct=150994944&lf=2&rn=10&word="&song&"&lm=-1&ie=gb2312"
tContent=getPage(tPage,"gb2312")
set re=new regexp
re.global=true
re.ignorecase=true
re.pattern="<a href=""[^>]+?""[^>]*>LRC歌词<\/a>"
set LinkArray=re.execute(tContent)
if LinkArray.Count>0 then
lrcContent=getPage(getContent(LinkArray(0),"""","""",0),"gb2312")
lrcContent=replace(replace(lrcContent,"www.51lrc.com","Lrc.Feiyes.Net"),"歌词吾爱","飞叶在线")
FormatLrc
for i=0 to TagCount
set itemNode=xmlDom.documentElement.appendChild(xmlDom.createNode(1,"item",""))
itemNode.appendChild(xmlDom.createNode(1,"time","")).text=ToInt(TagArray(i),0)
itemNode.appendChild(xmlDom.createNode(1,"lrc","")).appendChild(xmlDom.createNode(4,"","")).text=LrcArray(i)
next
else
set itemNode=xmlDom.documentElement.appendChild(xmlDom.createNode(1,"item",""))
itemNode.appendChild(xmlDom.createNode(1,"time","")).text="0000"
itemNode.appendChild(xmlDom.createNode(1,"lrc","")).appendChild(xmlDom.createNode(4,"","")).text="当前歌曲没有歌词"
end if
response.write XmlDom.Xml
'获取每个时间标签及对应的歌词,主要对TagStr,LrcStr赋值
Sub FormatLrc
Dim Re,i,j
Dim RowArray,RowCount,LrcInRow,TagInRow
TagStr=""
LrcStr=""
Set Re=New RegExp
Re.Global=true
Re.Ignorecase=true
Re.Pattern="\[\d+:\d+(\.\d+)?\]([^\n|\r]*)"
Set RowArray=Re.Execute(lrcContent)
RowCount=RowArray.Count
For i=0 To RowCount-1
Re.Pattern="\[\d+:\d+(\.\d+)?\]"
LrcInRow=Re.Replace(RowArray(i),"")
Set TagInRow=Re.Execute(RowArray(i))
For j=0 To TagInRow.Count-1
TagStr=TagStr&"|-$-|"&Tag2Num(TagInRow(j))
LrcStr=LrcStr&"|-$-|"&LrcInRow
Next
Next
Set Re=Nothing
ReOrderStr
End Sub
'对时间标签和对应的歌词字符串重新排序!
Sub ReOrderStr
Dim i,j
Dim TagT,LrcT
TagArray=Split(TagStr,"|-$-|")
LrcArray=Split(LrcStr,"|-$-|")
TagCount=UBound(TagArray)
For i=1 To TagCount-1
For j=1 To i
If TagArray(i+1)-TagArray(j)<0 Then
'歌词对换
LrcT=LrcArray(j)
LrcArray(j)=LrcArray(i+1)
LrcArray(i+1)=LrcT
'时间标签对换
TagT=TagArray(j)
TagArray(j)=TagArray(i+1)
TagArray(i+1)=TagT
End If
Next
Next
End Sub
Function Tag2Num(TagStr) '标签转换成数值
Dim Pos1, Pos2
Dim mi, se, ms
TagStr = Replace(TagStr, "[", "")
TagStr = Replace(TagStr, "]", "")
Pos1 = Instr(TagStr, ":")
Pos2 = Instr(TagStr, ".")
mi = Left(TagStr, Pos1 - 1)
If (Pos2 > 0) Then
se = Mid(TagStr, Pos1 + 1, Pos2 - Pos1 - 1)
ms = Mid(TagStr, Pos2 + 1)
If (Len(ms) = 1) Then
ms = ms * 100
ElseIf (Len(ms) = 2) Then
ms = ms * 10
End If
Tag2Num = (mi * 60 + se) * 1000 + ms
Else
se = Mid(TagStr, Pos1 + 1)
Tag2Num = (mi * 60 + se) * 1000
End If
Tag2Num=Tag2Num\1000
End Function
%>
[/code] 看不动。 [quote]原帖由 [i]fyes[/i] 于 2007-9-28 11:02 发表 [url=http://www.im286.com/redirect.php?goto=findpost&pid=21673835&ptid=2174962][img]http://www.im286.com/images/common/back.gif[/img][/url]
关键是在服务器端已对歌词按时间标签进行了排序处理,客户端就省了这个步骤,代码量减少一大半以上,比如:
[url]http://aboutplayer.com/box/inc/lyrics.asp?song=[/url]孤单爱情海
0 then
lrcContent=getPage(getC ... [/quote]
我还纳闷呢,怎么都没时间分析的部分就能播LRC。。原来服务器端处理了
这样就破坏了LRC的原格式了。
个人不赞同这种做法!
页:
[1]
2
