full_duplex_communication.lua 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. --- 模块功能:音频功能测试.
  2. -- @author openLuat
  3. -- @module audio.testAudio
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2018.03.19
  7. module(..., package.seeall)
  8. -- require"record"
  9. require "audio"
  10. require "common"
  11. require "pins"
  12. local FILE = "/record.pcm"
  13. -- 每次读取的录音文件长度
  14. local RCD_READ_UNIT = 4096
  15. -- rcdoffset:当前读取的录音文件内容起始位置
  16. -- rcdsize:录音文件总长度
  17. -- rcdcnt:当前需要读取多少次录音文件,才能全部读取
  18. local rcdoffset, rcdsize, rcdcnt
  19. local recordBuf = ""
  20. --[[脚本测试逻辑:
  21. --基于724 A13开发板,mic输入,spk输出;
  22. --间隔4S,TTS循环播放“上海科技有限公司欢迎您123456上海科技有限公司欢迎您”,
  23. --TTS播放过程中,手动拉高GPIO19,触发gpio19上升沿中断,
  24. --调用audio.stop停止播放TTS,开始对讲测试,对讲测试结束,继续播放TTS
  25. --]]
  26. -- 流录音
  27. function recordCb(result, size, tag)
  28. log.info("testRecord.rcdcb", result, size, tag)
  29. if tag == "STREAM" then
  30. local s = audiocore.streamrecordread(size)
  31. log.info("MICDATA", string.toHex(s)) ---打印录音数据流数据
  32. audiocore.pocstreamplay(s) ---读录音数据流数据
  33. ---全双工对讲流式播放音频数据
  34. else
  35. log.info("poc stream record end")
  36. end
  37. end
  38. rtos.on(rtos.MSG_RECORD,
  39. function(msg) ---注册外部消息的处理函数,rtos.MSG_RECORD录音状态
  40. log.info("record.MSG_RECORD", msg.record_end_ind, msg.record_error_ind)
  41. if msg.record_error_ind then recordCb(false, 0, "END") end
  42. if msg.record_end_ind then
  43. recordCb(true, recordType == "FILE" and io.fileSize(FILE) or 0, "END")
  44. end
  45. end)
  46. rtos.on(rtos.MSG_STREAM_RECORD,
  47. function(msg) ---rtos.MSG_STREAM_RECORD流录音长度
  48. log.info("record.MSG_STREAM_RECORD", msg.wait_read_len)
  49. recordCb(true, msg.wait_read_len, "STREAM")
  50. end)
  51. -- recordType = "FILE"
  52. recordType = "STREAM"
  53. sys.taskInit(function()
  54. -- audiocore.pocstart(audiocore.AMR, 1) ----打开全双工对讲
  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. audio.stop(function() log.info("STOP") end)
  61. else
  62. end
  63. end
  64. -- GPIO19配置为中断,可通过getGpio19Fnc()获取输入电平,产生中断时,自动执行gpio19IntFnc函数
  65. getGpio19Fnc = pins.setup(pio.P0_19, gpio19IntFnc)
  66. audio.play(1, "TTS",
  67. "上海科技有限公司欢迎您123456上海科技有限公司欢迎您",
  68. 1, function(result)
  69. log.info("TTS.AUDIO_PLAY_IND", result)
  70. if result == 5 then
  71. audiocore.pocstart(audiocore.AMR, 1) ----打开全双工对讲
  72. audio.setVolume(5) ---设置音量
  73. log.info("PocTest Start")
  74. recordBuf = ""
  75. audiocore.pocstreamrecord(10) -- 全双工对讲流录音接口,录音时长10S
  76. sys.wait(10000)
  77. audiocore.pocstop() ---全双工对讲停止录音
  78. audio.play(1, "TTS", "重新开始一次播放测试", 2, nil)
  79. elseif result == 0 then
  80. audio.play(1, "TTS", "上次TTS正常播放", 2, nil)
  81. else
  82. log.info("testTTS.fail", result)
  83. end
  84. end, true, 5000)
  85. end)