我正在寻找一个维护良好的Python库,该库可让我使用标准音频输出在Raspberry Pi上播放音频文件。尽管pyglet可以在我的常规计算机上正常运行,但会在Raspberry Pi上导致错误。有没有被证明易于使用的Python库?

评论

事实证明,易于使用是相对的,但我在此处在StackOverflow上发布了类似pygame的替代游戏。基本上,替代方法是vlc.py(libVLC Python模块,维护得很好)。

后面还有一个问题说Pyglet在RPi上工作。您可以更新您的错误吗?

#1 楼

我推荐广受欢迎的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


更新系统,然后重试。

评论


如果要播放的声音不止一种(可能的话),那么最好为每个声音创建一个pygame.mixer.Sound对象,然后可以将声音文件名的定义放在一个位置。

–弗朗西斯
2014年1月21日,9:42

这就是我想要的,但是我的主板声音没有驱动程序,所以我使用USB声卡。它听起来很好,但不是这样。

– SDsolar
18年1月15日在19:14

#2 楼

我需要一个脚本来在后台播放三十秒钟的歌曲同时响应其他用户输入。然后,我想让它在某个事件中结束歌曲。 br />
然后,当我想终止MPlayer进程时,我只是写了“ q”以退出管道。

import subprocess
player = subprocess.Popen(["mplayer", "song.mp3", "-ss", "30"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)


看看MPlayer您可以通过这种方式传递来控制播放的各种命令的文档。

希望这会有所帮助!

评论


实际上,这真的很整洁。这个adafruit教程讨论的是播放声音而不是停止声音。

–基甸
2013年6月25日8:09

#3 楼

另一种选择是使用mpg321并从命令行调用它。

apt-get install mpg321


然后在Python中:

import os

os.system('mpg321 foo.mp3 &')


几乎可以肯定,Pygame的功能更强大,但我想这取决于您的需求。

评论


我自己考虑了一下,但是我认为它不是很优雅,因为这会使暂停,音量控制等工作变得更加困难。

–斯坦
13年4月18日在15:10

这太慢了。

–亚历山大·吴
14年7月26日在9:58

据说子进程是执行命令的首选方法。 stackoverflow.com/a/450329

–Nav
20-10-28在3:58

#4 楼

如果您不需要图形,我建议使用pyglet而不是pygame。在我看来,它更简单,更优雅且维护得更好。再说一遍,我希望这可能是一个品味问题。

评论


那么您如何使用它呢?

– SDsolar
18年1月15日在19:04

pyglet仅在有显示可用时才运行;仅出于播放声音的目的而远程运行或作为守护程序运行它不起作用。

–oh7lzb
18年11月20日在19:39

#5 楼

Pygame为您提供了一种在一系列频道上轻松加载和播放声音的好方法。

#6 楼

您可能会通过管道使用许多外部播放器。
但是,您几乎总是会遇到速度下降的问题。
回放控制也存在问题。

我建议pyaudio,它可以正常工作。

如果您还想播放压缩文件,我会很随意地将您指向我的模块encoder.py。您可以在PyPI上找到它。

它也使用子进程,但是调用解码器而不是播放器。
它们不占用大量CPU,并且其中一些知道如何使用硬件加速。然后,您可以使用pyaudio或其他东西来输出原始音频数据。如果需要,您甚至可以通过使用pygame.sndarray使用pygame。这样,您可以播放比pygame支持更多的格式。

我在PyQT GUI环境中尝试使用pyaudio并使用aplay作为外部播放器的coder.py。那是在Raspberry Pi B上。

两种情况下的结果都令人满意。

简单性值得质疑。

decoder.py本身非常简单,但是您必须将其与其他库结合使用,这会增加代码行。

有一个示例,说明如何播放decoder.py附带的文件。

#7 楼

我正在运行OSMC(Debian),并且可以通过通过HDMI连接的电视扬声器播放声音。 https://youtu.be/p2ljmTE67gs

我的方法基于@xxmbabanexx
和此处发布的上述解决方案。
基本上,我必须在dtparam=audio=on

评论


我认为TS是指“标准音频输出”时的3.5毫米插孔。这对于3.5插孔也起作用吗?

– Bex
16年1月4日在18:28

哦,我懂了。嗯,虽然我没有尝试过,但可能不会。

– jjinking
16年1月5日,下午1:31