Что такое кроссплатформенный способ воспроизведения звукового файла на python? - PullRequest
18 голосов
/ 09 ноября 2008

Я попытался воспроизвести файл .wav с помощью pyaudio. Он отлично работает на Windows, но не работает в Ubuntu, когда другое устройство использует звук.

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

Есть ли другая библиотека, которую я мог бы попробовать использовать? Другой метод?

Ответы [ 5 ]

12 голосов
/ 10 ноября 2008

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

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

или

sound.Play(wx.SOUND_ASYNC)

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

4 голосов
/ 09 ноября 2008

Вы смотрели на 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 в разделе Аудио (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.

2 голосов
/ 29 марта 2016

Вы можете попробовать 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()
1 голос
/ 10 ноября 2008

Я не совсем уверен, соответствует ли это вашим требованиям, но я сразу подумал, 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()
0 голосов
/ 23 января 2018

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

from playsound import playsound

is_synchronus = False
playsound(r"C:\Windows\Media\chimes.wav", is_synchronus)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...