¿Qué es una forma multiplataforma para reproducir un archivo de sonido en python?

Intenté reproducir un archivo .wav usando pyaudio. Funciona muy bien en Windows, pero no funciona en Ubuntu cuando otro dispositivo está usando el sonido.

El error es “IOError: [Errorno dispositivo de salida no válido (no hay un dispositivo de salida predeterminado)] -9996

¿Hay otra biblioteca que podría intentar usar? ¿Otro método?

Puedes usar wxPython

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

o

 sound.Play(wx.SOUND_ASYNC) 

Aquí hay un ejemplo de la demostración de wxPython.

¿Has mirado pymedia? Parece tan fácil como esto para reproducir un archivo 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) 

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

Por supuesto, puede consultar la wiki de Python en Audio ( http://wiki.python.org/moin/Audio/ ) para otras bibliotecas como https://docs.python.org/library/wave.html o nuevamente en la wiki de Python bajo Game Libraries ( http://wiki.python.org/moin/PythonGameLibraries ) que lo guiará a enlaces a OpenAL o Pygame que tiene módulos de sonido.

Y finalmente, aunque no conozco las limitaciones de pyaudio, su mensaje de error suena más como que la biblioteca no puede encontrar el dispositivo de salida predeterminado más de lo que otro dispositivo está utilizando. Tal vez eche un vistazo a qué dispositivo de salida devuelve get_default_output_device_info de pyaudio y compárelo con la configuración predeterminada de Ubuntu.

Puedes probar Simpleaudio :

 > pip install simpleaudio 

Entonces:

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

No estoy absolutamente seguro de si eso cumple con tus requisitos, pero inmediatamente pensé en 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() 

Encontré playsound para ser el más simple.

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