首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PlaySound()时不会产生声音

使用PlaySound()时不会产生声音
EN

Stack Overflow用户
提问于 2018-05-25 18:38:10
回答 2查看 1.5K关注 0票数 1

基本上,我想在ctype中使用PlaySound()函数。

是的,我知道winsound模块是建立在它之上的,我可以使用它,但我有理由不这样做:)

在C语言中,我会这样调用这个函数:

代码语言:javascript
复制
PlaySound("sound.wav", NULL, SND_FILENAME);

我有我的Python脚本等价:

代码语言:javascript
复制
import ctypes

winmm = ctypes.WinDLL('winmm.dll')

winmm.PlaySound("sound.wav", None, 0x20000)

我运行它,没有错误返回,但声音也不播放。

我怀疑问题在于十六进制值(0x20000),因为其他一切似乎都很好。我得到了这样的价值:

代码语言:javascript
复制
import winsound
print(hex(winsound.SND_FILENAME))

或者以另一种方式:

代码语言:javascript
复制
import ctypes, winsound

winmm = ctypes.WinDLL('winmm.dll')

winmm.PlaySound("sound.wav", None, winsound.SND_FILENAME)

那么,我如何才能使这个工作,使我的文件播放?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-26 00:27:54

在Windows中,有Unicode和ANSI版本的函数。文档表示文件名是LPCTSTR。对于定义为LPCSTR的ANSI版本,对于Unicode,它是LPCWSTR

下面是调用Windows函数的正确方法。通常,您需要函数的W版本。定义.argtypes.restype也有助于进行错误检查。正如您所发现的,您可能传递错误的类型,它将无法工作。在定义了.argtypes之后,将捕获不兼容类型。

代码语言:javascript
复制
from ctypes import *
from ctypes import wintypes as w

dll = WinDLL('winmm')

dll.PlaySoundW.argtypes = w.LPCWSTR,w.HMODULE,w.DWORD
dll.PlaySoundW.restype = w.BOOL

SND_FILENAME = 0x20000

# Call it with a Unicode string and it works.
dll.PlaySoundW('sound.wav',None,SND_FILENAME)

# Call it with a byte string and get an error since `.argtypes` is defined.
dll.PlaySoundW(b'sound.wav',None,SND_FILENAME)

输出(声音播放后):

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\test.py", line 15, in <module>
    dll.PlaySoundW(b'sound.wav',None,SND_FILENAME)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

或者跳过所有这些工作,只需使用winsound模块:

代码语言:javascript
复制
import winsound
winsound.PlaySound('sound.wav',winsound.SND_FILENAME)
票数 1
EN

Stack Overflow用户

发布于 2018-05-25 18:49:30

尽管文档将其指定为字符串。

指定要播放的声音的字符串。

在Python中,您实际上必须使它成为字节值。所以简单地说:

代码语言:javascript
复制
winmm.PlaySound(b"sound.wav", None, 0x20000)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50535102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档