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

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

@@ -22,7 +22,7 @@ local CHIP_ID_REG = 0x00    -- 芯片ID寄存器地址
 
 -- 模块常量
 exaudio.PLAY_DONE = 1         --   音频播放完毕的事件之一
-exaudio.RECORD_DONE = 1         
+exaudio.RECORD_DONE = 1       --   音频录音完毕的事件之一  
 exaudio.AMR_NB = 0
 exaudio.AMR_WB = 1
 exaudio.PCM_8000 = 2

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

@@ -1,4 +1,29 @@
 
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.09.08
+@author  梁健
+@usage
+本demo演示的核心功能为:
+1、play_file.lua: 播放音频文件,可支持wav,amr,mp3 格式音频
+
+2、play_tts: 支持文字转普通话输出需要固件支持
+
+3、play_stream: 流式播放音频,仅支持PCM 格式,可以将音频推流到云端,用来对接大模型或者流式录音的应用。
+
+4、record_file: 录音到文件,仅支持PCM 格式
+
+5、record_stream:  流式录音,仅支持PCM,可以将音频流不断的拉取,可用来对接大模型
+
+6、1.mp3: 用于测试本地mp3文件播放
+
+7、test.pcm: 用于测试pcm 流式播放(实际可以云端下载)
+
+
+更多说明参考本目录下的readme.md文件
+]]
 -- LuaTools需要PROJECT和VERSION这两个信息
 PROJECT = "audio"
 VERSION = "1.0.0"
@@ -11,8 +36,8 @@ VERSION = "1.0.0"
 
 -- require "play_file"     --  播放文件
 -- require "play_tts"      -- 播放tts
-require "play_stream"        -- 流式播放
--- require "record_file"        -- 录音到文件
+-- require "play_stream"        -- 流式播放
+require "record_file"        -- 录音到文件
 -- require "record_stream"        -- 流式录音   
 
 

+ 15 - 0
module/Air8000/demo/audio/play_file.lua

@@ -1,3 +1,18 @@
+--[[
+@module  play_file
+@summary 播放文件
+@version 1.0
+@date    2025.09.08
+@author  梁健
+@usage
+
+本文件为播放文件的应用功能模块,核心业务逻辑为:
+1、自动播放一个1.mp3音乐,
+2、点powerkey 按键进行音频切换,点击boot 按键停止音频播放
+3、点击boot 按键停止音频播放
+本文件没有对外接口,直接在main.lua中require "play_file"就可以加载运行;
+]]
+
 exaudio = require("exaudio")
 local taskName = "task_audio"
 

+ 15 - 0
module/Air8000/demo/audio/play_stream.lua

@@ -1,3 +1,18 @@
+--[[
+@module  play_stream
+@summary 流式播放
+@version 1.0
+@date    2025.09.08
+@author  梁健
+@usage
+
+本文件为流式播放应用功能模块,核心业务逻辑为:
+1、使用test.pcm 模拟音频来源
+2、通过流式传输不断填入播放的音频
+3、使用powerkey 按键进行音量减小,点击boot 按键进行音量增加
+本文件没有对外接口,直接在main.lua中require "play_stream"就可以加载运行;
+]]
+
 exaudio = require("exaudio")
 
 local audio_setup_param ={

+ 19 - 5
module/Air8000/demo/audio/play_tts.lua

@@ -1,3 +1,17 @@
+--[[
+@module  play_tts
+@summary 文字转语音
+@version 1.0
+@date    2025.09.08
+@author  梁健
+@usage
+
+本文件为流式播放应用功能模块,核心业务逻辑为:
+1、播放一个TTS
+2、点powerkey 按键进行tts 的音色切换
+3、点击boot 按键停止音频播放
+本文件没有对外接口,直接在main.lua中require "play_tts"就可以加载运行;
+]]
 exaudio = require("exaudio")
 local taskName = "task_audio"
 
@@ -18,7 +32,7 @@ end
 local audio_play_param ={
     type= 1,                -- 播放类型,有0,播放文件,1.播放tts 2. 流式播放
                             -- 如果是播放文件,支持mp3,amr,wav格式
-                            -- 如果是tts,内容格式见:https://wiki.luatos.com/chips/air780e/tts.html?highlight=tts
+                            -- 如果是tts,内容格式见:https://docs.openluat.com/air780epm/common/tts/
                             -- 流式播放,仅支持PCM 格式音频,如果是流式播放,则sampling_rate, sampling_depth,signed_or_unsigned 必填写
     content = "支付宝到账,1千万元",          -- 如果播放类型为0时,则填入string 是播放单个音频文件,如果是表则是播放多段音频文件。
     cbfnc = play_end,            -- 播放完毕回调函数
@@ -52,7 +66,7 @@ gpio.debounce(gpio.PWR_KEY, 200, 1)  -- 防抖,防止频繁触发
 
 ---------------------------------------------------------------------------------------------------
 ---------------主task------------------------------------------------------------------------------
---- 关于TTS 音色设置请见: https://wiki.luatos.com/chips/air780e/tts.html?highlight=tts
+--- 关于TTS 音色设置请见: https://docs.openluat.com/air780epm/common/tts/
 ---------------------------------------------------------------------------------------------------
 
 
@@ -66,11 +80,11 @@ local function audio_task()
             local msg = sys.waitMsg(taskName, MSG_KEY_PRESS)   -- 等待按键触发
             if msg[2] ==  "NEXT_AUDIO" then      
                 if index_number %5 == 0 then     --  切换播报音色
-                    audio_path = "[m51]支付宝到账,1千万元"   -- 女声1
+                    audio_path = "[m51]支付宝到账,1千万元"   -- 许久
                 elseif index_number %5 == 1 then
-                    audio_path = "[m52]支付宝到账,1千万元"   -- 男声1
+                    audio_path = "[m52]支付宝到账,1千万元"   -- 许多
                 elseif index_number %5 == 2 then
-                    audio_path = "[m53]支付宝到账,1千万元"   -- 女声2
+                    audio_path = "[m53]支付宝到账,1千万元"   -- 晓萍
                 elseif index_number %5 == 3 then                    
                     audio_path = "[m54]支付宝到账,1千万元"   -- 唐老鸭
                 elseif index_number %5 == 4 then                    

+ 1 - 1
module/Air8000/demo/audio/readme.md

@@ -47,7 +47,7 @@
 
 3、play_stream.lua 流式播放PCM,使用test.pcm 模拟音频来源,通过流式传输不断填入播放的音频,使用powerkey 按键进行音量减小,点击boot 按键进行音量增加
 
-4、record_file.lua 录音到文件(仅支持PCM),演示了pcm 录音到文件,使用powerkey 按键进行录音音量减小,点击boot 按键进行录音音量增加
+4、record_file.lua 录音到文件,演示了pcm 录音到文件,使用powerkey 按键进行录音音量减小,点击boot 按键进行录音音量增加
 
 5、record_stream.lua 流式录音(仅支持PCM),不断输出录音的数据地址和录音长度,供给应用层调用
 

+ 19 - 3
module/Air8000/demo/audio/record_file.lua

@@ -1,3 +1,17 @@
+--[[
+@module  record_file
+@summary 录音到文件
+@version 1.0
+@date    2025.09.08
+@author  梁健
+@usage
+
+录音到文件,核心业务逻辑为:
+1、主程序录音到/record.amr 文件
+2、使用powerkey 按键进行录音音量减小
+3、点击boot 按键进行录音音量增加
+本文件没有对外接口,直接在main.lua中require "record_file"就可以加载运行;
+]]
 exaudio = require("exaudio")
 
 local audio_setup_param ={
@@ -17,11 +31,13 @@ end
 
 
 local audio_record_param ={
-    format= exaudio.AMR_WB,    -- 录制格式,有exaudio.AMR_NB,exaudio.AMR_WB,exaudio.PCM_8000,exaudio.PCM_16000,exaudio.PCM_24000,exaudio.PCM_32000
+    format= exaudio.PCM_32000,    -- 录制格式,有exaudio.AMR_NB,exaudio.AMR_WB,exaudio.PCM_8000,exaudio.PCM_16000,exaudio.PCM_24000,exaudio.PCM_32000
+                                  -- 如果选择exaudio.AMR_WB,则需要固件支持volte 功能
     time = 5,               -- 录制时间,单位(秒)
     path = recordPath,             -- 如果填入的是字符串,则表示是文件路径,录音会传输到这个路径里
-                                      -- 如果填入的是函数,则表示是流式录音,录音的数据会传输到此函数内,返回的是zbuf地址,以及数据长度
-    cbFnc = record_end,            -- 录音完毕回调函数
+                                   -- 如果填入的是函数,则表示是流式录音,录音的数据会传输到此函数内,返回的是zbuf地址,以及数据长度
+                                   -- 如果是流式录音,则仅支持PCM 格式 
+    cbfnc = record_end,            -- 录音完毕回调函数
 }
 
 

+ 17 - 2
module/Air8000/demo/audio/record_stream.lua

@@ -1,5 +1,19 @@
+--[[
+@module  record_stream
+@summary 流式录音
+@version 1.0
+@date    2025.09.08
+@author  梁健
+@usage
+
+流式录音(仅支持PCM),核心业务逻辑为:
+1、主程序录音进行流式录音
+2、录音过程中不断的进行recode_data_callback回调,回调内容为音频流的地址和长度
+本文件没有对外接口,直接在main.lua中require "record_stream"就可以加载运行;
+]]
 exaudio = require("exaudio")
 
+-- 
 local audio_setup_param ={
     model= "es8311",          -- dac类型,可填入"es8311","es8211"
     i2c_id = 0,          -- i2c_id,可填入0,1 并使用pins 工具配置对应的管脚
@@ -21,8 +35,9 @@ local audio_record_param ={
     format= exaudio.PCM_16000,    -- 录制格式,有exaudio.AMR_NB,exaudio.AMR_WB,exaudio.PCM_8000,exaudio.PCM_16000,exaudio.PCM_24000,exaudio.PCM_32000
     time = 5,               -- 录制时间,单位(秒)
     path = recode_data_callback,             -- 如果填入的是字符串,则表示是文件路径,录音会传输到这个路径里
-                            -- 如果填入的是函数,则表示是流式录音,录音的数据会传输到此函数内,返回的是zbuf地址,以及数据长度
-    cbFnc = record_end,            -- 录音完毕回调函数
+                                        -- 如果填入的是函数,则表示是流式录音,录音的数据会传输到此函数内,返回的是zbuf地址,以及数据长度
+                                        -- 如果是流式录音,则仅支持PCM 格式 
+    cbfnc = record_end,            -- 录音完毕回调函数
 }