我正在尝试从内存而不是文件中播放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.
答案 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)
我相信它解决了这个问题。