在 python 中播放声音文件的跨平台方式是啥?
Posted
技术标签:
【中文标题】在 python 中播放声音文件的跨平台方式是啥?【英文标题】:What's a cross platform way to play a sound file in python?在 python 中播放声音文件的跨平台方式是什么? 【发布时间】:2008-11-09 18:28:42 【问题描述】:我尝试使用 pyaudio 播放 .wav 文件。它在 Windows 上运行良好,但在其他设备使用声音时无法在 Ubuntu 中运行。
错误是“IOError: [Errorno 无效的输出设备(无默认值 输出设备)] -9996
我可以尝试使用另一个库吗?另一种方法?
【问题讨论】:
【参考方案1】:您可以使用wxPython
sound = wx.Sound('sound.wav')
sound.Play(wx.SOUND_SYNC)
或
sound.Play(wx.SOUND_ASYNC)
Here 是 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 wiki 下的音频 (http://wiki.python.org/moin/Audio/) 以了解其他库,例如 https://docs.python.org/library/wave.html 或再次查看 Python 的 wiki 下的 Game Libraries (http://wiki.python.org/moin/PythonGameLibraries),它们将指向绑定到具有声音模块的 OpenAL 或 Pygame。
最后,虽然我不知道 pyaudio 的局限性,但您的错误消息听起来更像是库无法找到默认输出设备,而不是另一个进程正在使用该设备。也许看看 pyaudio 的 get_default_output_device_info
返回的输出设备,并将其与您在 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
is_synchronus = False
playsound(r"C:\Windows\Media\chimes.wav", is_synchronus)
【讨论】:
playaudio 在最近的版本中发生了一些事情:它不再接受文件路径中的反斜杠字符,因此失去了可移植性。您需要使用正斜杠。以上是关于在 python 中播放声音文件的跨平台方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章