record_stream.lua 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. --[[
  2. @module record_stream
  3. @summary 流式录音
  4. @version 1.0
  5. @date 2025.09.08
  6. @author 梁健
  7. @usage
  8. 流式录音(仅支持PCM),核心业务逻辑为:
  9. 1、主程序录音进行流式录音
  10. 2、录音过程中不断的进行recode_data_callback回调,回调内容为音频流的地址和长度
  11. 本文件没有对外接口,直接在main.lua中require "record_stream"就可以加载运行;
  12. ]]
  13. exaudio = require("exaudio")
  14. -- 音频初始化设置参数,exaudio.setup 传入参数
  15. local audio_setup_param ={
  16. model= "es8311", -- dac类型,可填入"es8311","es8211"
  17. i2c_id = 0, -- i2c_id,可填入0,1 并使用pins 工具配置对应的管脚
  18. pa_ctrl = 162, -- 音频放大器电源控制管脚
  19. dac_ctrl = 164, -- 音频编解码芯片电源控制管脚
  20. bits_per_sample = 16 -- 录音的位深,可选8,16,24 位,但是当选择音频格式为AMR_NB,自动调节为8位,当音频格式为AMR_WB,自动调节为16位
  21. }
  22. -- 录音的数据流回调函数,注意不可以在回调函数中加入耗时和延迟的操作
  23. local function recode_data_callback(addr,data_len)
  24. log.info("收到音频流,地址为:",addr,"有效数据长度为:",data_len)
  25. end
  26. local function record_end(event)
  27. if event == exaudio.RECORD_DONE then
  28. log.info("录音完成")
  29. end
  30. end
  31. -- 录音配置参数,exaudio.record_start 的入参
  32. local audio_record_param ={
  33. format= exaudio.PCM_16000, -- 录制格式,有exaudio.AMR_NB,exaudio.AMR_WB,exaudio.PCM_8000,exaudio.PCM_16000,exaudio.PCM_24000,exaudio.PCM_32000
  34. time = 5, -- 录制时间,单位(秒)
  35. path = recode_data_callback, -- 如果填入的是字符串,则表示是文件路径,录音会传输到这个路径里
  36. -- 如果填入的是函数,则表示是流式录音,录音的数据会传输到此函数内,返回的是zbuf地址,以及数据长度
  37. -- 如果是流式录音,则仅支持PCM 格式
  38. cbfnc = record_end, -- 录音完毕回调函数
  39. }
  40. local taskName = "task_audio"
  41. local function audio_task()
  42. log.info("开始流式录制音频到文件")
  43. if exaudio.setup(audio_setup_param) then
  44. exaudio.record_start(audio_record_param)
  45. end
  46. end
  47. sys.taskInitEx(audio_task, taskName)