Python:使用winsound在内存中播放wav - SND_MEMORY

时间:2015-08-10 13:35:02

标签: python python-3.x

我正在尝试从内存而不是文件中播放wav文件。这就是我尝试过但它不起作用。

>>> with open('my/file/dir/sound.wav','rb') as f:
>>>     data = f.read()
>>> data = base64.b64encode(data)
>>> data = data.decode('UTF-8')

所以现在数据是一个字符串对象,表示音频wav文件的字节。

>>> winsound.PlaySound(data,winsound.SND_MEMORY)
Traceback (most recent call last):
  File "<string>", line 301, in runcode
  File "<interactive input>", line 1, in <module>
RuntimeError: Failed to play sound

请帮忙。我哪里错了?

编辑:没关系。 It's a bug.

2 个答案:

答案 0 :(得分:2)

首先,为什么要编码这样的数据? 这就是我所做的:

import winsound
memoryfile=open("myfilepath","rb")
winsound.PlaySound(memoryfile.read(), winsound.SND_MEMORY)

我发现,如果你在告诉winsound播放它之前阅读该文件,它仍会播放但之后会崩溃所以不要这样做:

    memoryfile=open("myfilepath","rb").read()

还尝试使用\\代替/目录

答案 1 :(得分:2)

根据我的理解,问题在于以下几行:

>>> data = data.decode('UTF-8')

使用base64.b64encode()进行编码时,应使用base64.b64decode()进行解码。

所以,代码可能是:

with open('my/file/dir/sound.wav','rb') as f:
    data = base64.b64encode(f.read())

winsound.PlaySound(base64.b64decode(data), winsound.SND_MEMORY)

我相信它解决了这个问题。