我正在寻找一个维护良好的Python库,该库允许我使用标准音频输出在Raspberry Pi上播放音频文件。
到目前为止,我已经尝试了几种,但似乎都没有用。尽管pyglet可以在我的常规计算机上正常运行,但会在Raspberry Pi上导致错误。有没有被证明易于使用的Python库?
我正在寻找一个维护良好的Python库,该库允许我使用标准音频输出在Raspberry Pi上播放音频文件。
到目前为止,我已经尝试了几种,但似乎都没有用。尽管pyglet可以在我的常规计算机上正常运行,但会在Raspberry Pi上导致错误。有没有被证明易于使用的Python库?
Answers:
我推荐广受欢迎的Pygame。我可能是错的,但我相信它已预先安装在Pi上。您可以使用Pygame混音器音乐模块播放音频文件。我在下面包含了一些示例代码。
假设我们有一个名为的音频文件myFile.wav
。
import pygame
pygame.mixer.init()
pygame.mixer.music.load("myFile.wav")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy() == True:
continue
注意:如果失败,请转到终端并使用
apt-get update
apt-get upgrade
然后再试一次。
espeak
正常播放,但不行。
我需要一个脚本来在后台播放三十秒钟的歌曲同时响应其他用户输入。然后,我希望它在某些事件中结束歌曲。
我不认为它特别优雅,但是我打开了一个后台MPlayer进程的管道。
import subprocess
player = subprocess.Popen(["mplayer", "song.mp3", "-ss", "30"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
然后,当我想终止MPlayer进程时,我只写了“ q”以退出管道。
player.stdin.write("q")
请参阅MPlayer文档,以获取通过这种方式传递以控制播放的各种命令。
希望这会有所帮助!
您可以通过管道使用许多外部播放器。但是,您几乎总是会遇到速度损失。播放控制也存在问题。
我建议你pyaudio,它工作正常。
如果您还想播放压缩文件,请随时将您指向我的模块coder.py。您可以在PyPI上找到它。
它还使用子进程,但是调用解码器而不是播放器。他们不使用大量的CPU,并且其中一些人知道如何使用硬件加速。然后,您可以使用pyaudio或其他东西来输出原始音频数据。如果需要,您甚至可以通过使用pygame.sndarray使用pygame。这样,您可以播放比pygame支持更多的格式。
我在PyQT GUI环境中尝试pyaudio,并使用aplay作为外部播放器。那是在Raspberry Pi B上。
两种情况下的结果都令人满意。
简单性值得怀疑。
coder.py本身非常简单,但是您必须将其与其他库结合使用,这会增加代码行。
有一个有关如何播放decoder.py附带的文件的示例。