找回密码
 加入
搜索
查看: 4055|回复: 7

[系统综合] 求助求助~如何让Au3判断软件的音频状态

  [复制链接]
发表于 2010-11-23 18:55:47 | 显示全部楼层 |阅读模式
本帖最后由 飘云 于 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的一部分,怎么才能在后台获取到那段文本呢。。。。
发表于 2010-11-23 20:37:04 | 显示全部楼层
不好意思,不知道,帮顶,我也很想知道 .
发表于 2010-11-23 23:51:43 | 显示全部楼层
支持!!!
发表于 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][0], $musicinfo[$musicdq][1], $musicinfo[$musicdq][2])
While 1
        Sleep(100)
WEnd

Func Button1Click()
        If $musicdq - 1 > 0 Then
                $musicdq -= 2
                play($musicinfo[$musicdq][0], $musicinfo[$musicdq][1], $musicinfo[$musicdq][2])
        EndIf
EndFunc   ;==>Button1Click
Func Button2Click()
        If $musicdq + 1 <= $musiczs Then play($musicinfo[$musicdq][0], $musicinfo[$musicdq][1], $musicinfo[$musicdq][2])
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[Int(UBound($sr) / 5)][3]
        For $i = 0 To UBound($sr) - 1 Step 5
                $musicinfo[Int($i / 5)][0] = $sr[$i]
                $musicinfo[Int($i / 5)][1] = $sr[$i + 1]
                $musicinfo[Int($i / 5)][2] = $sr[$i + 4]
                $musiczs += 1
        Next
        Return $musicinfo
EndFunc   ;==>_Source
发表于 2010-11-24 11:32:42 | 显示全部楼层
建议调用楼上的正则提取出歌曲列表,然后查看这个帖子中的WMP相关操作自己写播放器。
http://www.autoitx.com/forum.php ... 4&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 | 显示全部楼层
没人回了,顶一下帖子,期待高人
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-10 18:22 , Processed in 0.078498 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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