在树莓派上播放音乐的方式有很多,最简单的是调用系统命令来播放,一般使用如下命令即可:

import os
os.system("player XXX.mp3")       #player指播放器,是你系统上可以播放音乐的软件

但是这种方式有一个问题,就是一旦开始播放便不好通过程序控制播放过程,因为这一命令会fork一个进程来运行命令,即使结束当前的命令也无法退出。那么,有没有其他方法可以控制播放的启停呢?当然!下面我们就来看看其他的播放音乐的方式:

使用pygame

from pygame import mixer  # Load the popular external library

mixer.init()
mixer.music.load('e:/LOCAL/Betrayer/Metalik Klinik1-Anak Sekolah.mp3')
mixer.music.play()

当然,在使用之前应该先安装pygame库:

pip3 install pygame         #Python3
pip install pygame          #Python2

这个库对于MP3文件的支持有限,其官网称在Debian系统下可能会崩溃,而树莓派官方系统就是在Debian的基础上制作的,因此不是很推荐这一方法。具体参考这一网址

使用vlc Python binding模块

在使用前需要安装python-vlc模块:

pip3 install python-vlc         #Python3
pip install python-vlc          #Python2

除此之外,还需要安装vlc播放器,因为这一模块运行需要vlc播放器的运行时库。vlc播放器可以使用如下命令安装(树莓派官方系统预装了这一软件,可以跳过):

sudo apt-get install vlc -y         #Debian, Ubuntu等支持apt-get命令的系统

此外,还要安装pulseaudio:

sudo apt-get install pulseaudio -y

准备就绪后可以使用如下代码播放音频:

import vlc
p = vlc.MediaPlayer("file:///path/to/track.mp3")
p.play()

使用如下代码停止播放:

p.stop()

可能遇到的问题:

[0a27ad50] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
[0a351e20] vlcpulse audio output error: PulseAudio server connection failure: Connection refused

解决方法如下:

rm -r ~/.pulse
rm -r ~/.pulse-cookie
rm -r ~/.config/pulse
sudo pulseaudio -k
pulseaudio --start

总结

除了上述两种方法之外还有很多其他方法,例如使用pydub模块来读入数据并转成wav音频文件然后使用pygame播放(基于pygame对mp3文件的支持有限),或者在Jupyter notebook环境下使用IPython.display来播放。甚至于还可以使用webbrowser模块在网页上播放。方法很多,在这只选了pygame这一常用方法以及vlc这一好用的方法来做介绍。

安装过程遇到问题欢迎留言!

最后修改日期:2020年10月18日

作者

留言

你好,我按照你的安装之后,发现pulseaudio安装以后,没有声音,我也有参考https://blog.csdn.net/EmithFla/article/details/104774791/里面的进行处理,但还是没有声音,参考你文档里面的例子运行python代码,是没有报错的,请问可能是什么问题呢?

    先看看你的音频输出是HDMI还是3.5mm接口

      你好,音频口是旋转3.5mm了,是这样的,我一开始用VLC播放时正常的,但安装了pulseaudio以后就播放不了,重新确认了下3.5mm输出,还时没声音

你好,我现在可以播放了,但是就是出现下面的报错,想参考你最后面的命令,但说没有这些命令
[01970870] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
[01983cc0] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
[01990090] vlcpulse audio output error: PulseAudio server connection failure: Connection refused

发表评论