full.lua 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. --- 模块功能:网络全双工对讲功能测试.
  2. -- @author openLuat
  3. -- @module Network full duplex intercom
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2023.6.7
  7. module(..., package.seeall)
  8. -- require"record"
  9. require "audio"
  10. require "common"
  11. require "pins"
  12. --[[脚本测试逻辑:
  13. --基于724 A13开发板,mic输入,spk输出;
  14. --手动拉高GPIO19,触发gpio19上升沿中断开启录音,触发gpio19下降沿中断关闭录音;
  15. --录音数据上传mqtt
  16. --播放来自mqtt订阅频道消息
  17. --]]
  18. --播放来自mqtt订阅频道录音数据流数据
  19. function play_matt(data)
  20. log.info("play_stream",string.toHex(data))
  21. audiocore.pocstreamplay(data)
  22. end
  23. --订阅消息
  24. sys.subscribe("audio_play_full",play_matt)
  25. -- 流录音
  26. function recordCb(result, size, tag)
  27. log.info("testRecord.rcdcb", result, size, tag)
  28. if tag == "STREAM" then
  29. local s = audiocore.streamrecordread(size)
  30. sys.publish("mqtt_send",s) --发布消息,
  31. log.info("MICDATA", string.toHex(s)) ---打印录音数据流数据
  32. --audiocore.pocstreamplay(s) ---读录音数据流数据
  33. else
  34. log.info("poc stream record end")
  35. end
  36. end
  37. rtos.on(rtos.MSG_RECORD,
  38. function(msg) ---注册外部消息的处理函数,rtos.MSG_RECORD录音状态
  39. log.info("record.MSG_RECORD", msg.record_end_ind, msg.record_error_ind)
  40. if msg.record_error_ind then recordCb(false, 0, "END") end
  41. if msg.record_end_ind then
  42. recordCb(true, recordType == "FILE" and io.fileSize(FILE) or 0, "END")
  43. end
  44. end)
  45. rtos.on(rtos.MSG_STREAM_RECORD,
  46. function(msg) ---rtos.MSG_STREAM_RECORD流录音长度
  47. log.info("record.MSG_STREAM_RECORD", msg.wait_read_len)
  48. recordCb(true, msg.wait_read_len, "STREAM")
  49. end)
  50. -- recordType = "FILE"
  51. recordType = "STREAM"
  52. sys.taskInit(function()
  53. audiocore.pocstart(audiocore.AMR, 1) ----打开全双工对讲
  54. audio.setVolume(5)
  55. sys.wait(3000)
  56. function gpio19IntFnc(msg)
  57. log.info("testGpioSingle.gpio19IntFnc", msg, getGpio19Fnc())
  58. -- 上升沿中断开启录音,下降沿中断关闭录音
  59. if msg == cpu.INT_GPIO_POSEDGE then
  60. audiocore.pocstreamrecord(10,256) -- 全双工对讲流录音接口,录音时长10S
  61. end
  62. if msg == cpu.INT_GPIO_NEGEDGE then
  63. audiocore.pocstoprecord()-- 关闭全双工对讲流录音接口
  64. end
  65. end
  66. --pio.pin.setpull(pio.PULLUP,pio.P0_19)
  67. -- GPIO19配置为中断,可通过getGpio19Fnc()获取输入电平,产生中断时,自动执行gpio19IntFnc函数
  68. getGpio19Fnc = pins.setup(pio.P0_19, gpio19IntFnc)
  69. end)