找回密码
 加入
搜索
查看: 4809|回复: 5

[AU3基础] 歌词同步显示闪烁

[复制链接]
发表于 2010-4-10 18:35:52 | 显示全部楼层 |阅读模式
本帖最后由 woeiwoei 于 2010-4-12 18:04 编辑
#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#include <File.au3>
#include <Array.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <sound.au3>
#include <Date.au3>
Opt("MustDeclareVars", 0)
$work=0
Dim $neirong[9999]
idopen()
$line_1=0
Dim $shijian
Dim $sjpd
Dim $geshu
$tm=0
$numold=0
$num=0
Global Const $AC_SRC_ALPHA = 1

Global $old_string = "", $runthis = ""
Global $launchDir = @DesktopDir

_GDIPlus_Startup()
$pngSrc = @ScriptDir & "\pifu.png"
$hImage = _GDIPlus_ImageLoadFromFile($pngSrc)


$width = _GDIPlus_ImageGetWidth($hImage)
$height = _GDIPlus_ImageGetHeight($hImage)


$GUI = GUICreate("my", $width,$height, -1,-1, $WS_POPUP, $WS_EX_LAYERED)
SetBitmap($GUI, $hImage, 0)

GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
GUISetState()
WinSetOnTop($GUI, "", 1)

For $i = 0 To 255 Step 10
    SetBitmap($GUI, $hImage, $i)
Next

$controlGui = GUICreate("ControlGUI", $width,$height, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $GUI)
GUICtrlSetBkColor($controlGui , $GUI_BKCOLOR_TRANSPARENT)

GUICtrlCreatePic(@ScriptDir & "\grey.gif", 0, 0, $width, $height)
GUICtrlSetState(-1, $GUI_DISABLE)

GUICtrlCreateLabel("正在播放 周杰伦-稻香", 50,40, 240, 50)
;GUICtrlSetFont(-1, 12, 400, 0, "方正美黑简体")
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$Label1 = GUICtrlCreateLabel("", 55,110, 214, 50)
GUICtrlSetFont(-1, 12, 400, 0, "方正美黑简体")
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)


$Label2 = GUICtrlCreateLabel("",  55,110, 214, 50)
GUICtrlSetFont(-1, 12, 400, 0, "方正美黑简体")
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFF0080)

GUISetState()
 $sound = _SoundOpen("zhoujielun-daoxiang.mp3")
            _SoundPlay($sound)
            $work=1
            $line_1=0
                        
                        
                        
                        
$data = 0
$begin = TimerInit()
Func rgc($num)
            ControlSetText ("",GUICtrlRead($Label2), $Label2, StringMid(StringMid($neirong[$line_1-1],11),1,$num)) 
        EndFunc
 
While 1
    $msg = GUIGetMsg()
    $dif = TimerDiff($begin)
    $data = $dif/1000
        $data = Round($data, 2)
         If $work=1 Then
        $tm=_SoundPos ( $sound,2)
    
 
If $tm>=Int((StringMid($neirong[$line_1],2,2))*60*1000+Int(StringMid($neirong[$line_1],5,2))*1000+Int(StringMid($neirong[$line_1],8,2))) Then
    $shijian=Int((StringMid($neirong[$line_1+1],2,2))*60*1000+Int(StringMid($neirong[$line_1+1],5,2))*1000+Int(StringMid($neirong[$line_1+1],8,2)))-Int((StringMid($neirong[$line_1],2,2))*60*1000+Int(StringMid($neirong[$line_1],5,2))*1000+Int(StringMid($neirong[$line_1],8,2)))
            GUICtrlSetData($Label1,StringMid($neirong[$line_1],11))
            GUICtrlSetFont($Label1, 14, 400, 0, "方正美黑简体")
            GUICtrlSetColor($Label1, 0xFFFFFF)
            GUICtrlSetBkColor($Label1, $GUI_BKCOLOR_TRANSPARENT)
            GUICtrlSetData($Label2,"")
            GUICtrlSetFont($Label2, 14, 400, 0, "方正美黑简体")
            GUICtrlSetColor($Label2, 0xFF0080)
            GUICtrlSetBkColor($Label2, $GUI_BKCOLOR_TRANSPARENT)
            $geshu=StringLen(StringMid($neirong[$line_1],11))
            If $geshu>0 Then
            $sjpd=$shijian/($geshu)
        EndIf
    
            $line_1+=1
        EndIf
                ;------------------------------------------------------------------红字歌词循环
    $num=Ceiling($geshu-(Int((StringMid($neirong[$line_1],2,2))*60*1000+Int(StringMid($neirong[$line_1],5,2))*1000+Int(StringMid($neirong[$line_1],8,2)))-$tm)/$sjpd)
                 
 
                If $num>=0 And $num <> $numold And $line_1>0 Then                    
                                        ControlSetText("",GUICtrlRead($Label2), $Label2, StringMid(StringMid($neirong[$line_1-1],11),1,$num)) 
                    $numold    =$num
                        EndIf
                ;------------------------------------------------------------------            
        
        If $tm=_SoundLength ( $sound,2) Then _SoundClose ( $sound )
        EndIf
                

    Select
   
        Case $msg = $GUI_EVENT_CLOSE
            Exit
    EndSelect
WEnd



GUIDelete($controlGui)

For $i = 255 To 0 Step -10
    SetBitmap($GUI, $hImage, $i)
Next


_WinAPI_DeleteObject($hImage)
_GDIPlus_Shutdown()



Func GoAutoComplete()
_GUICtrlComboBox_AutoComplete($Combo)
EndFunc   


Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
    If ($hWnd = $GUI) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION
EndFunc 


Func SetBitmap($hGUI, $hImage, $iOpacity)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend

    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
EndFunc  


Func _ShellExecute($sCmd, $sArg = "", $sFolder = "", $rState = @SW_SHOWNORMAL)
    $aRet = DllCall("shell32.dll", "long", "ShellExecute", _
            "hwnd", 0, _
            "string", "", _
            "string", $sCmd, _
            "string", $sArg, _
            "string", $sFolder, _
            "int", $rState)
    If @error Then Return 0

    $RetVal = $aRet[0]
    If $RetVal > 32 Then
        Return 1
    Else
        Return 0
    EndIf
EndFunc  



Func idopen()
            $var="稻香.lrc"
        If $var<>"" Then 
            Local $aArray
            _FileReadToArray ( $var, $aArray)
            For $i=0 To $aArray[0]-1
                    If $aArray[$i+1]="" Then ExitLoop
                $neirong[$i]=$aArray[$i+1]
            Next
EndIf
EndFunc
 
各位大叔大婶,小弟感觉这个播放器挺好玩的,但是发现LRC显示的时候闪烁严重。
现在修改了下,但是还是有点闪烁。请大叔大婶们帮忙给看看啊。

带歌附件太大。麻烦大家自己下下歌吧。。最新发现,开个IE就没彩色字了?
没有解决。我依然坚持得到答案~~~

本帖子中包含更多资源

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

×
 楼主| 发表于 2010-4-10 18:57:06 | 显示全部楼层
谁来帮俺看看啊?afan大侠? 啊p大侠?帽子大哥?还是路过的牛人??
发表于 2010-4-10 20:56:16 | 显示全部楼层
我的帖子解决了
发表于 2010-4-11 00:50:57 | 显示全部楼层
逐字变色,没有每个字的停留时长的数据,反而会造成感觉与歌唱不同步,这不是阿拉OK呀~~
不好玩~
 楼主| 发表于 2010-4-11 19:24:03 | 显示全部楼层
逐字变色,没有每个字的停留时长的数据,反而会造成感觉与歌唱不同步,这不是阿拉OK呀~~
不好玩~
afan 发表于 2010-4-11 00:50


老大,给帮个忙啊。只要能让它不闪就可以了。。顺便学习一下~~
额。那我有时间给你找个好玩的。。
 楼主| 发表于 2010-4-11 19:25:00 | 显示全部楼层
我的帖子解决了
yuheduo 发表于 2010-4-10 20:56



    我这边改的 闪的不严重了。但是还有点闪。。
大哥你的咋解决的呢?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-26 15:40 , Processed in 0.081813 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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