Просмотр исходного кода

fix:优化audio 的 音频切换和demo 的调用

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

BIN
module/Air8000/demo/audio/10.amr


+ 14 - 3
module/Air8000/demo/audio/exaudio.lua

@@ -196,6 +196,10 @@ end
 -- 模块接口:初始化
 function exaudio.setup(audioConfigs)
     -- 检查必要参数
+    if not  audio  then
+        log.error("不支持audio 库,请选择支持audio 的core")
+        return false
+    end
     if not audioConfigs or type(audioConfigs) ~= "table" then
         log.error("配置参数必须为table类型")
         return false
@@ -265,10 +269,13 @@ function exaudio.play_start(playConfigs)
     if playConfigs.priority ~= nil then
         if check_param(playConfigs.priority, "number", "priority") then
             if playConfigs.priority > audio_play_param.priority then
-                if audio.play(MULTIMEDIA_ID) ~= true then
-                    return false
+                log.error("是否完成播放",audio.isEnd(MULTIMEDIA_ID))
+                if not audio.isEnd(MULTIMEDIA_ID) then
+                    if audio.play(MULTIMEDIA_ID) ~= true then
+                        return false
+                    end
+                    sys.waitUntil(EX_MSG_PLAY_DONE)
                 end
-                sys.waitUntil(EX_MSG_PLAY_DONE)
                 audio_play_param.priority = playConfigs.priority
             end
         else
@@ -303,6 +310,10 @@ function exaudio.play_start(playConfigs)
         end
 
     elseif play_type == 1 then  -- TTS播放
+        if not audio.tts then
+            log.error("本固件不支持TTS,请更换支持TTS 的固件")
+            return false
+        end
         if not check_param(playConfigs.content, "string", "content") then
             log.error("TTS播放content必须为字符串")
             return false

+ 2 - 2
module/Air8000/demo/audio/main.lua

@@ -9,9 +9,9 @@ VERSION = "1.0.0"
 
 
 
--- require "play_file"     --  播放文件
+require "play_file"     --  播放文件
 -- require "play_tts"      -- 播放tts
-require "play_stream"        -- 流式播放
+-- require "play_stream"        -- 流式播放
 -- require "record_file"        -- 录音到文件
 -- require "record_stream"        -- 流式录音   
 

+ 19 - 7
module/Air8000/demo/audio/play_file.lua

@@ -10,6 +10,7 @@ local audio_setup_param ={
 local function play_end(event)
     if event == exaudio.PLAY_DONE then
         log.info("播放完成")
+        exaudio.play_stop()
     end
 end 
 local audio_play_param ={
@@ -30,6 +31,7 @@ gpio.setup(0, boot_key_cb, gpio.PULLDOWN, gpio.RISING)
 gpio.debounce(0, 200, 1)
 
 local function power_key_cb()
+    log.info("切换播放")
     sys.sendMsg(taskName, MSG_KEY_PRESS, "NEXT_AUDIO")
 end
 
@@ -39,17 +41,27 @@ gpio.debounce(gpio.PWR_KEY, 200, 1)
 
 
 
+local index_number = 1
+local audio_path = nil
 local function audio_task()
     log.info("开始播放音频文件")
     if exaudio.setup(audio_setup_param) then
         exaudio.play_start(audio_play_param) -- 仅仅支持task 中运行
-         msg = sys.waitMsg(audio_task, MSG_KEY_PRESS)
-        if msg[2] ==  "NEXT_AUDIO" then  -- true powerkey false boot key
-            
-        elseif msg[2] ==  "STOP_AUDIO" then
-           exaudio.play_stop()
-        end 
+        while true do
+            local msg = sys.waitMsg(taskName, MSG_KEY_PRESS)
+            if msg[2] ==  "NEXT_AUDIO" then  -- true powerkey false boot key
+                if index_number %2 == 0 then
+                    audio_path = "/luadb/1.mp3"
+                else
+                    audio_path = "/luadb/10.amr"
+                end
+                exaudio.play_start({type= 0, content = audio_path,cbFnc = play_end,priority = index_number})
+                index_number= index_number +1 
+            elseif msg[2] ==  "STOP_AUDIO" then
+                exaudio.play_stop()
+            end 
+        end
     end
     
 end
-sysplus.taskInitEx(audio_task, taskName)
+sys.taskInitEx(audio_task, taskName)

+ 1 - 1
module/Air8000/demo/audio/play_stream.lua

@@ -60,4 +60,4 @@ local function audio_task()
     end
 end
 
-sysplus.taskInitEx(audio_task, taskName)
+sys.taskInitEx(audio_task, taskName)

+ 1 - 1
module/Air8000/demo/audio/play_tts.lua

@@ -33,4 +33,4 @@ local function audio_task()
     end
 end
 
-sysplus.taskInitEx(audio_task, taskName)
+sys.taskInitEx(audio_task, taskName)

+ 11 - 56
module/Air8000/demo/audio/readme.md

@@ -28,12 +28,19 @@
 ## 常量的介绍
 
 1、exaudio.PLAY_DONE : 当播放音频结束时,会在回调函数返回播放完成的时间
+
 2、exaudio.RECORD_DONE : 当录音结束时,会在回调函数返回播放完成的时间
+
 3、exaudio.AMR_NB : 仅录音时有用,表示使用AMR_NB 方式录音
+
 4、exaudio.AMR_WB : 仅录音时有用,表示使用AMR_WB 方式录音
+
 5、exaudio.PCM_8000 :  仅录音时有用,表示使用8000/秒 的速度对音频进行采样
+
 6、exaudio.PCM_16000 : 仅录音时有用,表示使用16000/秒 的速度对音频进行采样
+
 7、exaudio.PCM_24000 : 仅录音时有用,表示使用24000/秒 的速度对音频进行采样
+
 8、exaudio.PCM_32000 : 仅录音时有用,表示使用32000/秒 的速度对音频进行采样
 
 ## 演示功能概述
@@ -45,73 +52,21 @@
 
 ![](https://docs.openluat.com/air8000/luatos/app/image/netdrv_multi.jpg)
 
-1、Air8000开发板一块+可上网的sim卡一张+4g天线一根+wifi天线一根+网线一根:
+1、Air8000开发板一块
 
-- sim卡插入开发板的sim卡槽
+2、喇叭一个
 
-- 天线装到开发板上
-
-- 网线一端插入开发板网口,另外一端连接可以上外网的路由器网口
-
-2、TYPE-C USB数据线一根 + USB转串口数据线一根,Air8000开发板和数据线的硬件接线方式为:
-
-- Air8000开发板通过TYPE-C USB口供电;(外部供电/USB供电 拨动开关 拨到 USB供电一端)
-
-- TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
-
-- USB转串口数据线,一般来说,白线连接开发板的UART1_TX,绿线连接开发板的UART1_RX,黑线连接核心板的GND,另外一端连接电脑USB口;
+2、插入喇叭到开发板中
 
 
 ## 演示软件环境
 
 1、Luatools下载调试工具
 
-2、[Air8000 V2012版本固件](https://docs.openluat.com/air8000/luatos/firmware/)(理论上,2025年7月26日之后发布的固件都可以)
+2、[Air8000 V2014版本固件](https://docs.openluat.com/air8000/luatos/firmware/)(理论上,2025年7月26日之后发布的固件都可以)
 
-3、PC端的串口工具,例如SSCOM、LLCOM等都可以
 
-4、[MQTT客户端软件MQTTX](https://docs.openluat.com/air8000/luatos/common/swenv/#27-mqttmqttx)
 
 
 ## 演示核心步骤
 
-1、搭建好硬件环境
-
-2、demo脚本代码netdrv_device.lua中,按照自己的网卡需求启用对应的Lua文件
-
-- 如果需要单4G网卡,打开require "netdrv_4g",其余注释掉
-
-- 如果需要单WIFI STA网卡,打开require "netdrv_wifi",其余注释掉;同时netdrv_wifi.lua中的wlan.connect("茶室-降功耗,找合宙!", "Air123456", 1),前两个参数,修改为自己测试时wifi热点的名称和密码;注意:仅支持2.4G的wifi,不支持5G的wifi
-
-- 如果需要以太网卡,打开require "netdrv_eth_spi",其余注释掉
-
-- 如果需要多网卡,打开require "netdrv_multiple",其余注释掉;同时netdrv_multiple.lua中的ssid = "茶室-降功耗,找合宙!", password = "Air123456", 修改为自己测试时wifi热点的名称和密码;注意:仅支持2.4G的wifi,不支持5G的wifi
-
-3、Luatools烧录内核固件和修改后的demo脚本代码
-
-4、烧录成功后,自动开机运行,如果出现以下日志,表示四路mqtt连接成功
-
-``` lua
-I/user.mqtt_client_main_task_func connect success
-
-I/user.mqtts_client_main_task_func connect success
-
-I/user.mqtts_ca_client_main_task_func connect success
-
-I/user.mqtts_m_ca_client_main_task_func connect success
-```
-
-5、启动三个MQTTX工具,分别连接上mqtt client、mqtts client、mqtts mutual client对应的server,订阅$imei/timer/up$主题,imei表示设备的imei号;可以看到,每隔5秒钟,会接收到一段类似于 send from timer: 1 的数据,最后面的数字每次加1;
-
-6、打开PC端的串口工具,选择对应的端口,配置波特率115200,数据位8,停止位1,无奇偶校验位;
-
-7、PC端的串口工具输入一段数据,点击发送,在MQTTX工具订阅的$imei/uart/up$主题下可以接收到数据;
-
-8、在MQTTX工具上,在主题$imei/down$下publish一段数据,点击发送,在PC端的串口工具上可以接收到主题和数据,并且也能看到是哪一个server发送的,类似于以下效果:
-
-``` lua
-recv from mqtt server: 864793080144269/down,123456798012345678901234567830
-recv from mqtt ssl server: 864793080144269/down,123456798012345678901234567830
-recv from mqtt ssl ca server: 864793080144269/down,123456798012345678901234567830
-recv from mqtt ssl mutual ca server: 864793080144269/down,123456798012345678901234567830
-```

+ 1 - 1
module/Air8000/demo/audio/record_file.lua

@@ -36,4 +36,4 @@ local function audio_task()
     end
 end
 
-sysplus.taskInitEx(audio_task, taskName)
+sys.taskInitEx(audio_task, taskName)

+ 1 - 1
module/Air8000/demo/audio/record_stream.lua

@@ -35,4 +35,4 @@ local function audio_task()
     end
 end
 
-sysplus.taskInitEx(audio_task, taskName)
+sys.taskInitEx(audio_task, taskName)

+ 1 - 1
script/corelib/sys.lua

@@ -513,7 +513,7 @@ end
 -- @usage sys.waitMsg('a', 'b', 1000)
 function sys.waitMsg(taskName, target, ms)
     if taskList[taskName] == nil then
-        log.error("sysplus", "sys.taskInitEx启动的task才能使用waitMsg")
+        log.error("sys", "sys.taskInitEx启动的task才能使用waitMsg")
         return false
     end
     local msg = false