模拟语音

作者:许文婷

概述

Air724UG 内置3种音频输出模式,分别为扬声器(SPK)输出,耳机(HP)输出和听筒(RECEIVER)输出,详细模拟音频管脚定义如下:

管脚定义

管脚名

管脚号

I/O

管脚描述

电气特性

备注

SPK-

18

O

Speaker差 分信号输出 ,可以直接 驱动8欧姆Sp eaker,最大 输出功率1W

SPK+

19

O

EAR_P

101

O

听筒输出

EAR_N

102

O

HP_R

103

O

耳机输出

HP_L

112

O

MIC-

21

I

麦克 输入,已内 置偏置电路

MIC+

22

I

HEADMIC_N

104

I

麦克输入 ,需要加外 部偏置电路

HEADMIC_P

113

I

H EADMIC_BIAS

114

O

给HEADMIC 提 供偏置电压

HEA DMIC_IN_DET

105

I

耳 机按键检测

HP_DET

106

I

耳 机插入检测

参考设计

耳机参考电路

耳机参考电路一: undefined 上图是目前Air724UG 的开发板上采用的耳机接口电路: HEADMIC_BIAS 给耳机麦克提供偏置电压; HEADMIC_IN_DET 用来检测耳机按键,HEADMIC_IN_DET 内部是一个ADC,故 HEADMIC_IN_DET 还可以支持多功能按键; HP_DET 用来检测耳机插入,当耳机插入时为低,当耳机拔出时为高;

这个耳机电路存在一个弊端,由于耳机拔出后需要给22uF电容充电后HP_DET 才能为高,导致耳机拔出检测会延迟6-10秒左右的时间,故推荐将耳机电路修改成下面的参考电路二

耳机参考电路二: image1 更换了耳机插座的型号,换成检测管脚是常开类型的耳机插座; 未插入耳机时,耳机插座的 Pin3 Pin4 之间处于断开状态,HP_DET 由内部拉高,为高电平; 插入耳机后,耳机插座的 Pin3 Pin4 之间导通,并连接到左声道的耳机喇叭,左声道的耳机喇叭等效于32欧姆的接地电阻,故 HP_DET 被拉低变成低电平; 拔出耳机后,耳机插座的 Pin3 Pin4 之间断开,因为不需要给22uF 的电容充电,HP_DET 马上变成了高电平,不会出现耳机拔出检测过慢的问题。

耳机种类

耳机根据第3段和第4段的接线定义不同可以分为 国标OMTP 和 美标CTIA 两种,在设计耳机插座的电路后需要选择相应的耳机。 Air724UG 的开发板是按照国标OMTP设计的,故只能使用 OMTP标准的耳机。 image2

耳机接口类型推荐

image3 注意: 1.NO: Normally-open type(常开型) 2.Headmic_in用于检测耳机类型,也可在耳机插入时使用。 HP_DET level logic:

Headset

Plug out

Plug in

HP_DET

1

0

SPK 参考电路

http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/images/20200811114900920_spk1.png

注意: 1. 磁珠和电容必须同时使用,如果没有EMI问题可以删除 2. 47pf可以换成TVS/MLV,用于解决ESD问题。 3. SPK通路默认是classD的输出,如果外接音频功会有噪音。

Receiver参考电路

image4 注意: 1.R3111和R3112可以换成磁珠用于抑制RF干扰 2. C3126是用于射频噪声滤波和差模噪声抑制 3. C3127、C3128用于抑制射频干扰。需要通过一个单独的过孔直接连接到主GND。

外接PA参考设计

Air724UG内置3种音频输出模式可通过AT指令进行切换。扬声器(SPK)输出,耳机(HP)输出和听筒(RECEIVER)输出,都可以作为外部PA的功放输入端,用户可以根据使用的外接PA的规格进行设计。建议外接差分输入功放优先使用(RECEIVER)通道,如果是单端方式建议使用耳机右声道(HP_R) 以艾为的AW8733A为例,参考设计如下: image5

该芯片中INN,INP分别为功放的负输入端和功放的正输入端。与模块参考连接方式如下: image6

推荐使用差分输入方式,使用SPK通道作为驱动时,外部PA的INN连接模块SPK-,INP连接SPK+; 使用听筒(RECEIVER)通道作为驱动时,外部PA的INN连接模块的EAR_N,INP连接EAR_P。建议外接功放优先使用(RECEIVER)通道 注意: 1.耳机通道只可作为单端输入使用,推荐使用耳机右声道(HP_R)。 2. 如果用SPK通道外接功放需要切换成classAB的输出方式:audiocore.setpa(audiocore.CLASS_AB)

AT版本相关控制指令

##TTS(Text To Speech)功能:AT+CTTS 语法规则

命令类型

语法

返回

设置命令

AT+CTTS=[,]

OK

查询指令

AT+CTTS?

+CTTS:

OK

测试命令

AT+CTTSPARAM=?

OK

URC

当 TTS 播放完毕,会有以下 URC 上报:+CTTS:0

参数定义

参数

定义

取值

对取值的说明

TTS工作模式

0

停止播放TTS

1

播放TTS,使用UCS2编码

2

播放TTS,使用GBK编码(中文)和ASCII编码(数字)

TTS文本

中文和数字

TTS工作状态

0

TTS非播放状态

1

TTS播放状态

举例

命令(→)/返回(←)

实例

解释和说明

AT+CTTS= 2,“123,欢迎你的到来”

播放数字和中文。注: 1.目前暂时无法播放英 文,中的英文发音不是 单词,而是一个一个分 离的字母。2.AT版本124 9之后支持通话中向对端 播放TTS,只需要在通话 过程中调用AT+CTTS即可

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。 需要加后缀

** 举例:**

命令(→)/ 返回(←)

实例

解释和说明

A T+FSCREATE=“111.mp3”

创建音频文件

OK

AT+FSWRITE =“111.mp3”,0,6314,20

输入音频文件。 这 里长度6314只是举例, 请以实际为准

>

收到该指令后发送数据

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 ofs)

OK

** 参数定义: **

参数

定义

取值

对取值的说明

音频输出通道

0

通道 0, 听筒(receiver)

1

通道 1, 耳机(headphone)

2

通道 2, 喇叭(speaker)

音频输入通道

0

main mic

1

auxilary mic

2

headphone mic left

3

headphone mic right

RECEIVER 音量控制: AT+CLVL

** 语法规则:**

命令类型

语法

返回

设置命令

AT+CLVL=

OK

查询命令

AT+CLVL?

+CLVL:

OK

测试命令

AT+CLVL=?

+CLVL: (取值范围)

OK

参数定义:

参数

定义

取值

对取值的定义

音量等级

0~100

0 声音最小, 100 声音最大。 缺省值为 60

SPK 音量控制: AT+CRSL

** 语法规则:**

命令类型

语法

返回

设置命令

AT+CRSL=

OK

查询命令

AT+CRSL?

+CRSL:

OK

测试命令

AT+CRSL=?

+CRSL: (取值范围)

OK

参数定义:

参数

定义

取值

对取值的定义

音量等级

0~100

0 声音最小, 100 声音最大。 缺省值为 60

SPK 通道输出模式控制:AT+SPKPA=

注意:版本号要大于等于 1251,才支持此命令,需要重启生效

参数

定义

取值

对取值的说明

音频功放类型

0

CLASSAB

1

CLASSD

2

CLASSK

举例:

AT+SPKPA=0
​
OK
​
AT+SPKPA?
​
+SPKSPA: 0
​
OK

LUAT开发相关接口

相关的audio控制接口可以参考LUAT_API AUDIO章节 相关示例,请参考:raw-latex:script_LuaTask_VX.X.X:raw-latex:demo:raw-latex:`\audio`

###audio.play 播放音频

  • 语法 audio.play(priority,type,path,vol,cbFnc,dup,dupInterval)

  • 参数

参数

释义

priority

音频优先级,数值越大,优先级越高

type

音频类型,目前仅支 持“FILE”、“TTS”、“TTSCC”,“RECORD”

path

音 频文件路径,跟typ有关,typ为“FIL E”时:表示音频文件路径,typ为“TTS ”时:表示要播放的UTF8编码格式的数 据,typ为“TTSCC”时:表示要播放给 通话对端的UTF8编码格式的数据,ty p为“RECORD”时:表示要播放的录音id

vol

播放音量,取值范围0到7,0为静音

cbFnc

音频播 放结束时的回调函数,cbFnc(result)

dup

是否循环播 放,true循环,false或者nil不循环

dupInterval

循环播放间隔(单位 毫秒),dup为true时,此值才有意义

  • 返回 无

停止音频播放

  • 语法 audio.stop(cbFnc)

  • 参数

参数

释义

cbFnc

停止音频播放的回调函数(停止 结果通过此函数通知用户),回调函数的调用形式为cbFnc(result)

  • 返回 无

###audio.setVolume 设置喇叭音量等级

  • 语法 audio.setVolume(vol)

  • 参数

参数

释义

vol

音量值为0-7,0为静音

  • 返回 设置成功返回true,失败返回false

###audio.setCallVolume 设置通话音量等级

  • 语法 audio.setCallVolume(vol)

  • 参数

参数

释义

vol

音量值为0-7,0为静音

  • 返回 设置成功返回true,失败返回false

###audio.setMicVolume 设置麦克音量等级

  • 语法 audio.setMicVolume(vol)

  • 参数

参数

释义

vol

音量值为0-15,0为静音

  • 返回 设置成功返回true,失败返回false

###audio.getVolume 获取喇叭音量等级 - 语法 audio.getVolume()

  • 返回 喇叭音量等级

###audio.getCallVolume 获取通话音量等级 - 语法 audio.getCallVolume()

  • 返回 通话音量等级

获取麦克音量等级

  • 语法 audio.getMicVolume(vol)

  • 返回 麦克音量等级

###audio.setStrategy 设置优先级相同时的播放策略

  • 语法 audio.setStrategy(strategy)

  • 参数

参数

释义

strategy

优先级相同时的 播放策略;0:表示继续播放正在播放的音频,忽略请求播放的 新音频;1:表示停止正在播放的音频,播放请求播放的新音频

  • 返回 nil

###audio.setTTSSpeed 设置TTS朗读速度 - 语法 audio.setTTSSpeed(speed)

  • 参数

参数

释义

speed

速度范围为0-100,默认50

  • 返回 设置成功返回true,失败返回false

###audio.setChannel 设置音频输出通道 - 语法 setChannel(channel)

  • 参数

参数

释义

channel

1:headphone耳机 2:speaker喇叭

  • 返回 nil

###audiocore.streamplay 向流播放管道中填充数据,具体用法参考demo_audio中的testAudioStream.lua

  • 语法

audiocore.streamplay(StreamType,data)

  • 参数

参数

释义

StreamType

audiocore.PCM

audiocore.PCM

audiocore.AMR

audiocore.SPX

audiocore.MP3 注:0021及之后版本才支持

data

音频数据

  • 返回 设置成功返回true,失败返回false

注:流播放结束后需要调用audiocore.stop手动停止播放

###audiocore.streamremain 查看流播放管道内剩余数据大小

  • 语法 audiocore.streamremain()

  • 参数 无

  • 返回 返回管道内剩余数据大小

CSDK开发相关接口

具体接口定义参考CSDK中iot_audio.h ###iot_auido_open_tch 在通话中打开语音

  • 语法

BOOL iot_auido_open_tch(                                                                    VOID                 ); -参数 无

  • 返回 TRUE: 成功, FALSE: 失败

###iot_audio_close_tch 通话结束时调用,关闭语音

  • 语法

BOOL iot_audio_close_tch(                                                                   VOID                  ) {     return IVTBL(close_tch)(); }

  • 参数 无

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_play_tone 播放TONE音

  • 语法

BOOL iot_audio_play_tone(
                        E_AMOPENAT_TONE_TYPE toneType,
                        UINT16 duration,
                        E_AMOPENAT_SPEAKER_GAIN volume
                 );
  • 参数

参数

释义

toneType

TONE音类型

duration

播放时长

volume

播放音量

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_stop_tone 停止播放TONE音

  • 语法

BOOL iot_audio_stop_tone(
                        VOID
                 );
  • 参数 无

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_play_dtmf

  • 语法

BOOL iot_audio_play_dtmf(
                        E_AMOPENAT_DTMF_TYPE dtmfType,
                        UINT16 duration,
                        E_AMOPENAT_SPEAKER_GAIN volume
                 );
  • 参数

参数

释义

dtmfType

DTMF类型

duration

播放时长

volume

播放音量

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_stop_dtmf 停止播放DTMF音 - 语法

BOOL iot_audio_stop_dtmf(
                        VOID
                 );
  • 参数 无

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_play_music 播放音频

  • 语法

BOOL iot_audio_play_music(T_AMOPENAT_PLAY_PARAM*  playParam);
  • 参数

参数

释义

playParam

播放参数

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_stop_music 停止音频播放

  • 语法

BOOL iot_audio_stop_music(
                        VOID
                  );
  • 参数 无

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_pause_music 暂停音频播放

  • 语法

BOOL iot_audio_pause_music(
                        VOID
                   );
  • 参数 无

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_resume_music 恢复音频播放 - 语法

BOOL iot_audio_resume_music(
                        VOID
                    );
  • 参数 无

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_mute_speaker 设置扬声器静音

  • 语法

BOOL iot_audio_mute_speaker(
                        VOID
                    );
  • 参数 无

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_unmute_speaker 解除扬声器静音

  • 语法

BOOL iot_audio_unmute_speaker(
                        VOID
                      );
  • 参数 无

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_set_speaker_vol 设置扬声器的音量值 - 语法

BOOL iot_audio_set_speaker_vol(
                        UINT32 vol
                        );
  • 参数

参数

释义

vol

设置扬声器音量值

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_get_speaker_vol 获取扬声器的音量值

  • 语法

BOOL iot_audio_get_speaker_vol(
                        VOID
                    );
  • 参数 无

  • 返回 返回扬声器的音量值

###iot_audio_set_sph_vol 设置通话音量值 - 语法

BOOL iot_audio_set_sph_vol(
                        UINT32 vol
                        );
  • 参数

参数

释义

vol

设置通话音量值

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_get_sph_vol 获取通话的音量值

  • 语法

BOOL iot_audio_get_sph_vol(
                        VOID
                    );
  • 参数 无

  • 返回 返回通话的音量值

###iot_audio_set_channel 设置音频通道 - 语法

BOOL iot_audio_set_channel(
                        E_AMOPENAT_AUDIO_CHANNEL channel
                   );
  • 参数

参数

释义

channel

音频通道

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_get_current_channel 获取当前通道 - 语法

E_AMOPENAT_AUDIO_CHANNEL iot_audio_get_current_channel(
                        VOID
                                               );
  • 参数 无

  • 返回 返回当前通道

###iot_audio_rec_start 开始录音 - 语法

BOOL iot_audio_rec_start(
                                E_AMOPENAT_RECORD_PARAM* param,
                                AUD_RECORD_CALLBACK_T cb);
  • 参数

参数

释义

param

录音参数

cb

获取录音数据回调

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_rec_stop 停止录音 - 语法

BOOL iot_audio_rec_stop();
  • 参数 无

  • 返回 成功返回TRUE,失败返回FALSE

###iot_audio_streamplay 流播放 - 语法

int iot_audio_streamplay(E_AMOPENAT_AUD_FORMAT playformat,AUD_PLAY_CALLBACK_T cb,char* data,int len);
  • 参数

参数

释义

playformat

数据流类型

cb

数据流回调函数

data

数据流

len

数据流长度

  • 返回 0: 播放长度 -1: 播放失败


相关资料以及购买链接

相关开发板购买链接 Air724UG开发板 Air724 开发板使用说明 相关软件资料下载

常见问题

https://doc.luatos.wiki/638/ * Q: spk的输出类型是什么? A:spk为差分输出,内部经过一个classD类功放 * Q: spk通道外接功放有噪音? A:spk通道默认是classD的输出, 如果用SPK通道外接功放需要切换成classAB的输出方式:lua(V22版本以及以以后的版本):audiocore.setpa(audiocore.CLASS_AB) AT: AT+SPKPA=0 需要重启生效 * Q: spk通道切换成classAB了但是单独方式接功放底噪偏大? A: SPK内部经过一级PA放大,外部再接功放时底噪会偏大。建议采用差分接法,如果只能采用单端接法,建议使用耳机右声道(HP_R)