本帖最后由 C.L 于 2010-4-8 00:49 编辑
回复 34# jneyxwry
写注释哦....我晕,最怕写这个...我文字表达能力不行的.
先给你一个读外部lrc文件的代码,文件名和读取是从afan那代码拿过来的(^_^):
顺便改下,把注释加上#include <GUIConstantsEx.au3>
Local $lrc = '连贝多芬都想告诉你.lrc'
Local $str = FileRead($lrc)
Opt("GUIOnEventMode", 1);开启事件模式
MsgBox (0,"原始Lrc文件",$str)
$Form = GUICreate("Test", 413, 566, @DesktopWidth / 2 - 150, @DesktopHeight / 2 - 320)
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
$Edit = GUICtrlCreateEdit("", 1, 8, 408, 550)
GUICtrlSetData(-1, "")
GUISetState();以上是建立GUI
$aStr = StringRegExp($str, "(\[.*\])([^\]]+)\r", 3);将从文件读出来的内容分开存入数组.
$out = ""
$t = TimerInit();初始化时间
While 1
For $i = 0 To UBound($aStr) - 1 ;循环读取数组
$time = StringRegExp($aStr[$i], "\[(.*?)\.", 3);逐条将数组内的时间提取到数组$time中
If IsArray($time) Then
For $j = 0 To UBound($time) - 1 ;如果数组内时间读取成功,循环检查时间
$tmptime = StringSplit($time[$j], ":")
$tagtime = $tmptime[1] * 60 + $tmptime[2];将时间分成分钟和秒,并转换成秒数.
If Round(TimerDiff($t) / 1000, 2) == Round($tagtime / 5, 2) Then ;如果和当前运行的时间一致,(这里我进行了调速,如果要按正常时间输出,将Round($tagtime / 5,2)改成Round($tagtime,2)即可
$out &= $tmptime[1] & ":" & $tmptime[2] & @TAB & $aStr[$i + 1] & @CRLF
GUICtrlSetData($Edit, $out);在窗口逐条输出歌词
Sleep(200)
If $tagtime == "329" Then
Sleep (3000)
GUICtrlSetData($Edit, $out & @CRLF & @TAB & "**********end**********");输出结束标志
ExitLoop
EndIf
EndIf
Next
EndIf
Next
WEnd
Func _exit()
Exit
EndFunc ;==>_exit
|