目录

  • 简介
  • 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

可选参数,默认为4,vol,播放音量,取值范围0到7,0为静音

function

可选参数,默认为nil,cbFnc,音频播放结束时的回调函数,回调函数的调用形式如下:

cbFnc(result)

result表示播放结果:

0-播放成功结束;

1-播放出错

2-播放优先级不够,没有播放

3-传入的参数出错,没有播放

4-被新的播放请求中止

5-调用audio.stop接口主动停止

bool

可选参数,默认为nil,dup,是否循环播放,true循环,false或者nil不循环

number

可选参数,默认为0,dupInterval,循环播放间隔(单位毫秒),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)

停止音频播放

  • 参数

传入值类型

释义

function

可选参数,默认为nil,cbFnc,停止音频播放的回调函数(停止结果通过此函数通知用户),回调函数的调用形式为:

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

可选参数,默认为2,output,输出通道,0:earphone听筒 1:headphone耳机 2:speaker喇叭

number

可选参数,默认为0,input,输入通道,0:主mic 3:耳机mic

  • 返回值

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讲解

常见问题

  1. 播放提示priority error”,原因是优先级高的音频还没有播放完。分析方法:在audio.lua开源库里看日志打印的地方。解决办法:可根据应用需要提高优先级。
  2. TTS功能问题 不支持英文单词朗读,仅支持单字母朗读,例如bye,不会读成“白”,会读成“比、外、一”

数字朗读时,根据特殊标记,可作为数值连续,也可以作为号码连读。默认是自动识别; 例如"10086",默认状态下,根据语义,可能读成“幺零零八六”,也可能读成“一万零八十六”。 如果主动配置为号码来读,加[n1]标记,变成"[n1]10086",会读成“幺零零八六” 如果主动配置为数值来读,加[n2]标记,变成"[n2]10086",会读成“一万零八十六”