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)