3028|2

106

帖子

0

TA的资源

版主

楼主
 

【行空板 Python编程学习主控板】评测八、使用unihiker库自带的Audio类播放音乐 [复制链接]

本帖最后由 天意无罪 于 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类的实现方式有关系,暂时没有找到解决办法。

        (四)功能演示

        
 

最新回复

最后的效果视频放的歌曲好听   详情 回复 发表于 2022-11-27 09:21
点赞 关注

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

最后的效果视频放的歌曲好听

点评

啊哈,我以为你会说歌手长得美才是关键,看来是我想多了啊。  详情 回复 发表于 2022-11-27 09:36
 
 

回复

106

帖子

0

TA的资源

版主

板凳
 
Jacktang 发表于 2022-11-27 09:21 最后的效果视频放的歌曲好听

啊哈,我以为你会说歌手长得美才是关键,看来是我想多了啊。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
常用网络命令

常用网络命令 计算机网络的主要优点是能够实 ...

各大公司IC类免费样品申请

TPS2000系列数字存储示波器 详细资料申请 http://digital.ni.com/worldwide/china.nsf/sb/Download?OpenDocument&node=162000_zh ...

ucosii在STM32中的移植

10740

液晶1602 显示汉字研究

液晶1602显示字符研究 1602是一款最常用也是最便宜的液晶显示屏。最多可以显示两行标准字符,每行最多可以显示16个字符。 1602 ...

电容的安秒积和电感的伏秒积

  《电工学》或者《电路分析》教材中,对电容的定义是这样的,如图(01),满足图(01)式的电路元件,就是电容。式中i和u都是时间 ...

邀您参加Microchip在线研讨会——为您的IoT传感器设计节能型解决方案

Microchip将于6月29日(周二)举办题为《为您的IoT传感器设计节能型解决方案》的在线研讨会。 543966 在设计电池供电 ...

浅谈驱动芯片的绝缘安规标准

众所周知,各个行业各个领域都有其需要遵循的标准规范,一般会对其产品需要达到的使用条件提出各方面的要求。诸如电机驱动、光伏 ...

【HC32F4A0开发板测评】+I2S语音播放测试

本帖最后由 jinglixixi 于 2023-2-22 09:20 编辑 在HC32F4A0开发板上,为进行音频播放配置了I2S音频电路,所用的芯片为WM8731 ...

超声片/超声换能器/压电陶瓷片驱动波形

超声片/超声换能器/压电陶瓷片驱动波形必须用正弦波 才有良好的效果,比如电声转换效率、波形失真度、功率衰减等;很多负载必须 ...

MicroPython ESP32S3 蓝牙 每包字节大小问题求助

求助各位大佬 我用2块ESP32S3开发板(MicroPython 1.22),1块服务端1块客户端,蓝牙通信已经成功,也交换了MTU,但服务端每 ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表