Python中跨平台播放声音文件的方法是什么?

22

我尝试使用pyaudio播放.wav文件。在Windows上运行良好,但在Ubuntu上当另一个设备正在使用声音时无法工作。

错误是“IOError:[错误编号 无效的输出设备(没有默认 输出设备)] -9996”

是否有其他库可以尝试使用?还有其他方法吗?

5个回答

13

你可以使用wxPython

sound = wx.Sound('sound.wav')
sound.Play(wx.SOUND_SYNC)

或者

sound.Play(wx.SOUND_ASYNC)

这里是来自wxPython演示的一个例子。


演示链接已经失效。 - Nav

5

你看过pymedia吗?它似乎很容易播放WAV文件,就像这样:

import time, wave, pymedia.audio.sound as sound
f= wave.open('YOUR FILE NAME', 'rb')
sampleRate= f.getframerate()
channels= f.getnchannels()
format= sound.AFMT_S16_LE
snd= sound.Output(sampleRate, channels, format)
s= f.readframes(300000)
snd.play(s)
while snd.isPlaying(): time.sleep(0.05)

参考资料:http://pymedia.org/tut/play_wav.html

当然,你可以查看Python维基百科的音频部分(http://wiki.python.org/moin/Audio/),了解其他库,例如https://docs.python.org/library/wave.html或者在Python的游戏库维基百科中(http://wiki.python.org/moin/PythonGameLibraries)寻找指向OpenAL或Pygame的声音模块。

最后,虽然我不知道pyaudio的限制,但是你的错误信息听起来更像是该库无法找到默认输出设备,而不是设备正在被另一个进程使用。也许可以查看pyaudio的get_default_output_device_info返回的输出设备,并将其与Ubuntu默认设置进行比较。


2
你可以尝试使用 Simpleaudio(链接):
> pip install simpleaudio

然后:

import simpleaudio as sa

wave_obj = sa.WaveObject.from_wave_file("path/to/file.wav")
play_obj = wave_obj.play()
play_obj.wait_done()

1
我发现 playsound 是最简单的。
from playsound import playsound

is_synchronus = False
playsound(r"C:\Windows\Media\chimes.wav", is_synchronus)

最近的版本中playaudio出了问题:它不再接受文件路径中的反斜杠字符,因此它失去了可移植性。您需要使用正斜杠。 - Raja
1
你能不能使用 os.path.join 让 Python 自动使用正确的斜杠呢?https://docs.python.org/3/library/os.path.html#join - Nav

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接