airaudio.lua 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. --[[
  2. @module airaudio
  3. @summary 初始化codec测试功能模块
  4. @version 001.000.000
  5. @date 2025.07.11
  6. @author 李源龙
  7. @usage
  8. 使用Air780EHV核心板外接AirAudio_1000,初始化配置:
  9. Air780EHM AirAudio_1000
  10. GND(任意) GND
  11. VDD_EXT VCC
  12. 19/GPIO22 PA_EN
  13. 5/SPK+ SPK+
  14. 4/SPK- SPK-
  15. ]]
  16. local airaudio = {}
  17. local i2c_id = 0 -- i2c_id 0
  18. local pa_pin = gpio.AUDIOPA_EN -- 喇叭pa功放脚
  19. local power_pin = 20 -- es8311电源脚
  20. local i2s_id = 0 -- i2s_id 0
  21. local i2s_mode = 0 -- i2s模式 0 主机 1 从机
  22. local i2s_sample_rate = 16000 -- 采样率
  23. local i2s_bits_per_sample = 16 -- 数据位数
  24. local i2s_channel_format = i2s.MONO_R -- 声道, 0 左声道, 1 右声道, 2 立体声
  25. local i2s_communication_format = i2s.MODE_LSB -- 格式, 可选MODE_I2S, MODE_LSB, MODE_MSB
  26. local i2s_channel_bits = 16 -- 声道的BCLK数量
  27. local multimedia_id = 0 -- 音频通道 0
  28. local pa_on_level = 1 -- PA打开电平 1 高电平 0 低电平
  29. local power_delay = 3 -- 在DAC启动前插入的冗余时间,单位100ms
  30. local pa_delay = 100 -- 在DAC启动后,延迟多长时间打开PA,单位1ms
  31. local power_on_level = 1 -- 电源控制IO的电平,默认拉高
  32. local power_time_delay = 600 -- 音频播放完毕时,PA与DAC关闭的时间间隔,单位1ms
  33. local taskName = "task_tts"
  34. local play_string = "降功耗,找合宙"
  35. local voice_vol = 60 -- 喇叭音量
  36. local mic_vol = 80 -- 麦克风音量
  37. function audio_setup()
  38. sys.wait(100)
  39. i2c.setup(i2c_id,i2c.FAST)
  40. i2s.setup(i2s_id, i2s_mode, i2s_sample_rate, i2s_bits_per_sample, i2s_channel_format, i2s_communication_format,i2s_channel_bits)
  41. audio.config(multimedia_id, pa_pin, pa_on_level, power_delay, pa_delay, power_pin, power_on_level, power_time_delay)
  42. audio.setBus(multimedia_id, audio.BUS_I2S,{chip = "es8311",i2cid = i2c_id , i2sid = i2s_id, voltage = audio.VOLTAGE_1800}) --通道0的硬件输出通道设置为I2S
  43. audio.vol(multimedia_id, voice_vol)
  44. audio.micVol(multimedia_id, mic_vol)
  45. end
  46. local function audio_callback(id, event)
  47. local succ,stop,file_cnt = audio.getError(0)
  48. if not succ then
  49. if stop then
  50. log.info("用户停止播放")
  51. else
  52. log.info("第", file_cnt, "个文件解码失败")
  53. end
  54. end
  55. sysplus.sendMsg(taskName, MSG_PD)
  56. end
  57. function airaudio.init()
  58. sys.wait(100)
  59. gpio.setup(power_pin, 1, gpio.PULLUP) -- 打开音频编解码供电
  60. gpio.setup(pa_pin, 1, gpio.PULLUP) -- pa供电
  61. audio_setup()
  62. audio.on(0, audio_callback)
  63. end
  64. return airaudio