音频播放控制 ============ 作者:闫国梁 最后更新时间:2020年7月6日 ## 音频播放和TTS 模块支持播放音频文件和TTS(文字转语音)功能,AT版本和LUAT版本均支持音频播放,AT版本和带TTS的LUAT版本支持TTS功能。音频文件目前支持mp3和amr ## AT模式 ### TTS(Text To Speech)功能:AT+CTTS 语法规则: ==== =========== ==== =============================================== 参数 定义 取值 对取值的说明 ==== =========== ==== =============================================== \ TTS工作模式 0 停止播放TTS \ 1 播放TTS,使用UCS2编码 \ 2 播放TTS,使用GBK编码(中文)和ASCII编码(数字) \ TTS文本 中文和数字 \ TTS工作状态 0 TTS非播放状态 \ 1 TTS播放状态 ==== =========== ==== =============================================== 参数定义: ==== =========== ==== =============================================== 参数 定义 取值 对取值的说明 ==== =========== ==== =============================================== \ TTS工作模式 0 停止播放TTS \ 1 播放TTS,使用UCS2编码 \ 2 播放TTS,使用GBK编码(中文)和ASCII编码(数字) \ TTS文本 中文和数字 \ TTS工作状态 0 TTS非播放状态 \ 1 TTS播放状态 ==== =========== ==== =============================================== 举例: +----------------------+----------------------+----------------------+ | 命令(→) /返回(←) | 实例 | 解释和说明 | +======================+======================+======================+ | → | AT+CTTS=2 | 播放数字和中文。 | | | ,“123,欢迎你的到来” | 注:目前暂时 | | | | 无法播放英文,中的英 | | | | 文发音不是单词,而是 | | | | 一个一个分离的字母。 | +----------------------+----------------------+----------------------+ | ← | OK | | +----------------------+----------------------+----------------------+ | ←(URC) | +CTTS:0 | 播放完 | | | | 毕,会有这个URC上报 | +----------------------+----------------------+----------------------+ | → | AT+CTTS=0 | 也可以在播放过程 | | | | 中用这个命令终止播放 | +----------------------+----------------------+----------------------+ | ← | OK | | +----------------------+----------------------+----------------------+ 设置 TTS 播放模式:AT+CTTSPARAM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 语法规则: ======== ==================== ================== 命令类型 语法 返回 ======== ==================== ================== 设置命令 AT+CTTSPARAM=, ,,[,] OK 查询命令 AT+CTTSPARAM? +CTTSPARAM:,,,, OK 测试命令 AT+CTTSPARAM=? OK ======== ==================== ================== 参数定义: +-----+-----------------+---+------------------------------------------+ | 参 | 定义 | 取 | 对取值的说明 | | 数 | | 值 | | +=====+=================+===+==========================================+ | | TTS播放音量 | 0 | 缺省值为50 | | | | - | | | | | 1 | | | | | 0 | | | | | 0 | | +-----+-----------------+---+------------------------------------------+ | | TTS播放模式, | 0 | auto read digit, and read digit based on | | | range:0-3 | | number rule first | +-----+-----------------+---+------------------------------------------+ | | | 1 | auto read digit, and read digit based on | | | | | telegram rule first | +-----+-----------------+---+------------------------------------------+ | | | 2 | read digit based on telegram rule | +-----+-----------------+---+------------------------------------------+ | | | 3 | read digit based on number rule | +-----+-----------------+---+------------------------------------------+ | | TTS播放音高 | 1 | 缺省值为50 | | | | - | | | | | 1 | | | | | 0 | | | | | 0 | | +-----+-----------------+---+------------------------------------------+ | | TTS播放速度 | 1 | 缺省值为50 | | | | - | | | | | 1 | | | | | 0 | | | | | 0 | | +-----+-----------------+---+------------------------------------------+ | | TTS播放通道 | 0 | main channel | +-----+-----------------+---+------------------------------------------+ | | | 1 | aux channel | +-----+-----------------+---+------------------------------------------+ 语音文件播放:AT+CAUDPLAY ~~~~~~~~~~~~~~~~~~~~~~~~~ 语法规则: ======== =============== ============================= 命令类型 语法 返回 ======== =============== ============================= 设置命令 AT+CAUDPLAY=[,] OK 查询命令 AT+CAUDPLAY? +CAUDPLAY: \ OK 测试命令 AT+CAUDPLAY=? +CAUDPLAY: (取值范围列表), OK ======== =============== ============================= 参数定义: ==== ============ ==== ======================= 参数 定义 取值 对取值的说明 ==== ============ ==== ======================= \ 使用模式 1 开始播放(start) \ 2 停止播放(stop) \ 3 暂停播放(pause) \ 4 恢复播放(resume) \ 音频文件名字 PCM,WAV,MP3。需要加后缀 ==== ============ ==== ======================= 举例: +----------------------+----------------------+----------------------+ | 命令(→) /返回(←) | 实例 | 解释和说明 | +======================+======================+======================+ | → | A | 创建音频文件 | | | T+FSCREATE=“111.mp3” | | +----------------------+----------------------+----------------------+ | ← | OK | | +----------------------+----------------------+----------------------+ | → | AT+FSWRITE | 输入音频 | | | =“111.mp3”,0,6314,20 | 文件。这里长度6314只 | | | | 是举例,请以实际为准 | +----------------------+----------------------+----------------------+ | ← | > | 这里输入音频文件内容 | | | | (二进制,即16进制) | +----------------------+----------------------+----------------------+ | ← | OK | | +----------------------+----------------------+----------------------+ | → | AT+ | 播放音频文件注:音 | | | CAUDPLAY=1,“111.mp3” | 频文件名字需要加后缀 | +----------------------+----------------------+----------------------+ | ← | OK | | +----------------------+----------------------+----------------------+ | → | AT+CAUDPLAY=3 | 暂停播放 | +----------------------+----------------------+----------------------+ | ← | OK | | +----------------------+----------------------+----------------------+ | → | AT+CAUDPLAY=4 | 恢复播放 | +----------------------+----------------------+----------------------+ | ← | OK | | +----------------------+----------------------+----------------------+ | → | AT+CAUDPLAY=2 | 终止播放 | +----------------------+----------------------+----------------------+ | ← | OK | | +----------------------+----------------------+----------------------+ 语音通道切换:AT+AUDCH ~~~~~~~~~~~~~~~~~~~~~~ 语法规则: ======== ========== ================================= 命令类型 语法 返回 ======== ========== ================================= 设置命令 AT+AUDCH=, OK 查询命令 AT+AUDCH? +AUDCH: , OK 测试命令 AT+AUDCH=? +AUDCH: (range of s,list of s) OK ======== ========== ================================= 参数定义: ==== ============ ==== ========================= 参数 定义 取值 对取值的说明 ==== ============ ==== ========================= \ 音频输出通道 0 通道 0,听筒(receiver) \ 1 通道 1,耳机(headphone) \ 2 通道 2,喇叭(speaker) \ 音频输入通道 0 main mic \ 1 auxilary mic \ 3 headphone mic left \ 4 headphone mic right ==== ============ ==== ========================= RECEIVER 音量控制:AT+CLVL ~~~~~~~~~~~~~~~~~~~~~~~~~~ 语法规则: ======== ========= ==================== 命令类型 语法 返回 ======== ========= ==================== 设置命令 AT+CLVL= OK 查询命令 AT+CLVL? +CLVL: OK 测试命令 AT+CLVL=? +CLVL: (取值范围) OK ======== ========= ==================== 参数定义: ==== ======== ===== ===================================== 参数 定义 取值 对取值的说明 ==== ======== ===== ===================================== \ 音频通道 0~100 0 声音最小,100 声音最大。缺省值为 60 ==== ======== ===== ===================================== LUAT模式 -------- audio.play(priority, type, path, vol, cbFnc, dup, dupInterval)\ `¶ <#audioplaypriority-type-path-vol-cbfnc-dup-dupinterval>`__ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 播放音频 - 参数 +---------+------------------------------------------------------------+ | 传入 | 释义 | | 值类型 | | +=========+============================================================+ | number | priority,音频优先级,数值越大,优先级越高 | +---------+------------------------------------------------------------+ | string | type,音频类型,目前仅支持“FILE”、“TTS”、“TTSCC”,“RECORD” | +---------+------------------------------------------------------------+ | string | path,音频文件路径,跟typ有关 | | | typ为“FILE”时:表示音频文件路径 | | | typ为“TTS”时:表示要播放的UTF8编码格式的数据 | | | typ为“TTSCC”时:表示要播放给通话对端的UTF8编码格式的数据 | | | typ为“RECORD”时:表示要播放的录音id | +---------+------------------------------------------------------------+ | number | **可选参数 | | | ,默认为\ ``4``**\ ,vol,播放音量,取值范围0到7,0为静音 | +---------+------------------------------------------------------------+ | f | **可选参数,默认为\ ``nil``**\ , | | unction | cbFnc,音频播放结束时的回调函数,回调函数的调用形式如下: | | | cbFnc(result) result表示播放结果: 0-播放成功结束; | | | 1-播放出错 2-播放优先级不够,没有播放 | | | 3-传入的参数出错,没有播放 4-被新的播放请求中止 | | | 5-调用audio.stop接口主动停止 | +---------+------------------------------------------------------------+ | bool | **可选参数,默认为\ `` | | | nil``**\ ,dup,是否循环播放,true循环,false或者nil不循环 | +---------+------------------------------------------------------------+ | number | **可选参数,默认为\ ``0``**\ ,dupI | | | nterval,循环播放间隔(单位毫秒),dup为true时,此值才有意义 | +---------+------------------------------------------------------------+ - 返回值 result,bool或者nil类型,同步调用成功返回true,否则返回false - 例子 :: audio.play(0,"FILE","/ldata/call.mp3") audio.play(0,"FILE","/ldata/call.mp3",7) audio.play(0,"FILE","/ldata/call.mp3",7,cbFnc) -- 更多用法参考demo/audio/testAudio.lua -------------- audio.stop(cbFnc)\ `¶ <#audiostopcbfnc>`__ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 停止音频播放 - 参数 +---------+------------------------------------------------------------+ | 传入 | 释义 | | 值类型 | | +=========+============================================================+ | f | **可选参数,默认为\ ``nil``**\ ,cbFnc,停止音频播放的回 | | unction | 调函数(停止结果通过此函数通知用户),回调函数的调用形式为: | | | cbFnc(result) result:number类型 0表示停止成功 | | | 1表示之前已经发送了停止动作,请耐心等待停止结果的回调 | +---------+------------------------------------------------------------+ - 返回值 nil - 例子 :: audio.stop() -------------- audio.setVolume(vol)\ `¶ <#audiosetvolumevol>`__ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 设置喇叭音量等级 - 参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| number \| vol,音量值为0-7,0为静音 \| - 返回值 bool result,设置成功返回true,失败返回false - 例子 :: audio.setVolume(7) -------------- audio.setMicVolume(vol)\ `¶ <#audiosetmicvolumevol>`__ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 设置麦克音量等级 - 参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| number \| vol,音量值为0-15,0为静音 \| - 返回值 bool result,设置成功返回true,失败返回false - 例子 :: audio.setMicVolume(14) -------------- audio.getVolume()\ `¶ <#audiogetvolume>`__ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 获取喇叭音量等级 - 参数 无 - 返回值 number vol,喇叭音量等级 - 例子 :: audio.getVolume() -------------- audio.getMicVolume(vol)\ `¶ <#audiogetmicvolumevol>`__ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 获取麦克音量等级 - 参数 无 - 返回值 number vol,麦克音量等级 - 例子 :: audio.getMicVolume() -------------- audio.setStrategy(strategy)\ `¶ <#audiosetstrategystrategy>`__ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 设置优先级相同时的播放策略 - 参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| number \| strategy,优先级相同时的播放策略;0:表示继续播放正在播放的音频,忽略请求播放的新音频;1:表示停止正在播放的音频,播放请求播放的新音频 \| - 返回值 nil - 例子 :: audio.setStrategy(0) audio.setStrategy(1) -------------- audio.setTTSSpeed(speed)\ `¶ <#audiosetttsspeedspeed>`__ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 设置TTS朗读速度 - 参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| number \| speed,速度范围为0-100,默认50 \| - 返回值 bool result,设置成功返回true,失败返回false - 例子 :: audio.setTTSSpeed(70) 测试demo见 esource\8910_script:raw-latex:`\script`\_LuaTask_V2.3.3:raw-latex:`\demo`:raw-latex:`\audio` 常见问题 -------- 1、TTS功能问题 ~~~~~~~~~~~~~~ 不支持英文单词朗读,仅支持单字母朗读,例如bye,不会读成“白”,会读成“比、外、一” 数字朗读时,根据特殊标记,可作为数值连续,也可以作为号码连读。默认是自动识别; 例如“10086”,默认状态下,根据语义,可能读成“幺零零八六”,也可能读成“一万零八十六”。 如果主动配置为号码来读,加[n1]标记,变成“[n1]10086”,会读成“幺零零八六” 如果主动配置为数值来读,加[n2]标记,变成“[n2]10086”,会读成“一万零八十六” 更多文本标记参考:\ `Aisound5.pdf `__ 2、如何实现“通过http边下载mp3文件,边播放”功能 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ core使用:http://openluat-erp.oss-cn-hangzhou.aliyuncs.com/erp_site_file/product_file/sw_file_20201212133703_Luat_V3024_RDA8910_TTS_NOVOLTE_FLOAT.zip 注意:此core为临时版本,仅用于开发调试;后续正式发布的大于等于V3024版本的固件都可以支持 script demo参考:\ `httpPlayMp3.rar `__