What's a cross platform way to play a sound file in python?

不羁岁月 提交于 2019-12-18 11:25:47

问题


I tried playing a .wav file using pyaudio. It works great on windows, but doesn't work in Ubuntu when another device is using sound.

The error is "IOError: [Errorno Invalid output device (no default output device)] -9996

Is there another library I could try to use? Another method?


回答1:


You can use wxPython

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

or

sound.Play(wx.SOUND_ASYNC)

Here is an example from the wxPython demo.




回答2:


Have you looked at pymedia? It looks as easy as this to play a WAV file:

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)

Ref: http://pymedia.org/tut/play_wav.html

Of course, you can have a look at the Python wiki under Audio (http://wiki.python.org/moin/Audio/) for other libraries such as https://docs.python.org/library/wave.html or again in Python's wiki under Game Libraries (http://wiki.python.org/moin/PythonGameLibraries) that will point you to bindings to OpenAL or Pygame that has sound modules.

And finally, although I don't know the limitations of pyaudio, your error message sounds more like the library is not able to find the default output device more than the device is in use by another process. Maybe have a look at what output device is returned by the get_default_output_device_info of pyaudio and compare it to whatever's your default setting in Ubuntu.




回答3:


You can try Simpleaudio:

> pip install simpleaudio

Then:

import simpleaudio as sa

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



回答4:


I'm not absolutely sure if that fulfills your requirements, but I immediately thought 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()



回答5:


I found playsound to be the simplest.

from playsound import playsound

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


来源:https://stackoverflow.com/questions/276266/whats-a-cross-platform-way-to-play-a-sound-file-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!