梁健 6 месяцев назад
Родитель
Сommit
227bf5d065

+ 29 - 7
module/Air8000/demo/audio/main.lua

@@ -24,23 +24,45 @@
 
 更多说明参考本目录下的readme.md文件
 ]]
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "audio"
-VERSION = "1.0.0"
+
+--[[
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
+]]
 
 --[[
 本demo可直接在Air8000整机开发板上运行
 ]]
 
+PROJECT = "audio"
+VERSION = "1.0.0"
+-- 在日志中打印项目名和项目版本号
+log.info("main", PROJECT, VERSION)
+
 
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
+end
 
--- require "play_file"     --  播放文件
--- require "play_tts"      -- 播放tts
--- require "play_stream"        -- 流式播放
+
+-- require "play_file"     --   播放音频文件,可支持wav,amr,mp3 格式音频
+-- require "play_tts"      -- 支持文字转普通话输出需要固件支持
+-- require "play_stream"        -- 流式播放音频,仅支持PCM 格式,可以将音频推流到云端,用来对接大模型或者流式录音的应用。
 require "record_file"        -- 录音到文件
 -- require "record_stream"        -- 流式录音   
 
-
+-- 音频对内存影响较大,不断的打印内存,用于判断是否异常
 sys.timerLoopStart(function()
     log.info("mem.lua", rtos.meminfo())
     log.info("mem.sys", rtos.meminfo("sys"))

+ 5 - 2
module/Air8000/demo/audio/play_file.lua

@@ -16,6 +16,8 @@
 exaudio = require("exaudio")
 local taskName = "task_audio"
 
+
+--  音频初始化配置
 local audio_setup_param ={
     model= "es8311",          -- 音频编解码类型,可填入"es8311","es8211"
     i2c_id = 0,          -- i2c_id,可填入0,1 并使用pins 工具配置对应的管脚
@@ -23,13 +25,14 @@ local audio_setup_param ={
     dac_ctrl = 164,        --  音频编解码芯片电源控制管脚    
 }
 
+--  播放结束回调
 local function play_end(event)
     if event == exaudio.PLAY_DONE then
         log.info("播放完成",exaudio.is_end())
     end
 end
 
-
+--  音频播放的配置
 local audio_play_param ={
     type= 0,                -- 播放类型,有0,播放文件,1.播放tts 2. 流式播放
                             -- 如果是播放文件,支持mp3,amr,wav格式
@@ -66,7 +69,7 @@ gpio.debounce(gpio.PWR_KEY, 200, 1) -- 防抖,防止频繁触发
 
 
 ---------------------------------
----------------主task------------
+-----主task,处理播放音频---------
 ---------------------------------
 
 

+ 8 - 4
module/Air8000/demo/audio/play_stream.lua

@@ -17,14 +17,15 @@
 
 exaudio = require("exaudio")
 
-local audio_buff
-local write_seek = 0
-local read_seek = 0
+local audio_buff       -- 存储音频数据的zbuff,使用方法见https://docs.openluat.com/osapi/core/zbuff/
+local write_seek = 0   -- 写入zbuff 的指针位置
+local read_seek = 0    -- 驱动zbuff 的指针位置
 
 local zbuff_size = 61440      -- 申请内存的最大值,需要1024的倍数
 local read_size = 4096        -- 除了最后一包数据,读写zbuff  都要按照1024倍数进行 
-local file = nil
+local file = nil              -- 文件句柄,打开文件后,将会被赋值
 
+--  音频初始化配置参数
 local audio_setup_param ={
     model= "es8311",          -- dac类型,可填入"es8311","es8211"
     i2c_id = 0,          -- i2c_id,可填入0,1 并使用pins 工具配置对应的管脚
@@ -32,6 +33,7 @@ local audio_setup_param ={
     dac_ctrl = 164,        --  音频编解码芯片电源控制管脚 
 }
 
+--  当前音频快播完的时候,产生的回调,返回数据后,exaudio会将音频传入core,此回调函数不可加入延迟代码
 local function audio_need_more_data()
     if read_seek >= write_seek then     -- 读指针,赶上了写指针,播放完成
         log.info("播放完了")
@@ -48,12 +50,14 @@ local function audio_need_more_data()
     end
 end 
 
+-- 播放完成回调
 local function play_end(event)
     if event == exaudio.PLAY_DONE then
         log.info("播放完成",exaudio.is_end())
     end
 end 
 
+-- 流式播放音频播放的配置
 local audio_play_param ={
     type= 2,                -- 播放类型,有0,播放文件,1.播放tts 2. 流式播放
                             -- 如果是播放文件,支持mp3,amr,wav格式