record_file.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. --[[
  2. @module record_file
  3. @summary 录音到文件
  4. @version 1.0
  5. @date 2025.09.08
  6. @author 梁健
  7. @usage
  8. 录音到文件,核心业务逻辑为:
  9. 1、主程序录音到/record.amr 文件
  10. 2、使用powerkey 按键进行录音音量减小
  11. 3、点击boot 按键进行录音音量增加
  12. 本文件没有对外接口,直接在main.lua中require "record_file"就可以加载运行;
  13. ]]
  14. exaudio = require("exaudio")
  15. -- 音频初始化设置参数,exaudio.setup 传入参数
  16. local audio_setup_param ={
  17. model= "es8311", -- dac类型,可填入"es8311","es8211"
  18. i2c_id = 0, -- i2c_id,可填入0,1 并使用pins 工具配置对应的管脚
  19. pa_ctrl = 162, -- 音频放大器电源控制管脚
  20. dac_ctrl = 164, -- 音频编解码芯片电源控制管脚
  21. bits_per_sample = 16 -- 录音的位深,可选8,16,24 位,但是当选择音频格式为AMR_NB,自动调节为8位,当音频格式为AMR_WB,自动调节为16位
  22. }
  23. local recordPath = "/record.amr"
  24. -- 录音完成回调
  25. local function record_end(event)
  26. if event == exaudio.RECORD_DONE then
  27. log.info("录音后文件大小",io.fileSize(recordPath))
  28. end
  29. end
  30. -- 录音配置参数,exaudio.record_start 的入参
  31. local audio_record_param ={
  32. format= exaudio.PCM_32000, -- 录制格式,有exaudio.AMR_NB,exaudio.AMR_WB,exaudio.PCM_8000,exaudio.PCM_16000,exaudio.PCM_24000,exaudio.PCM_32000
  33. -- 如果选择exaudio.AMR_WB,则需要固件支持volte 功能
  34. time = 5, -- 录制时间,单位(秒)
  35. path = recordPath, -- 如果填入的是字符串,则表示是文件路径,录音会传输到这个路径里
  36. -- 如果填入的是函数,则表示是流式录音,录音的数据会传输到此函数内,返回的是zbuf地址,以及数据长度
  37. -- 如果是流式录音,则仅支持PCM 格式
  38. cbfnc = record_end, -- 录音完毕回调函数
  39. }
  40. ---------------------------------
  41. ---通过BOOT 按键增大录音---
  42. ---------------------------------
  43. local volume_number = 50
  44. local function add_volume()
  45. volume_number = volume_number + 20
  46. log.info("增大录音音量",volume_number)
  47. exaudio.mic_vol(volume_number)
  48. end
  49. --按下boot 停止播放
  50. gpio.setup(0, add_volume, gpio.PULLDOWN, gpio.RISING)
  51. gpio.debounce(0, 200, 1)
  52. ---------------------------------
  53. ---通过POWERKEY按键减小录音-------
  54. ---------------------------------
  55. local function down_volume()
  56. volume_number = volume_number - 15
  57. log.info("减小录音音量",volume_number)
  58. exaudio.mic_vol(volume_number)
  59. end
  60. gpio.setup(gpio.PWR_KEY, down_volume, gpio.PULLUP, gpio.FALLING)
  61. gpio.debounce(gpio.PWR_KEY, 200, 1) -- 防抖,防止频繁触发
  62. ---------------------------------
  63. ---音频 task 初始化函数-----------
  64. ---------------------------------
  65. local taskName = "task_audio"
  66. local function audio_task()
  67. sys.wait(100)
  68. log.info("开始录制音频到文件")
  69. if exaudio.setup(audio_setup_param) then
  70. exaudio.record_start(audio_record_param)
  71. end
  72. end
  73. sys.taskInitEx(audio_task, taskName)