audiocore ========= 作者:朱天华 陈旭东 时间:2020年08月03日 :: 脚本lib中audio库对audiocore进行了二次封装 建议直接使用脚本lib中的audio库来设计程序 不建议直接使用core中的audiocore库来设计程序 本章节audiocore 接口可帮助理解脚本lib中的audio库代码 audiocore.play(audioFilePath) ----------------------------- - 功能:播放音频文件 ​ 音频文件格式支持:mp3、wav、amr、pcm - 参数: +--------+---+------------+-------------------------------------------+ | 参数 | 类 | 释义 | 取值 | | | 型 | | | +========+===+============+===========================================+ | a | s | 音频文件 | 如果是Luatools烧录的音频文件xxx.mp3,则文 | | udioFi | t | 的完整路径 | 件完整路径为“lua/xxx.mp3”如果是sd卡中根目 | | lePath | r | | 录下的音频文件yyy.mp3,则文件完整路径为“s | | | i | | dcard0/yyy.mp3”其余路径根据实际值传入即可 | | | n | | | | | g | | | +--------+---+------------+-------------------------------------------+ - 返回值: +----+---+------------+-------------------------------------------------+ | 返 | 类 | 释义 | 取值 | | 回 | 型 | | | | 值 | | | | +====+===+============+=================================================+ | re | b | 返回同 | false表示不允许播放true表示允许播放,并 | | su | o | 步播放结果 | 且已经去执行播放动作;异步播放结果通过消息rtos. | | lt | o | | MSG_AUDIO通知到Lua脚本,消息携带参数msg.play_en | | | l | | d_ind,true表示播放成功结束,其余值表示播放失败 | +----+---+------------+-------------------------------------------------+ - 示例: .. code:: c local function audioMsg(msg) log.info("audio.MSG_AUDIO",msg.play_end_ind) sys.publish("LIB_AUDIO_PLAY_IND","RESULT",msg.play_end_ind) end --注册core上报的rtos.MSG_AUDIO消息的处理函数 rtos.on(rtos.MSG_AUDIO,audioMsg) audiocore.play("/lua/call.mp3") audiocore.playdata(audioData,audioFormat[,audioLoop]) ----------------------------------------------------- - 功能:播放音频数据 ​ 音频数据格式支持:mp3、wav、amr、pcm、spx - 参数: +------+---+---------------------+-------------------------------------+ | 参数 | 类 | 释义 | 取值 | | | 型 | | | +======+===+=====================+=====================================+ | a | s | 音频数据内容 | | | udio | t | | | | Data | r | | | | | i | | | | | n | | | | | g | | | +------+---+---------------------+-------------------------------------+ | aud | n | 音频数据格式 | audiocore.MP3audiocore.WAVaudi | | ioFo | u | | ocore.AMRaudiocore.PCMaudiocore.SPX | | rmat | m | | | | | b | | | | | e | | | | | r | | | +------+---+---------------------+-------------------------------------+ | a | b | 是否循环播放可 | true表示循环播放fal | | udio | o | 选参数,默认不循环 | se或者nil表示仅播放一次,不循环播放 | | Loop | o | | | | | l | | | +------+---+---------------------+-------------------------------------+ - 返回值: +----+---+------------+-------------------------------------------------+ | 返 | 类 | 释义 | 取值 | | 回 | 型 | | | | 值 | | | | +====+===+============+=================================================+ | re | b | 返回同 | false表示不允许播放true表示允许播放,并 | | su | o | 步播放结果 | 且已经去执行播放动作;异步播放结果通过消息rtos. | | lt | o | | MSG_AUDIO通知到Lua脚本,消息携带参数msg.play_en | | | l | | d_ind,true表示播放成功结束,其余值表示播放失败 | +----+---+------------+-------------------------------------------------+ - 示例: .. code:: c local function audioMsg(msg) log.info("audio.MSG_AUDIO",msg.play_end_ind) sys.publish("LIB_AUDIO_PLAY_IND","RESULT",msg.play_end_ind) end --注册core上报的rtos.MSG_AUDIO消息的处理函数 rtos.on(rtos.MSG_AUDIO,audioMsg) audiocore.play(io.readFile("/lua/call.mp3"),audiocore.MP3) audiocore.streamplay(audioFormat,audioData) ------------------------------------------- - 功能:流式播放音频数据 ​ 音频数据格式支持:mp3、wav、amr、pcm、spx - 参数: +-------+---+--------+-----------------------------------------------+ | 参数 | 类 | 释义 | 取值 | | | 型 | | | +=======+===+========+===============================================+ | a | n | 音频数 | audiocore.MP3audioco | | udioF | u | 据格式 | re.WAVaudiocore.AMRaudiocore.PCMaudiocore.SPX | | ormat | m | | | | | b | | | | | e | | | | | r | | | +-------+---+--------+-----------------------------------------------+ | audi | s | 音频数 | | | oData | t | 据内容 | | | | r | | | | | i | | | | | n | | | | | g | | | +-------+---+--------+-----------------------------------------------+ - 返回值: ==================== ====== ================== ==== 返回值 类型 释义 取值 ==================== ====== ================== ==== acceptedAudioDataLen number 接受的音频数据长度 ==================== ====== ================== ==== - 注意事项: 流式播放音频数据时,在core中有一个4K字节的缓冲区,用来存放音频数据,调用audiocore.streamplay接口时,音频数据被填充到这个缓冲区内,被填充的最大长度为缓冲区的剩余字节数;例如缓冲区还剩1000字节可以填充,如果此时调用audiocore.streamplay填充3000字节数据,则实际只能将这3000字节数据的前1000字节填充到缓冲区,返回值acceptedAudioDataLen的值为1000,表示填充的字节数,剩余的2000字节被丢弃 - 示例: .. code:: c local tBuffer = {} local tStreamType local function consumer() sys.taskInit(function() audio.setVolume(7) while true do while #tBuffer==0 do sys.waitUntil("DATA_STREAM_IND") end local data = table.remove(tBuffer,1) --log.info("testAudioStream.consumer remove",data:len()) local procLen = audiocore.streamplay(tStreamType,data) if procLen