找回密码
 加入
搜索
楼主: jneyxwry

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

 火... [复制链接]
发表于 2010-4-8 20:34:37 | 显示全部楼层
回复 45# jneyxwry


    这个对于每首歌来说延时都应该是个定值吧。所以用快进或快退不合适,只需先设定一个定值即可,如 $t = 1000,或$t = -1000
然后加在如我41#代码中的第15行代码尾部Then前面即可
 楼主| 发表于 2010-4-8 21:23:01 | 显示全部楼层
应该可以吧。就是把当时的时候+秒数再跟歌词的时间去作对比
发表于 2010-4-8 21:52:40 | 显示全部楼层
我不知道你具体是做什么用。
如果只是作调试用,那可以用热键控制 $t 值的大小,并在调试同步后自动输出$t 延时值的大小。
如果不是调试用,而是做自动同步,那用热键控制 $t 值的大小就不合适了,难道每次播放不同步的歌曲时都要手动去调整快进、快退不成?
 楼主| 发表于 2010-4-8 23:10:09 | 显示全部楼层
就是 调试用 。 因为我这个是写入在记事本里的。 当我听到对方的声音之后我才开始打开,或是我先打开歌词了音乐还没开始响。所以我想可以适当的调整一下速度。
发表于 2010-4-8 23:11:52 | 显示全部楼层
回复 49# jneyxwry


    那我改一下~
 楼主| 发表于 2010-4-8 23:16:21 | 显示全部楼层
最好是设置热键。比如  按 + 号就加1秒   按 - 号就延迟 1秒。
发表于 2010-4-8 23:27:15 | 显示全部楼层
热键 + 快进
热键 - 快退
热键 Esc 退出
1000 延时的增量(毫秒)
;
#include <Array.au3>

HotKeySet('{NUMPADADD}', 'kj') ;注册热键 + 快进
HotKeySet('{NUMPADSUB}', 'kt') ;注册热键 - 快退
HotKeySet('{Esc}', '_exit')    ;注册热键 Esc 退出
Dim $zl = 1000 ;延时的增量(毫秒)
Dim $t = 0, $exit = 0
Dim $lrc = '连贝多芬都想告诉你.lrc'
Local $str = FileRead($lrc)
Local $sR = StringRegExp($str, '\[\d\d:\d\d\.\d\d\]', 3)
_ArraySort($sR)
Local $txt = '', $i, $_time, $t_lrc
$begin = TimerInit()
For $i = 0 To UBound($sR) - 1
        $_time = StringRegExpReplace($sR[$i], '(\[|\])', '\\$1')
        $txt = StringRegExpReplace($str, '(?s).+?' & $_time & '(?:\[[^\]]+\])*([^\r]*).+', '$1')
        While 1
                Sleep(10)
                If $exit Then ExitLoop 2 ;esc按键已按下退出
                $t_lrc = Execute(StringRegExpReplace($sR[$i], '\[(\d\d):(\d\d)\.(\d\d)\]', '$1*60*1000+$2*1000+$3*10'))
                If Round(TimerDiff($begin)) >= ($t_lrc + $t) Then
                        ToolTip($txt, 0, 0) ;这里的$txt即需要的文本变量,输出只需改动此行。
                        ExitLoop
                EndIf
        WEnd
Next

Func kj()
        $t -= $zl
EndFunc   ;==>kj
Func kt()
        $t += $zl
EndFunc   ;==>kt
Func _exit()
        $exit = 1
EndFunc   ;==>_exit
发表于 2010-4-8 23:37:04 | 显示全部楼层
注意这里的快退并非真正意义上的倒退,因为并没有倒退,只是增加在当前时间的等待而已。
如果要真正倒退,外面还需套加个循环、判断等。
 楼主| 发表于 2010-4-8 23:42:02 | 显示全部楼层
谢谢超级版主。这就是我想要的目的。

想问一下

If Round(TimerDiff($begin)) >= ($t_lrc + $t) Then

这一句的意思是不是   IF 当前循环中的时间  大于等于  (歌词的时候+延迟的时间) then
发表于 2010-4-8 23:45:44 | 显示全部楼层
回复 54# jneyxwry


    是的,延迟时间如果是负值则相当于 (歌词的时间 - 延时) 即快进
 楼主| 发表于 2010-4-8 23:51:06 | 显示全部楼层
那我有点想不通。

Func kj()
        $t -= $zl
EndFunc   ;==>kj

当按了快进之后 $t的值就=-1000 了。然后在
If Round(TimerDiff($begin)) >= ($t_lrc + $t) Then

这个里面的 ($t_lrc + $t)  不就等于 ($t_lrc -1000)  了吗。 那这个$t 一直是1000 那不是一直都要快一拍吗?
发表于 2010-4-8 23:55:48 | 显示全部楼层
那我有点想不通。

Func kj()
        $t -= $zl
EndFunc   ;==>kj

当按了快进之后 $t的值就=-1000  ...
jneyxwry 发表于 2010-4-8 23:51


这有什么想不通,如果$t=0的话就又回到调整延时之前的差距了~
要知道,这里调的是歌词的时间$t_lrc,而不是当前经过时间TimerDiff($begin)
 楼主| 发表于 2010-4-9 00:10:58 | 显示全部楼层
哦对,谢谢你!
发表于 2010-4-9 23:01:41 | 显示全部楼层
学习下,,,,,,
发表于 2010-4-9 23:33:44 | 显示全部楼层
本帖最后由 yuheduo 于 2010-4-9 23:48 编辑

我2008年8月11日(我看我的文件的日期了)做的,一个,今天用3.3.5.6本也能运行啊
共享万岁,我传的是源码哦!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1威望 +1 金钱 +20 收起 理由
afan + 1 + 20

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-19 05:42 , Processed in 0.111672 second(s), 18 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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