7. 音频播放-Pygame¶
LubanCat-RK系列板卡中,LubanCat 2和LubanCat 1等带有音频rk809-codec。通过音频编解码芯片, 本章我们将使用Python-Pygame库的music模块,在鲁班猫板卡,编写测试代码进行音频播放实验。
7.1. Pygame库简介¶
Pygame是Python库中用于开发游戏的一种工具,或许这么说有点限制Pygame的用法。 Pygame不仅可以用于游戏开发,还可以用于显示处理,多媒体设备处理等等方面, 该库提供了许多多媒体、显示设备的操作功能。
7.2. 实验准备¶
7.2.1. 板卡上的Sound资源¶
以LubanCat 2为例:
# 在终端中输入如下命令,可以查看到显示设备资源:
ls /dev/snd/
检查板卡上的音频设备资源示例,仅供参考:
cat@lubancat:~/sound$ ls /dev/snd/
by-path controlC0 pcmC0D0c pcmC0D0p seq timer
其中,controlC0是用于声卡的控制,如通道选择,麦克风的控制等,pcmC0D0c是用于录音的pcm设备,pcmC0D0p用于播放的pcm设备,seq是音序器,timer是定时器。
linux更多关于鲁班猫音频系统内容,参考 《音频》 。
7.2.2. 硬件连接¶
LubanCat 1和LubanCat 2板卡有耳机+麦克风接口,将耳机或其他播放设备与鲁班猫接口连接即可。
7.2.4. Pygame库使用¶
安装好对应的库之后,我们就可以利用安装好的Pygame库编写一下测试代码。
7.3. 测试代码¶
测试代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | """ pygame 音频播放测试 """
import sys
import time
import threading
if len(sys.argv) == 2:
m_filename = sys.argv[1]
else:
print(
"""使用方法:
python3 sound_test.py <music_name.mp3>
example: python3 sound_test.py test.mp3"""
)
sys.exit()
import pygame
exitright = 'e'
def get_quitc():
'获取退出字符'
# 全局变量
global exitright
# 获取用户输入
exitright = input("输入字母q后,按下回车以退出播放\n")
try:
# 初始化音频设备
pygame.mixer.init()
# 检查音频设备初始化情况
if pygame.mixer.get_init() is None:
raise RuntimeError('音频资源未正确初始化,请检查音频设备是否可用',)
# 加载音频文件,此处未播放mp3文件,因为pygam对MP3格式的播放支持是有限的
pygame.mixer.music.load(m_filename)
# 设置音量为50%
pygame.mixer.music.set_volume(0.2)
# 播放音频文件1次
pygame.mixer.music.play(0)
# 开启子线程,等待用户输入退出字符
quitthread = threading.Thread(target=get_quitc,daemon=True)
quitthread.start()
# 获取音频播放状态,如果正在播放,等待播放完毕
while pygame.mixer.music.get_busy():
# 空闲延时,释放cpu
if exitright in ('q','Q'):
raise
time.sleep(1)
except pygame.error as e:
print("执行程序时出现异常:",e,"\n等待音频资源被释放")
# 尝试停止播放
pygame.mixer.music.stop()
# 等待音频资源空闲
while pygame.mixer.music.get_busy():
time.sleep(1)
finally:
# 卸载初始化的音频设备
print("退出播放")
pygame.mixer.quit()
sys.exit()
|
代码功能已经在注释中详细给出。
7.3.1. 实验步骤¶
在测试代码前,请先将配套代码文件夹io/sound目录下,各格式的test音频文件与代码放置在同一目录下,再运行程序。
测试代码会播放用户指定音频文件。
# 在终端中输入如下命令:
sudo python3 sound_test.py test.mp3
# 或
sudo python3 sound_test.py test.wav
# 或
sudo python3 sound_test.py test.ogg
pygame库导入时加载的资源比较多,所以会稍等一会才有实验现象。 程序正常运行后,大家就可以在播放设备中听到播放的音频啦~
在音乐播放过程中,如要退出,请按终端打印的提示信息操作,在终端输入q再回车,程序即可结束。 如程序异常终止,会导致音频设备资源被占用,需要重启开发板才可再次使用。
运行显示: