目录
- 简介
- API说明
- audio.play(priority, type, path, vol, cbFnc, dup, dupInterval)
- audio.stop(cbFnc)
- audio.setVolume(vol)
- audio.setCallVolume(vol)
- audio.setMicVolume(vol)
- audio.getVolume()
- audio.getCallVolume()
- audio.getMicVolume()
- audio.setStrategy(strategy)
- audio.setTTSSpeed(speed)
- audio.setChannel(output, input)
- audio.setMicGain(mode,level)
- AT模式
- TTS(Text To Speech)功能:AT+CTTS
- 设置 TTS 播放模式:AT+CTTSPARAM
- 语音文件播放:AT+CAUDPLAY
- 语音通道切换:AT+AUDCH
- RECEIVER 音量控制:AT+CLVL
- 实现流程
- 示例
- 常见问题
- 相关开发板购买链接
简介
模块支持播放音频文件和TTS(文字转语音)功能,AT版本和LUAT版本均支持音频播放,AT版本和带TTS的LUAT版本支持TTS功能。音频文件目前支持mp3和amr.
API说明
模块功能:音频播放.
支持MP3、amr文件播放;
audio.play(priority, 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 | 可选参数,默认为 |
function | 可选参数,默认为 cbFnc(result) result表示播放结果: 0-播放成功结束; 1-播放出错 2-播放优先级不够,没有播放 3-传入的参数出错,没有播放 4-被新的播放请求中止 5-调用audio.stop接口主动停止 |
bool | 可选参数,默认为 |
number | 可选参数,默认为 |
- 返回值
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)
停止音频播放
- 参数
传入值类型 | 释义 |
function | 可选参数,默认为 cbFnc(result) result:number类型 0表示停止成功 |
- 返回值
nil
- 例子
audio.stop()
audio.setVolume(vol)
设置喇叭音量等级
- 参数
传入值类型 | 释义 |
number | vol,音量值为0-7,0为静音 |
- 返回值
bool result,设置成功返回true,失败返回false
- 例子
audio.setVolume(7)
audio.setCallVolume(vol)
设置通话音量等级
- 参数
传入值类型 | 释义 |
number | vol,音量值为0-7,0为静音 |
- 返回值
bool result,设置成功返回true,失败返回false
- 例子
audio.setCallVolume(7)
audio.setMicVolume(vol)
设置麦克音量等级
- 参数
传入值类型 | 释义 |
number | vol,音量值为0-15,0为静音 |
- 返回值
bool result,设置成功返回true,失败返回false
- 例子
audio.setMicVolume(14)
audio.getVolume()
获取喇叭音量等级
- 参数
无
- 返回值
number vol,喇叭音量等级
- 例子
audio.getVolume()
audio.getCallVolume()
获取通话音量等级
- 参数
无
- 返回值
number vol,通话音量等级
- 例子
audio.getCallVolume()
audio.getMicVolume()
获取麦克音量等级
- 参数
无
- 返回值
number vol,麦克音量等级
- 例子
audio.getMicVolume()
audio.setStrategy(strategy)
设置优先级相同时的播放策略
- 参数
传入值类型 | 释义 |
number | strategy,优先级相同时的播放策略;0:表示继续播放正在播放的音频,忽略请求播放的新音频;1:表示停止正在播放的音频,播放请求播放的新音频 |
- 返回值
nil
- 例子
audio.setStrategy(0)
audio.setStrategy(1)
audio.setTTSSpeed(speed)
设置TTS朗读速度
- 参数
传入值类型 | 释义 |
number | speed,速度范围为0-100,默认50 |
- 返回值
bool result,设置成功返回true,失败返回false
- 例子
audio.setTTSSpeed(70)
audio.setChannel(output, input)
设置音频输出、输入通道
设置后实时生效
- 参数
传入值类型 | 释义 |
number | 可选参数,默认为 |
number | 可选参数,默认为 |
- 返回值
nil
- 例子
-- 设置为听筒输出、主mic输入:
audio.setChannel(0)
-- 设置为耳机输出、主mic输入:
audio.setChannel(1)
-- 设置为喇叭输出、主mic输入:
audio.setChannel(2)
-- 设置为喇叭输出、耳机mic输入:
audio.setChannel(2,3)
audio.setMicGain(mode,level)
设置mic增益等级
- 参数
传入值类型 | 释义 |
string | mode表示增益类型:"call"表示通话中mic增益; "record"表示录音mic增益 |
number | level表示增益等级,取值为0-7 |
- 返回值
设置成功返回true,失败返回false
- 例子
audio.setMicGain("record",7),设置录音时mic增益为7级
- 备注:通话时mic增益在通话建立成功之后设置才有效;录音mic增益设置后实时生效
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-100 | 缺省值为50 | |
TTS播放模式, range:0-3 | 0 | auto read digit, and read digit based on 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-100 | 缺省值为50 | |
TTS播放速度 | 1-100 | 缺省值为50 | |
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。需要加后缀 |
举例:
命令(→) /返回(←) | 实例 | 解释和说明 |
→ | AT+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=<out_channel>,<in_channel> | OK |
查询命令 | AT+AUDCH? | +AUDCH: <out_channel>,<in_channel> OK |
测试命令 | AT+AUDCH=? | +AUDCH: (range of <out_channel>s,list of <in_channel>s) OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
<out_channel> | 音频输出通道 | 0 | 通道 0,听筒(receiver) |
1 | 通道 1,耳机(headphone) | ||
2 | 通道 2,喇叭(speaker) | ||
<in_channel> | 音频输入通道 | 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 |
实现流程
调用相应接口。 代码逻辑:先判断是否是带TTS功能的底包(string.match(rtos.get_version(),“TTS”)),然后设置5秒后调用testPlayTts(sys.timerStart(testPlayTts,5000)),最后在testPlayTts里循环播放,音量等级7,循环间隔为2000毫秒(audio.play(TTS,“TTS”,ttsStr,7,nil,true,2000)).
示例
demo讲解
常见问题
- 播放提示priority error”,原因是优先级高的音频还没有播放完。分析方法:在audio.lua开源库里看日志打印的地方。解决办法:可根据应用需要提高优先级。
- TTS功能问题 不支持英文单词朗读,仅支持单字母朗读,例如bye,不会读成“白”,会读成“比、外、一”
数字朗读时,根据特殊标记,可作为数值连续,也可以作为号码连读。默认是自动识别; 例如"10086",默认状态下,根据语义,可能读成“幺零零八六”,也可能读成“一万零八十六”。 如果主动配置为号码来读,加[n1]标记,变成"[n1]10086",会读成“幺零零八六” 如果主动配置为数值来读,加[n2]标记,变成"[n2]10086",会读成“一万零八十六”