Какой кросс-платформенный способ воспроизведения звукового файла в python?

Я пробовал играть в WAV файл, используя pyaudio. Он отлично работает на окнах, но не работает в Ubuntu, когда другое устройство использует звук.

Ошибка: "IOError: [Errorno Недопустимое устройство вывода (по умолчанию выходное устройство)] -9996

Можно ли использовать другую библиотеку? Другой метод?

Ответ 1

Вы можете использовать wxPython

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

или

sound.Play(wx.SOUND_ASYNC)

Здесь приведен пример из демонстрации wxPython.

Ответ 2

Вы посмотрели на 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 под Audio (http://wiki.python.org/moin/Audio/) для других библиотек, таких как https://docs.python.org/library/wave.html или снова в вики Python в библиотеках игр (http://wiki.python.org/moin/PythonGameLibraries), который укажет на привязку к OpenAL или Pygame с звуковыми модулями.

И, наконец, хотя я не знаю ограничений pyaudio, ваше сообщение об ошибке больше похоже на то, что библиотека не может найти устройство вывода по умолчанию больше, чем устройство используется другим процессом. Возможно, посмотрите, какое устройство вывода возвращается get_default_output_device_info pyaudio и сравнивает его с тем, что вы задали по умолчанию в Ubuntu.

Ответ 3

Вы можете попробовать 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()

Ответ 4

Я не совсем уверен, что это соответствует вашим требованиям, но я сразу же подумал 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

Я нашел playsound самым простым.

from playsound import playsound

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