本帖最后由 天意无罪 于 2022-11-25 23:25 编辑
因为后面测评的主要内容是有关AI语音识别和图像识别的内容,对于语音识别,行空板板载了麦克风,所以只需要购买一个USB免驱小音箱或者USB免驱声卡。对于图像识别,需要购买一个USB免驱摄像头。
由于家里有好几个小音箱,所以选择购买一个USB免驱声卡,最终选的绿联的一款USB免驱声卡。
图1
为了避免因兼容性问题带来不必要的折腾,USB免驱摄像头在DFRobot官方商城购买的(PS:怎么感觉有点小贵啊)。
图2
周一购买的声卡和摄像头就到了,由于工作比较忙,包裹拿回来后就放在那里没有时间把玩。今天下班回家吃完饭,才想起拆包裹。明天周末了,终于有点时间继续玩行空板了。
由于行空板自带的unihiker库中有Audio类,可以实现音频的录音机播放,于是想着先写个简单的音频播放程序,先试试购买的USB免驱声卡是否可以使用。
(一)硬件资源
需要准备的硬件设备包括:行空板、USB免驱声卡、支持3.5mm输入的飞利浦蓝牙小音箱;
(二)方案设计
由于是使用unihiker自带的库,所以打算设计一个最简单的播放器,而不是诸如用Pygame库设计一个功能完整的音乐播放器。
设计需求:
(1)显示屏需要放一张背景图片作为底色;
(2)显示屏上设置4个按钮,分别为:播放、暂停、继续、停止,分别对于unihiker库中Audio类的非阻塞播放方式的4个类;
图3
(3)不支持音频文件选择,直接播放指定音频文件名称。
背景图片及音乐选择:
关于背景图片选择,由于是播放音乐,所以最好是放一张歌手的照片,于是我很快想到了一个喜欢的歌手:周慧敏,她是无数祖孙三代人心中的女神。之前在网易云音乐看到过一位网友的评论:她(周慧敏)是唯一一个,我爷爷想娶的女人、我爸爸想娶的女人、我也想娶的女人;
图4
图5
至于歌曲名称也有答案了,那就是“痴心换情深”。
(三)软件设计
使用Mind+代码编程模式,完整Python代码如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import Audio
from unihiker import GUI
import time
# 事件回调函数
def bf_button_click():
thread1=u_gui.start_thread(u_thread1_function)
def u_thread1_function():
u_audio.start_play("痴心换情深.mp3")
txt=u_gui.draw_text(text="周慧敏—痴心换情深",x=30,y=240,font_size=15, color="#00FF00")
def zt_button_click():
thread2=u_gui.start_thread(u_thread2_function)
def u_thread2_function():
u_audio.pause_play()
bj=u_gui.draw_image(image="zhm1.jpg",x=0,y=0)
txt=u_gui.draw_text(text="暂停播放",x=80,y=240,font_size=15, color="#00FF00")
def jx_button_click():
thread3=u_gui.start_thread(u_thread3_function)
def u_thread3_function():
bj=u_gui.draw_image(image="zhm1.jpg",x=0,y=0)
txt=u_gui.draw_text(text="继续播放",x=80,y=240,font_size=15, color="#00FF00")
time.sleep(1)
bj=u_gui.draw_image(image="zhm1.jpg",x=0,y=0)
u_audio.resume_play()
txt=u_gui.draw_text(text="周慧敏—痴心换情深",x=30,y=240,font_size=15, color="#00FF00")
def tz_button_click():
thread4=u_gui.start_thread(u_thread4_function)
def u_thread4_function():
u_audio.stop_play()
bj=u_gui.draw_image(image="zhm1.jpg",x=0,y=0)
u_gui=GUI()
u_audio = Audio()
bj=u_gui.draw_image(image="zhm1.jpg",x=0,y=0)
bfan=u_gui.add_button(text="播放",x=12,y=280,w=45,h=30,onclick=bf_button_click)
ztan=u_gui.add_button(text="暂停",x=69,y=280,w=45,h=30,onclick=zt_button_click)
jxan=u_gui.add_button(text="继续",x=126,y=280,w=45,h=30,onclick=jx_button_click)
tzan=u_gui.add_button(text="停止",x=183,y=280,w=45,h=30,onclick=tz_button_click)
while True:
pass
运行代码后,行空板显示屏会显示如下界面。
图6
调试过程遇到的2点问题及解决方案分享一下:
(1)重刷显示问题
我的设计方案是:
1)点击“播放”按钮:屏幕显示“周慧敏—痴心换情深”文字内容,开始播放音乐;
2)点击“暂停”按钮:屏幕显示“暂停播放”,并暂停播放音乐;
3)点击“继续”按钮:屏幕显示“继续播放”,等待1s后,屏幕重新显示“周慧敏—痴心换情深”文字内容,并继续播放音乐;
4)点击“停止“按钮:清除屏幕显示的文字内容,并结束播放;
在每次点击按钮,由于都要先清除上一步显示的文字,所以一开始我是的操作是:重新绘制背景图片,添加4个按钮,但是程序运行过程中,肉眼明显能看出来屏幕刷新背景和按钮显示的延迟卡顿,不是很友好。
最后,我试了下,在每次点击按钮后,只重新绘制背景图片来实现清除文字的效果,测试后发现,这个方法果然有效,也就是说行空板unihiker库中的按钮作为控件显示,不会被单纯的屏幕显示操作给刷掉,这样一来的话操作就很方便了。
(2)音量调整问题
由于行空板自带unihiker库中的Audio类没有播放音量调整接口,而我的小音箱也没有音量调整按钮,一开始播放时声音很大,着实吓我一跳,赶紧关掉。
后来在QQ群里问了行空板的技术支持,回复可以通过alsamixer功能实现音量的调整。
alsamixer是alsa驱动的一个插件,是一个命令行下的图形设置工具,在行空板的命令终端中输入alsamixer命令,会显示如下图所示的界面,通过键盘上的上下方向按键可以实现音频播放音量的调整。
图7
(3)从头开始播放时等待时间较长
点击“播放”按钮后,需要等待大概20秒后才会开始播放,不知道是不是和Audio类的实现方式有关系,暂时没有找到解决办法。
(四)功能演示