使用Python播放音频文件


38

我正在寻找一个维护良好的Python库,该库允许我使用标准音频输出在Raspberry Pi上播放音频文件。

到目前为止,我已经尝试了几种,但似乎都没有用。尽管pyglet可以在我的常规计算机上正常运行,但会在Raspberry Pi上导致错误。有没有被证明易于使用的Python库?


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

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

Answers:


31

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

然后再试一次。


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

这就是我想要的,但是我的主板声音没有驱动程序,所以我使用USB声卡。它可以espeak正常播放,但不行。
SDsolar

10

我需要一个脚本来在后台播放三十秒钟的歌曲同时响应其他用户输入。然后,我希望它在某些事件中结束歌曲。

我不认为它特别优雅,但是我打开了一个后台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文档,以获取通过这种方式传递以控制播放的各种命令。

希望这会有所帮助!


1
实际上,这真的很整洁。这个adafruit教程讨论了播放声音,但没有停止声音。
gideon

6

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

apt-get install mpg321

然后在Python中:

import os

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

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


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

这太慢了。
Alex

3

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


1
那么您如何使用它呢?
SDsolar

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

0

Pygame为您提供了一种在一系列通道上加载和播放声音的简便方法。


0

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

我建议你pyaudio,它工作正常。

如果您还想播放压缩文件,请随时将您指向我的模块coder.py。您可以在PyPI上找到它。

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

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

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

简单性值得怀疑。

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

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


0

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

我的方法基于@xxmbabanexx和此处发布的上述解决方案。基本上,我必须添加dtparam=audio=on/boot/config.txt


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

哦,我懂了。嗯,虽然我没有尝试过,但可能不会。
jjinking
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.