题 什么是在python中播放声音文件的跨平台方式?


我尝试使用pyaudio播放.wav文件。它在Windows上运行良好,但在其他设备使用声音时在Ubuntu中不起作用。

错误是“IOError:[Errorno   输出设备无效(无默认值   输出设备)] - 9996

我可以尝试使用另一个库吗?另一种方法?


18
2017-11-09 18:28


起源




答案:


您可以使用 wxPython的

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

要么

sound.Play(wx.SOUND_ASYNC)

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


12
2017-11-10 07:21





你看过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

当然,您可以查看Audio下的Python wiki(http://wiki.python.org/moin/Audio/)对于其他图书馆,如 https://docs.python.org/library/wave.html 或者再次在Python的游戏库下的wiki中http://wiki.python.org/moin/PythonGameLibraries)它将指向绑定到具有声音模块的OpenAL或Pygame。

最后,虽然我不知道pyaudio的局限性,但您的错误消息听起来更像是库无法找到默认输出设备而不是另一个进程正在使用该设备。也许看看由哪个输出设备返回 get_default_output_device_info 将pyaudio与你在Ubuntu中的默认设置进行比较。


4
2017-11-09 19:05





你可以试试 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()

2
2018-03-29 12:16





我不确定这是否符合你的要求,但我立即想到了PyGame

http://www.pygame.org/docs/ref/mixer.html#pygame.mixer.Sound

from pygame import mixer

mixer.init()
s = mixer.Sound('sound.wav')
s.play()

1
2017-11-10 09:37





我发现 playsound 是最简单的。

from playsound import playsound

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

0
2018-01-23 19:51