我尝试使用 Windows Media Player 通过 COM 播放音频文件。
下面的代码在VBS中运行良好:
Set wmp = CreateObject("WMPlayer.OCX")
wmp.settings.autoStart = True
wmp.settings.volume = 50
wmp.URL = "C:\Windows\Media\tada.wav"
while wmp.Playstate <> 1
WSH.Sleep 100
wend
不幸的是,相同的代码在 Python 中不播放任何声音:
import win32com.client
import time
wmp = win32com.client.dynamic.Dispatch("WMPlayer.OCX")
wmp.settings.autoStart = True
wmp.settings.volume = 50
wmp.URL = r"C:\Windows\Media\tada.wav"
while wmp.Playstate != 1:
time.sleep(0.1)
COM 交互似乎工作起来很困难,因为我可以创建新的媒体对象并查询有关它们的信息。只是始终听不到任何声音。
>>> media = wmp.newMedia(r"C:\Windows\Media\tada.wav")
>>> media.durationString
'00:01'
>>> wmp.currentMedia = media
>>> wmp.play() # No sound audible.
>>> wmp.PlayState
9 # wmppsTransitioning
PlayState
总是被报道为wmppsTransitioning http://msdn.microsoft.com/en-us/library/windows/desktop/dd564881%28v=vs.85%29.aspx, 不管我做什么。
该问题出现在 Python2.7、3.2 和 3.3 以及最后两个 PyWin32 版本(218 和 219)中。操作系统是Windows 7 x64,Python解释器都是为32位编译的。WMPlayer.OCX
可以成功加载并且COM可以工作,所以我不认为这是32位/64位DLL的问题。
知道为什么它适用于 VBS 而不适用于 Python 吗?我怎样才能进一步调试这个?