在树莓派上播放音乐的方式有很多,最简单的是调用系统命令来播放,一般使用如下命令即可:
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这一好用的方法来做介绍。
安装过程遇到问题欢迎留言!
留言
你好,我按照你的安装之后,发现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