testAudioStream.lua 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. local tBuffer = {}
  12. local tStreamType
  13. --[[
  14. local function consumer()
  15. sys.taskInit(function()
  16. audio.setVolume(7)
  17. while true do
  18. while #tBuffer==0 do
  19. sys.waitUntil("DATA_STREAM_IND")
  20. end
  21. local data = table.remove(tBuffer,1)
  22. --log.info("testAudioStream.consumer remove",data:len())
  23. local procLen = audiocore.streamplay(tStreamType,data)
  24. if procLen<data:len() then
  25. --log.warn("produce fast")
  26. table.insert(tBuffer,1,data:sub(procLen+1,-1))
  27. sys.wait(5)
  28. end
  29. end
  30. end)
  31. end
  32. local function producer(streamType)
  33. sys.taskInit(function()
  34. while true do
  35. tStreamType = streamType
  36. local tAudioFile =
  37. {
  38. [audiocore.AMR] = "tip.amr",
  39. [audiocore.SPX] = "record.spx",
  40. [audiocore.PCM] = "alarm_door.pcm",
  41. [audiocore.MP3] = "call.mp3",
  42. }
  43. local fileHandle = io.open("/lua/"..tAudioFile[streamType],"rb")
  44. if not fileHandle then
  45. log.error("testAudioStream.producer open file error")
  46. return
  47. end
  48. while true do
  49. local data = fileHandle:read(streamType==audiocore.SPX and 1200 or 1024)
  50. if not data then fileHandle:close() return end
  51. table.insert(tBuffer,data)
  52. if #tBuffer==1 then sys.publish("DATA_STREAM_IND") end
  53. --log.info("testAudioStream.producer",data:len())
  54. sys.wait(10)
  55. end
  56. end
  57. end)
  58. end
  59. sys.timerStart(function()
  60. --producer(audiocore.AMR)
  61. --producer(audiocore.SPX)
  62. producer(audiocore.PCM)
  63. --producer(audiocore.MP3)
  64. consumer()
  65. end,3000)
  66. ]]--
  67. local function testAudioStream(streamType)
  68. sys.taskInit(
  69. function()
  70. while true do
  71. tStreamType = streamType
  72. log.info("AudioTest.AudioStreamTest", "AudioStreamPlay Start", streamType)
  73. local tAudioFile =
  74. {
  75. [audiocore.AMR] = "tip.amr",
  76. [audiocore.SPX] = "record.spx",
  77. [audiocore.PCM] = "alarm_door.pcm",
  78. [audiocore.MP3] = "sms.mp3"
  79. }
  80. local fileHandle = io.open("/lua/" .. tAudioFile[streamType], "rb")
  81. if not fileHandle then
  82. log.error("AudioTest.AudioStreamTest", "Open file error")
  83. return
  84. end
  85. while true do
  86. local data = fileHandle:read(streamType == audiocore.SPX and 1200 or 1024)
  87. if not data then
  88. fileHandle:close()
  89. while audiocore.streamremain() ~= 0 do
  90. sys.wait(20)
  91. end
  92. sys.wait(1000)
  93. audiocore.stop() --添加audiocore.stop()接口,否则再次播放会播放不出来
  94. log.warn("AudioTest.AudioStreamTest", "AudioStreamPlay Over")
  95. return
  96. end
  97. local data_len = string.len(data)
  98. local curr_len = 1
  99. while true do
  100. curr_len = curr_len + audiocore.streamplay(tStreamType,string.sub(data,curr_len,-1))
  101. if curr_len>=data_len then
  102. break
  103. elseif curr_len == 0 then
  104. log.error("AudioTest.AudioStreamTest", "AudioStreamPlay Error", streamType)
  105. return
  106. end
  107. sys.wait(10)
  108. end
  109. sys.wait(10)
  110. end
  111. end
  112. end
  113. )
  114. end
  115. sys.taskInit(
  116. function()
  117. sys.wait(3000)
  118. while true do
  119. audio.setVolume(2)
  120. log.info("AudioTest.AudioStreamTest.AMRFilePlayTest", "Start")
  121. testAudioStream(audiocore.AMR)
  122. sys.wait(30000)
  123. log.info("AudioTest.AudioStreamTest.SPXFilePlayTest", "Start")
  124. testAudioStream(audiocore.SPX)
  125. sys.wait(30000)
  126. log.info("AudioTest.AudioStreamTest.PCMFilePlayTest", "Start")
  127. testAudioStream(audiocore.PCM)
  128. sys.wait(30000)
  129. log.info("AudioTest.AudioStreamTest.MP3FilePlayTest", "Start")
  130. testAudioStream(audiocore.MP3)
  131. sys.wait(30000)
  132. end
  133. end
  134. )