飘云 发表于 2010-11-23 18:55:47

求助求助~如何让Au3判断软件的音频状态

本帖最后由 飘云 于 2010-11-24 19:27 编辑

通过仿造jienis的超快超简单听音乐,我也写了个,差不多就是换个网址罢了(http://www.songtaste.com/radio.php),但是遇到个问题,就是此网址的音乐文件有些会读取不到或读取困难,这就会导致一直缓冲,我想要在它缓冲不下去或者缓冲实在太慢的时候,自动让程序点击“下一首”,但怎么让程序知道这个编译后的程序中的音频状态呢,因为此网页用的是WM播放器。初步构想是监视文字,当要缓冲时会出现[缓冲处理:完成 X%]的字样,这时开始计时,超过规定时限就换歌,不过能不能直观的判断这个软件的音频状态呢,无音频输出多少时间后换歌,这样更方便。。。。


#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include<IE.au3>
Opt("TrayOnEventMode",1)
Opt("TrayMenuMode",1)
Opt("GUIOnEventMode", 1)
TraySetOnEvent(-13,"mini")

$Form1 = GUICreate("SongTaste 用音乐倾听彼此",350,516,-1,-1)
GUISetBkColor(0x5C6C7C,$Form1)

$oIE = ObjCreate("Shell.Explorer.2")
$GUIActiveX= GUICtrlCreateObj($oIE,-3000,0,390,560)

$txt=GUICtrlCreateLabel( "正在载入播放器,请稍候...",70,200,240,30,-1,$WS_EX_TRANSPARENT)
GUICtrlSetColor(-1,0x9DB9EB)
GUICtrlSetFont(-1,12,800)
GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE, "main")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "main")

_IENavigate($oIE,"http://www.songtaste.com/radio.php")
GUICtrlSetState($txt,$GUI_HIDE)
GUICtrlSetPos($GUIActiveX,-7,0,390,560)

Dim $mini = 0

While 1
        sleep(200)
WEnd

Func main()
        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $GUI_EVENT_MINIMIZE
                        mini()
        EndSwitch
EndFunc

Func mini()
        if $mini = 0 Then
                GUISetState (@SW_HIDE,$Form1)
                $mini = 1
        Else
                GUISetState (@SW_SHOW,$Form1)
                $mini = 0
        endif
EndFunc

飘云 发表于 2010-11-23 19:14:26

现在看来这个文本的获取也不知道怎么获取了,那串文本是WMP的一部分,怎么才能在后台获取到那段文本呢。。。。

chenronting 发表于 2010-11-23 20:37:04

不好意思,不知道,帮顶,我也很想知道 .

19377708 发表于 2010-11-23 23:51:43

支持!!!

shenrenba 发表于 2010-11-24 09:21:42

本帖最后由 shenrenba 于 2010-11-24 12:07 编辑

#include <INet.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Global $musicdq = 0 ;当前播放的音乐
Global $musiczs = 1 ;音乐总数目
$Form1 = GUICreate("TEST", 623, 449, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Label1 = GUICtrlCreateLabel("", 72, 40, 388, 33)
$Button1 = GUICtrlCreateButton("上一首", 72, 104, 113, 41)
GUICtrlSetOnEvent(-1, "Button1Click")
$Button2 = GUICtrlCreateButton("下一首", 311, 103, 113, 41)
GUICtrlSetOnEvent(-1, "Button2Click")
GUISetState(@SW_SHOW)
$musicinfo = _Source("http://www.songtaste.com/radio.php")
play($musicinfo[$musicdq], $musicinfo[$musicdq], $musicinfo[$musicdq])
While 1
        Sleep(100)
WEnd

Func Button1Click()
        If $musicdq - 1 > 0 Then
                $musicdq -= 2
                play($musicinfo[$musicdq], $musicinfo[$musicdq], $musicinfo[$musicdq])
        EndIf
EndFunc   ;==>Button1Click
Func Button2Click()
        If $musicdq + 1 <= $musiczs Then play($musicinfo[$musicdq], $musicinfo[$musicdq], $musicinfo[$musicdq])
EndFunc   ;==>Button2Click
Func Form1Close()
        Exit
EndFunc   ;==>Form1Close
Func play($name, $people, $path)
        GUICtrlSetData($Label1, "歌曲名:" & $name & "---歌手:" & $people)
        $musicdq += 1
        If ProcessExists("wmplayer.exe") Then ProcessClose("wmplayer.exe")
        Sleep(1000)
        Run(@ProgramFilesDir & "\Windows Media Player\wmplayer.exe " & $path)
EndFunc   ;==>play
Func _Source($url)
        $source = _INetGetSource($url)
        $sr = StringRegExp($source, ', "([^"]*)', 3)
        Local $musicinfo
        For $i = 0 To UBound($sr) - 1 Step 5
                $musicinfo = $sr[$i]
                $musicinfo = $sr[$i + 1]
                $musicinfo = $sr[$i + 4]
                $musiczs += 1
        Next
        Return $musicinfo
EndFunc   ;==>_Source

lanfengc 发表于 2010-11-24 11:32:42

建议调用楼上的正则提取出歌曲列表,然后查看这个帖子中的WMP相关操作自己写播放器。
http://www.autoitx.com/forum.php?mod=viewthread&tid=2764&highlight=wmp

飘云 发表于 2010-11-24 15:00:15

本帖最后由 飘云 于 2010-11-24 15:05 编辑

感谢楼上两位,对于调用wmplaer.ocx我有点了解,通过wmplaer.ocx的接口playstate也能获取播放状态,当然这么做就要提取出歌曲列表了,但是如果歌曲列表被加密了呢,或者这网页不是依靠wmp播放的呢,如果是flash呢,那么又怎么让程序自动判断情况呢,所以我最希望的还是能检测本地软件的音频输出状态

飘云 发表于 2010-11-25 17:55:01

没人回了,顶一下帖子,期待高人
页: [1]
查看完整版本: 求助求助~如何让Au3判断软件的音频状态