迪文科技论坛

 找回密码
 立即注册
搜索
查看: 459|回复: 0

【开源】基于迪文T5L屏幕的音频播放与可视化

[复制链接]

2

主题

0

回帖

44

积分

新手上路

Rank: 1

积分
44
发表于 2022-8-17 17:18:20 | 显示全部楼层 |阅读模式
基于迪文T5L屏幕的音频播放与可视化
1.1.技术路线
       之前的频率趋势图像方案已经可以基本实现音频可视化的效果,但是与传统频谱相比,没有把振幅量化显示;而且实时写点较慢。为解决以上两个问题,提出如下图所示方案:
1 实现频率与振幅可视化
1.2.艺术字变量显示
       艺术字变量显示控件和数据变量显示控件,都是用来显示数值的显示控件,比如显示int整数, float浮点数等,而不同之处就是艺术字变量显示控件是利用数字图标来显示数值的,而数据变量显示控件则是利用字库中的数字字符来显示数值的,利用数字图标的好处就是可以做到界面精美,而且字体大小可以做到任意自如,艺术字变量显示控件总共需要12个数字图标,按照排列顺序分别为”0123456789-.,这些数字图标我们是可以通过PS等其他绘图工具制作而成的,要保证所有的数字图标大小都一样,当需要显示某一个具体的数值时, 艺术字变量显示控件就会利用这些数字图标来组合成想要的数值。
2  艺术字变量显示控件的指令存储格式

图4 icl文件的制作

       想要显示某一个具体的数值时,就往此地址处写入相应的数据,设置数字图标所在的icl文件,并同时指定数字图标在此icl文件中的起始位置,即可完成功能需求。在此方案中将频率数量级制成icl文件,把数据存入其中,实时显示。部分代码和demo如下:
图5 demo界面设置
#include "sys.h"
xdata float val;

void float_val_disp(float val,u16 resolution)
{
#define VAL_SP0x1004 //艺术字变量显示控件的SP地址
#define VAL_VP0x1000 //艺术字变量显示控件的VP地址
#define RESOLUTION_ADDR(VAL_SP+5) //分辨率属性的地址,高字节设置整数的位数,低字节设置小数的位数
#define INTEGER_NUM4

if(!(resolution&0xff00)
resolution |= (INTEGER_NUM<<8);

sys_write_vp(RESOLUTION_ADDR,(u8*)&resolution,1);//动态修改分辨率属性
sys_write_vp(VAL_VP,(u8*)&val,2);//设置要显示的数值
}


1.3.程序优化
上述代码已经实现目标功能,然而由于音频控制直接由按键返回键设定,无法由代码控制,导致刷新频率有限。由此提出如下图所示方案:
       此框架的大致原理是先利用定时器来产生一个按钮点击扫描信号is_btn_scan,此扫描信号的周期为30ms,周期值可随意设置,建议值在10ms-50ms之间,既兼顾到了按钮点击响应的时效性,也兼顾到了最少的CPU占用量。当is_btn_scan扫描信号到了之后,用sys_read_vp函数进行读取按钮键值的操作,如果读取到的键值不为0,说明用户点击了界面上的按钮,接下来就是对此按钮点击操作立即进行事件响应,,再根据按钮键值划分范围,将此按钮产生的点击事件派发给相应的界面进行处理。处理完成之后,再将键值给清0即可。搭配FFT函数使用,用按键控制频谱显示的同时也直接控制了声音。具体内容如附件所示。


1.4.效果预览

1.5.视频演示



参考资料:
.ASIC设计 智能屏IOT应用 熊家余
单片机实现音频频谱显示的快速算法研究

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-4-2 13:22 , Processed in 0.031831 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表