串口屏LUA例程-音频播放器V1.0
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LUA例程-音频播放器V1.0
工程技术笔记
修订历史
版本日期原因编制审查V1.02019/02/28创建文档林青田刘启鑫
目录
1.适合范围 (1)
2.开发环境版本 (2)
3.概述 (3)
4.参考资料.........................................................................错误!未定义书签。
5.教程实现 (4)
5.1准备工程素材 (4)
5.1.1硬件平台 (4)
5.1.2UI素材准备 (4)
5.1.3LUA编辑器 (5)
5.2API函数说明 (6)
5.3实现功能 (8)
5.3.1工程配置 (8)
5.3.2程序具体解析 (8)
6.完整程序清单 (13)
7.免责声明 (24)
1.适合范围
该文档适合所有广州大彩物联型系列。
2.开发环境版本
1.VisualTFT软件版本:V3.0.0.944及以上的版本。
版本查看:
a)打开VisualTFT软件启动页面如图2-1软件版本,右上角会显示的软件版本号;
图2-1软件版本
b)打开VisualTFT,在软件右下角可以查看软件版本图2-2软件版本,
最新版本可登录大彩官网进行下载。
图2-2软件版本
2.串口屏硬件版本:V
3.0.301.0及以上的版本。
版本查看:
a)查看屏幕背面版本号贴纸;
b)VisualTFT与屏幕联机成功后,右下角显示的版本号。
3.LUA语言版本V5.5。
3.概述
物联型串口屏通过LUA脚本配合工程可以实现播放循环屏内部或者外部音频的功能。
4.教程实现
本文将分为以下是3个阶段讲述教程DEMO是如何实现的:
1.准备工程素材,
2.实现功能,
3.下载工程。
4.1准备工程素材
在实现教程DEMO前需要作以下三个准备:
1.硬件平台,
2.UI素材,
3.LUA编辑器。
4.1.1硬件平台
该例程使用大彩物联型7寸串口屏DC80480W070为验证开发平台。如图5-1所示。
图5-1物联型7寸串口屏
其他尺寸的物联型串口屏均可借鉴此教程。
4.1.2UI素材准备
准备好相应的美工UI。如图5-2所示
图5-2素材准备
4.1.3LUA编辑器
上位机VisualTFT内部已集成了LUA开发编译环境,点击菜单栏工具,选择LUA编辑器,如图5-3所示。
图5-3打开LUA编辑器
打开编辑器后,Visual TFT画面如图5-4所示;
图5-4LUA编辑器
4.2API函数说明
大彩科技针对LUA脚本提供了丰富的API接口函数,具体函数可以查阅文档《物联型LUA脚本API》,如图5-5所示。
图5-5API函数文档
1.本教程文档中所涉及到的部分的相关接口函数如下
函数pause_sound(state)
注释:继续播放
State:播放状态,1继续播放,2停止播放函数play_sound(fliepath)
注释:暂停播放。
Fliepath:音频路径
函数set_volume(volume)
注释:设置音量。
Volume音量0~100
函数on_screen_change(screen)
注释:当画面切换至目标画面ID时,执行此回调函数
参数:screen表示目标画面ID
注:更多API函数请参考文档《物联型LUA脚本API_V1.0》
4.3实现功能
本章节主要讲述调用部分API函数在串口屏上的如何实现循环播放视频,DEMO分以下三个部分解释:
1.配置工程属性,
2.程序详细解析,
3.编译以及运行程序。
4.3.1工程配置
1.教程DEMO画面如图5-6所示,关于画面中控件具体属性配置请参考教程DEMO。
图5-6音频播放
4.3.2程序具体解析
大彩组态控件中的视频播放控件可以根据视频路径播放视频,同时为了可以播放更多的视频,我司在LUA脚本中提供了设置视频播放相关的API函数,通过这些API函数可以实视频循环播放的功能。详细程序分以下几个部分说明:
1.遍历外部存储的视频,将外部视频的路径遍历到一个表中,程序如所示;
local musicfilecount=0--音频计数
local musicplay_index=0--当前值
local music_names={}--音频表
local music_playing=1--播放标志位
local playing=0--播放标志位
local volume=80--音量
line_number=0--行号
local current_page=1--显示的页码(按上一页下一页查看所有的歌曲,不影响正在播放的歌曲)
now_page=1--正在播放的歌曲所在的页码
stop_music=0--音乐播放结束是否播放下一首的的标志位
pause_flag=0--暂停/继续或者是停止的标志位all_page=0--最大页数,初始化为零
u_dir='c:/'--U盘路径
music_path=""--音乐路径初始化
--获取扩展名
function getExtension(str)
return str:match(".+%.(%w+)$")
end
function listdir(rootpath)--遍历目录function listdir(rootpath)--遍历目录
for entry in lfs.dir(rootpath)do
if entry~='.'and entry~='..'then
local path=rootpath..'/'..entry
local attr=lfs.attributes(path)
if attr.mode~='directory'then
ext=getExtension(path)
if ext=='wav'or ext=='mp3'then
music_names[musicfilecount]=path
musicfilecount=musicfilecount+1
end
else
listdir(path)
end
end
end
end
function on_usb_inserted(dir)--U盘函数
u_dir=dir--U盘路径
current_page=1
musicfilecount=0--音频计数
music_names={}--音频表
set_value(0,34,current_page)
set_value(0,35,1)
listdir(dir)--遍历目录
all_page=math.modf(musicfilecount/10)--计算总页数,如果总数等于10的倍数会多留一页update_music_ui()
end
2.显示歌曲名
--[[*************************************************************************** **Function name:update_music_ui