afan
发表于 2010-4-8 20:34:37
回复 45# jneyxwry
这个对于每首歌来说延时都应该是个定值吧。所以用快进或快退不合适,只需先设定一个定值即可,如 $t = 1000,或$t = -1000
然后加在如我41#代码中的第15行代码尾部Then前面即可
jneyxwry
发表于 2010-4-8 21:23:01
应该可以吧。就是把当时的时候+秒数再跟歌词的时间去作对比
afan
发表于 2010-4-8 21:52:40
我不知道你具体是做什么用。
如果只是作调试用,那可以用热键控制 $t 值的大小,并在调试同步后自动输出$t 延时值的大小。
如果不是调试用,而是做自动同步,那用热键控制 $t 值的大小就不合适了,难道每次播放不同步的歌曲时都要手动去调整快进、快退不成?
jneyxwry
发表于 2010-4-8 23:10:09
就是 调试用 。 因为我这个是写入在记事本里的。 当我听到对方的声音之后我才开始打开,或是我先打开歌词了音乐还没开始响。所以我想可以适当的调整一下速度。
afan
发表于 2010-4-8 23:11:52
回复 49# jneyxwry
那我改一下~
jneyxwry
发表于 2010-4-8 23:16:21
最好是设置热键。比如按 + 号就加1秒 按 - 号就延迟 1秒。
afan
发表于 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
afan
发表于 2010-4-8 23:37:04
注意这里的快退并非真正意义上的倒退,因为并没有倒退,只是增加在当前时间的等待而已。
如果要真正倒退,外面还需套加个循环、判断等。
jneyxwry
发表于 2010-4-8 23:42:02
谢谢超级版主。这就是我想要的目的。
想问一下
If Round(TimerDiff($begin)) >= ($t_lrc + $t) Then
这一句的意思是不是 IF 当前循环中的时间大于等于(歌词的时候+延迟的时间) then
afan
发表于 2010-4-8 23:45:44
回复 54# jneyxwry
是的,延迟时间如果是负值则相当于 (歌词的时间 - 延时) 即快进
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 那不是一直都要快一拍吗?
afan
发表于 2010-4-8 23:55:48
那我有点想不通。
Func kj()
$t -= $zl
EndFunc ;==>kj
当按了快进之后 $t的值就=-1000...
jneyxwry 发表于 2010-4-8 23:51 http://www.autoitx.com/images/common/back.gif
这有什么想不通,如果$t=0的话就又回到调整延时之前的差距了~
要知道,这里调的是歌词的时间$t_lrc,而不是当前经过时间TimerDiff($begin)
jneyxwry
发表于 2010-4-9 00:10:58
哦对,谢谢你!
viplight
发表于 2010-4-9 23:01:41
学习下,,,,,,
yuheduo
发表于 2010-4-9 23:33:44
本帖最后由 yuheduo 于 2010-4-9 23:48 编辑
我2008年8月11日(我看我的文件的日期了)做的,一个,今天用3.3.5.6本也能运行啊
共享万岁,我传的是源码哦!