【行空板 Python编程学习主控板】评测八、使用unihiker库自带的Audio类播放音乐
<div class='showpostmsg'> 本帖最后由 天意无罪 于 2022-11-25 23:25 编辑<p> 因为后面测评的主要内容是有关AI语音识别和图像识别的内容,对于语音识别,行空板板载了麦克风,所以只需要购买一个USB免驱小音箱或者USB免驱声卡。对于图像识别,需要购买一个USB免驱摄像头。</p>
<p> 由于家里有好几个小音箱,所以选择购买一个USB免驱声卡,最终选的绿联的一款USB免驱声卡。</p>
<p align="center"></p>
<p style="text-align: center;"> 图1</p>
<p> 为了避免因兼容性问题带来不必要的折腾,USB免驱摄像头在DFRobot官方商城购买的(PS:怎么感觉有点小贵啊)。</p>
<p align="center"></p>
<p style="text-align: center;"> 图2</p>
<p> 周一购买的声卡和摄像头就到了,由于工作比较忙,包裹拿回来后就放在那里没有时间把玩。今天下班回家吃完饭,才想起拆包裹。明天周末了,终于有点时间继续玩行空板了。</p>
<p> 由于行空板自带的unihiker库中有Audio类,可以实现音频的录音机播放,于是想着先写个简单的音频播放程序,先试试购买的USB免驱声卡是否可以使用。</p>
<p><b> (一)硬件资源</b></p>
<p> 需要准备的硬件设备包括:行空板、USB免驱声卡、支持3.5mm输入的飞利浦蓝牙小音箱;</p>
<p><b> (二)方案设计</b></p>
<p> 由于是使用unihiker自带的库,所以打算设计一个最简单的播放器,而不是诸如用Pygame库设计一个功能完整的音乐播放器。</p>
<p> <b>设计需求:</b></p>
<p> (1)显示屏需要放一张背景图片作为底色;</p>
<p> (2)显示屏上设置4个按钮,分别为:播放、暂停、继续、停止,分别对于unihiker库中Audio类的非阻塞播放方式的4个类;</p>
<p align="center"></p>
<p style="text-align: center;"> 图3</p>
<p> (3)不支持音频文件选择,直接播放指定音频文件名称。</p>
<p> <b>背景图片及音乐选择:</b></p>
<p><b> </b>关于背景图片选择,由于是播放音乐,所以最好是放一张歌手的照片,于是我很快想到了一个喜欢的歌手:周慧敏,她是无数祖孙三代人心中的女神。之前在网易云音乐看到过一位网友的评论:她(周慧敏)是唯一一个,我爷爷想娶的女人、我爸爸想娶的女人、我也想娶的女人; </p>
<p class="imagemiddle" style="text-align: center;"></p>
<p style="text-align: center;"> 图4</p>
<p class="imagemiddle" style="text-align: center;"></p>
<p class="imagemiddle" style="text-align: center;">图5</p>
<p align="center"><v:shape id="图片_x0020_64" type="#_x0000_t75"> <w:wrap type="none"> <w:anchorlock> </w:anchorlock></w:wrap></v:shape></p>
<p align="center"><v:shape id="图片_x0020_65" type="#_x0000_t75"> <w:wrap type="none"> <w:anchorlock> </w:anchorlock></w:wrap></v:shape></p>
<p> 至于歌曲名称也有答案了,那就是“痴心换情深”。</p>
<p><b> (三)软件设计</b></p>
<p align="left"> 使用Mind+代码编程模式,完整Python代码如下:</p>
<pre>
<code class="language-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
</code></pre>
<p align="left"> 运行代码后,行空板显示屏会显示如下界面。</p>
<p align="center"></p>
<p style="text-align: center;"> 图6</p>
<p><b> 调试过程遇到的2点问题及解决方案分享一下:</b></p>
<p><b> (1)重刷显示问题</b></p>
<p> 我的设计方案是:</p>
<p> 1)点击“播放”按钮:屏幕显示“周慧敏—痴心换情深”文字内容,开始播放音乐;</p>
<p> 2)点击“暂停”按钮:屏幕显示“暂停播放”,并暂停播放音乐;</p>
<p> 3)点击“继续”按钮:屏幕显示“继续播放”,等待1s后,屏幕重新显示“周慧敏—痴心换情深”文字内容,并继续播放音乐;</p>
<p> 4)点击“停止“按钮:清除屏幕显示的文字内容,并结束播放;</p>
<p> 在每次点击按钮,由于都要先清除上一步显示的文字,所以一开始我是的操作是:重新绘制背景图片,添加4个按钮,但是程序运行过程中,肉眼明显能看出来屏幕刷新背景和按钮显示的延迟卡顿,不是很友好。</p>
<p> 最后,我试了下,在每次点击按钮后,只重新绘制背景图片来实现清除文字的效果,测试后发现,这个方法果然有效,也就是说行空板unihiker库中的按钮作为控件显示,不会被单纯的屏幕显示操作给刷掉,这样一来的话操作就很方便了。</p>
<p><b> (2)音量调整问题</b></p>
<p> 由于行空板自带unihiker库中的Audio类没有播放音量调整接口,而我的小音箱也没有音量调整按钮,一开始播放时声音很大,着实吓我一跳,赶紧关掉。</p>
<p> 后来在QQ群里问了行空板的技术支持,回复可以通过alsamixer功能实现音量的调整。</p>
<p> alsamixer是alsa驱动的一个插件,是一个命令行下的图形设置工具,在行空板的命令终端中输入alsamixer命令,会显示如下图所示的界面,通过键盘上的上下方向按键可以实现音频播放音量的调整。</p>
<p align="center"></p>
<p style="text-align: center;"> 图7</p>
<p><b> (3)从头开始播放时等待时间较长</b></p>
<p> 点击“播放”按钮后,需要等待大概20秒后才会开始播放,不知道是不是和Audio类的实现方式有关系,暂时没有找到解决办法。</p>
<p><b> (四)功能演示</b></p>
<p><b> </b><iframe allowfullscreen="true" frameborder="0" height="450" src="//player.bilibili.com/player.html?bvid=14G4y1d7et&page=1" style="background:#eee;margin-bottom:10px;" width="700"></iframe><br />
</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>最后的效果视频放的歌曲好听</p>
Jacktang 发表于 2022-11-27 09:21
最后的效果视频放的歌曲好听
<p>啊哈,我以为你会说歌手长得美才是关键,看来是我想多了啊。<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/lol.gif" width="48" /></p>
页:
[1]