找回密码
 加入
搜索
查看: 19051|回复: 76

[AU3基础] 读LRC歌词中的歌词作为变量逐步输出

 火... [复制链接]
发表于 2010-4-7 12:41:14 | 显示全部楼层 |阅读模式
我有一个lrc歌词文件,里面的内容如下格式:



[ti:连贝多芬都想告诉你]
[ar:萧闳仁]
[al:萧闳仁]
[by:李泽昊]
[04:28.00][00:02.00]萧闳仁 - 连贝多芬都想告诉你
[04:13.00][00:21.00]www.51lrc.com ▓ 李泽昊
[00:40.00]歌词吾爱 带你心飞
[05:38.15][05:09.67][04:43.00][04:11.49][03:44.40][03:19.17][02:43.34][02:16.00][01:50.80][01:25.55][00:59.00]
[01:01.51]我的抽屉 沾满灰尘
[01:07.50]有多久没整理
[01:13.69]浓浓哀伤在叹息
[01:19.91]我拿起了笔 写了古典
[02:54.71][01:26.71]第一乐章 我想告诉你
[03:00.84][01:32.37]我快要听不清楚
[03:07.32][01:38.52]非得要像休止符
[03:13.72][01:45.59]黑不拉几要断断续续
[04:44.60][03:19.97][01:51.50]连贝多芬 也都爱上你
[04:51.56][03:26.31][01:57.91]你说分开最美丽
[04:57.50][03:32.35][02:03.90]好! 我还想乐章在继续
[05:04.18][03:38.91][02:10.63]爱来爱去 爱不过是病
[05:10.57][03:45.15][02:16.77]连贝多芬 都想告诉你
[05:16.74][03:51.51][02:23.15]耳聋了 更有意义
[05:22.75][03:57.64][02:29.29]也许你只是下雨下在我的青草地
[05:29.36][04:04.23][02:35.72]等放晴了 就自然蒸发



我现在想把歌词按时间方式一个一个做为变量按时间输出到txt文本中。不知道可不可以实现?读的时候要把 []之内的数据都去掉的。

评分

参与人数 1金钱 +22 贡献 +1 收起 理由
lynfr8 + 22 + 1 很有意思的话题

查看全部评分

发表于 2010-4-7 12:43:25 | 显示全部楼层
这个有意思,应该不难,不过我现在没空,回头再弄
 楼主| 发表于 2010-4-7 12:49:36 | 显示全部楼层
谢谢你哦,我从昨天弄到现在了。没搞定。在论坛潜水快2年了。第一次发帖。希望有个结果。
发表于 2010-4-7 13:13:56 | 显示全部楼层
回复 3# jneyxwry


    你最好把要输出的样式举例出来~
 楼主| 发表于 2010-4-7 20:58:00 | 显示全部楼层
$dir = @ScriptDir&"\123.lrc"
$ti = "设置"
HotKeySet("{F1}","tian")
$i = 0
While 1
        Sleep(100)
WEnd       

Func tian()
        $a = WinExists($ti)
        If $a = 1 Then
                $var = IniReadSection($dir,"config")
                If Not @error Then                       
                        $i += 1

                        ControlSetText ($ti, "", 'Edit2', $var[$i][1] )
                            ControlClick ($ti, "", 'Button1')
                        If $i = $var[0][0] Then $i = 0
                EndIf       
        Else
                MsgBox(0,'提示','指定窗口“'&$ti&'”不存在,请检查!')
        EndIf       
EndFunc       


我这些代码是网上找的,感觉用起来很不爽啊要把东西都删掉。        就是读lrc文件。然后直接一行一行的写到 "设置" 窗口里的Edit2 里。
发表于 2010-4-7 21:40:44 | 显示全部楼层
$dir = @ScriptDir&"\123.lrc"
$ti = "设置"
HotKeySet("{F1}","tian")
$i = 0
While 1
        Sleep(100)
...
jneyxwry 发表于 2010-4-7 20:58


你这是做同步显示歌词,还是不用同步,只需全部输出就行?
发表于 2010-4-7 21:57:38 | 显示全部楼层
要按照里面的时间来输出才行的吧?我看不懂那些时间是怎么回事,要不我也写来玩玩。
发表于 2010-4-7 22:42:24 | 显示全部楼层
本帖最后由 afan 于 2010-4-7 22:52 编辑

将一楼的歌词文本保存为 “连贝多芬都想告诉你.lrc”
;
#include <Array.au3>
Local $lrc = '连贝多芬都想告诉你.lrc'
Local $str = FileRead($lrc)
Local $sR = StringRegExp($str, '\[\d\d:\d\d.\d\d\]', 3)
_ArraySort($sR)
Local $txt = '', $i, $_time
For $i = 0 To UBound($sR) - 1
        $_time = StringRegExpReplace($sR[$i], '(\[|\])', '\\$1')
        $txt &= StringRegExpReplace($str, '(?s).+?' & $_time & '(?:\[[^\]]+\])*([^\r]*).+', '$1') & @CRLF
        ;以上是做整体输出演示用,如需输出单行,下行即可。如需同步时间,也只需加上匹配经过时间=$sR[$i]
        ;MsgBox(0, 0, StringRegExpReplace($str, '(?s).+?' & $_time & '(?:\[[^\]]+\])*([^\r]*).+', '$1'))
Next
MsgBox(0, 0, $txt)

评分

参与人数 2金钱 +52 贡献 +5 收起 理由
lynfr8 + 22 + 5 厉害、佩服
C.L + 30 正则很强大,学习了

查看全部评分

发表于 2010-4-7 22:43:41 | 显示全部楼层
本帖最后由 C.L 于 2010-4-7 23:07 编辑

需要有些时间不知道是怎么回事,我去除了我不懂的,选懂的做了一个,挺好玩的,呵呵~~
我没写到文件里,建了个GUI的EDIT来显示,用的是事件模式,是为了可以随时结束,不被循环影响,时间为了看着快点,我调快了5倍,歌词前我加上了显示的时间,方便看,代码贴上来:
#include <GUIConstantsEx.au3>
#include <GUIConstantsEx.au3>
$str = _
                '[ti:连贝多芬都想告诉你]' & @CRLF & _
                '[ar:萧闳仁]' & @CRLF & _
                '[al:萧闳仁]' & @CRLF & _
                '[by:李泽昊]' & @CRLF & _
                '[04:28.00][00:02.00]萧闳仁 - 连贝多芬都想告诉你' & @CRLF & _
                '[04:13.00][00:21.00]www.51lrc.com ▓ 李泽昊' & @CRLF & _
                '[00:40.00]歌词吾爱 带你心飞' & @CRLF & _
                '[05:38.15][05:09.67][04:43.00][04:11.49][03:44.40][03:19.17][02:43.34][02:16.00][01:50.80][01:25.55][00:59.00]' & @CRLF & _
                '[01:01.51]我的抽屉 沾满灰尘' & @CRLF & _
                '[01:07.50]有多久没整理' & @CRLF & _
                '[01:13.69]浓浓哀伤在叹息' & @CRLF & _
                '[01:19.91]我拿起了笔 写了古典' & @CRLF & _
                '[02:54.71][01:26.71]第一乐章 我想告诉你' & @CRLF & _
                '[03:00.84][01:32.37]我快要听不清楚' & @CRLF & _
                '[03:07.32][01:38.52]非得要像休止符' & @CRLF & _
                '[03:13.72][01:45.59]黑不拉几要断断续续' & @CRLF & _
                '[04:44.60][03:19.97][01:51.50]连贝多芬 也都爱上你' & @CRLF & _
                '[04:51.56][03:26.31][01:57.91]你说分开最美丽' & @CRLF & _
                '[04:57.50][03:32.35][02:03.90]好! 我还想乐章在继续' & @CRLF & _
                '[05:04.18][03:38.91][02:10.63]爱来爱去 爱不过是病' & @CRLF & _
                '[05:10.57][03:45.15][02:16.77]连贝多芬 都想告诉你' & @CRLF & _
                '[05:16.74][03:51.51][02:23.15]耳聋了 更有意义' & @CRLF & _
                '[05:22.75][03:57.64][02:29.29]也许你只是下雨下在我的青草地' & @CRLF & _
                '[05:29.36][04:04.23][02:35.72]等放晴了 就自然蒸发' & @CRLF
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()
$aStr = StringRegExp($str, "(\[.*\])([^\]]+)\r", 3)
$maxtime = $aStr[UBound($aStr) - 2]
$out = ""
$t = TimerInit()
While 1
        For $i = 0 To UBound($aStr) - 1
                $time = StringRegExp($aStr[$i], "\[(.*?)\.", 3)
                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
                                        $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

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

发表于 2010-4-7 22:56:37 | 显示全部楼层
回复 9# C.L


    我也觉得这个话题有意思,呵呵
发表于 2010-4-7 22:58:31 | 显示全部楼层
回复 10# afan

是啊,挺有意思。
我看你的代码,你的正则真的很强大,佩服。
发表于 2010-4-7 23:01:10 | 显示全部楼层
回复 11# C.L


    瞎掰的,呵呵~
发表于 2010-4-7 23:11:54 | 显示全部楼层
回复 12# afan

正则我没怎么去研究过,只懂一点点,不过我是偶尔用用,本着够用就好,够用就好(自我解嘲),呵呵~
发表于 2010-4-7 23:16:57 | 显示全部楼层
回复 13# C.L


    我也差不多,一遍都没看完过,也就玩些常用的~

p.s, 运行了下你的代码,你完全可以整个歌词播放器玩玩了,呵呵
 楼主| 发表于 2010-4-7 23:41:19 | 显示全部楼层
afan 哥的我好像运行不了。直接提示个0。就没了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-16 12:58 , Processed in 0.092840 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表