在 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 中播放声音文件的跨平台方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

python语音录制声音和保存wav文件的库文件是啥

用 Python 播放声音 [重复]

用 Python 播放声音 [重复]

在没有外部模块的情况下在 Python 中播放声音?

跨平台、跨浏览器从 Javascript 播放声音的方式? [复制]

如何在播放该歌曲的声音文件时逐字母读取python中的歌曲[关闭]