麦克风阵列Android SDK
功能简介
麦克风阵列SDK主要用来从前端麦克风阵列采集声音数据,用麦克风阵列的空域滤波特性,通过对唤醒人的角度定位或应用指定,形成定向拾音波束,并对波束以外的噪声进行抑制,输出高质量的音频。本文主要描述阵列算法相关接口及调用流程,用于指导开发人员快速进行阵列算法集成。
#名词解释
表 1-1 名词解释
名词 | 说明 |
---|---|
语音唤醒 | 将待唤醒的机器(低功耗状态)或应用,用带唤醒词的语音进行唤醒。 |
波束 | 麦克风阵列在录音时会形成拾音波束,对波束以外的噪声进行抑制,即对特定空间范围内的声音进行拾音。关于拾音波束以及和麦克之间关系的详细介绍参考 《麦克风设计参考》 。 |
CAE | CAE:Circular Array Enhancement |
#授权说明
麦克风阵列SDK基于科大讯飞MorfeiCore AIOT架构构建,目前只支持云端授权方式。
云端授权方式:使用云端授权方式,设备需要具备联网能力。在启动麦克风阵列服务前设备需要联网,否则SDK无法通过网络获取授权,SDK能力将无法使用。在购买SDK开发包后,科大讯飞为每台设备分配productid (每个产品唯一)和deviceid(每台设备唯一),开发者在启动麦克风阵列服务时通过相应接口将productid和deviceid传入SDK。
#准备工作
#导入SDK
(1)将SDK里libs目录下的所有文件复制到目标工程相对应的目录中。若目录不存在,请用户自行创建。
(2)资源文件(.irf后缀)和音频文件(.pcm后缀)放置在SD卡cae文件夹(默认)。
#配置安卓权限
图2-1 安卓权限说明
#麦克风阵列SDK接口说明
#接口调用流程
麦克风阵列接口基本功能使用,调用流程包括以下几个步骤(图3-1):
(1) 开启MorfeiCore服务
(2) 创建CAE引擎对象
(3) 设置引擎参数
(4) 设置状态监听
(5) 写入音频,回调抛出识别结果
(6) 重置CAE引擎
(7) 销毁CAE引擎对象
(8) 停止MorfeiCore 服务
图3-1 麦克风阵列引擎工作流程
#接口函数列表
表3-1 接口函数列表
函数名称 | 功能简介 |
---|---|
morfeiCoreStart | 开启MorfeiCore 服务 |
morfeiCoreStop | 停止MorfeiCore 服务 |
createInstance | 创建CAE引擎对象 |
destoryInstance | 销毁CAE引擎对象 |
setParam | 设置引擎参数 |
setListener | 设置状态监听 |
writeAudio | 写入音频 |
reset | 重置CAE引擎 |
#返回值说明
对于开发接口,如果调用成功,返回值为int型的接口都会返回0,否则返回错误代码,错误代码参见aiot_errors.h。
#函数调用
#morfeiCoreStart
函数原型
public int morfeiCoreStart(String param);
功能说明
开启MorfeiCore服务,若同时使用基于MorfeiCore服务的其他SDK,则此函数只需调用一次。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
参数名 | 参数解释 |
---|---|
params | 用户数据 |
#morfeiCoreStop
函数原型
public int morfeiCoreStop();
功能说明
停止MorfeiCore服务。
返回值
如果函数调用成功返回0,失败返回错误码。
参数说明
无。
#createInstance
函数原型
public static CAEEngine createInstance(String resPath);
功能说明
创建CAE引擎对象。
返回值
如果函数调用成功返回引擎对象,否则通过状态监听接口回调返回错误码。
参数说明
参数名 | 参数解释 |
---|---|
resPath | 资源路径 |
#destoryInstance
函数原型
public void destoryInstance();
功能说明
销毁CAE引擎对象。
返回值
如果函数调用失败,则通过状态监听接口回调返回错误码。
参数说明
无。
#setParam
函数原型
public void setParam(String key, byte[] val, int length);
功能说明
设置引擎参数。
返回值
如果函数调用失败,则通过状态监听接口回调返回错误码。
参数说明
参数名 | 参数解释 |
---|---|
key | 参数名 1.“reg_beam”:设置波束; 2.“channel_num”:设置mic和ref序号。 |
val | 参数值 1.指定一个波束传入,具体2麦可传入[0,1,2],6麦传入[0,1,2,3,4,5]; 2.以6麦为例,其值可为“625184730”,前6个字符是mic序号,后三个730是参考序号,且只有通道7和3有效,第三路参考做保留使用。 |
length | 参数长度 |
#setListener
函数原型
CAEListener mCAEListener = new CAEListener() {
@Override
public void onWakeup(String jsonResult) {} //唤醒结果回调
@Override
public void onError(CAEError error) {} //出错回调
@Override
public void onAudio(byte[] audioData, int dataLen, int param1, int param2) {} //音频回调
};
pubic void setListener(CAEListener listener);
功能说明
设置状态监听。
参数说明
参数名 | 参数解释 |
---|---|
jsonResult | 唤醒结果 |
error | 错误类 |
回调结果参数说明
参数名 | 参数解释 |
---|---|
angle | 声源角度 |
beam | 唤醒波束 |
keyword | 唤醒词 |
power | 唤醒能量值 |
score | 唤醒得分 |
audiodata | 音频缓存首地址(16K、16bit的单声道PCM音频数据) |
dataLen | 音频长度 |
#writeAudio
函数原型
public void writeAudio(byte[] audioData, int dataLen);
功能说明
写入多路音频数据。多路音频数据具体要求请参考 《科大讯飞麦克风阵列SDK录音数据要求》 文档说明。
返回值
如果函数调用失败,则通过状态监听接口回调返回错误码。
参数说明
参数名 | 参数解释 |
---|---|
audioData | 音频数据 |
dataLen | 传入音频长度,单位为字节 |
#reset
函数原型
public void reset();
功能说明
重置CAE引擎。
返回值
如果函数调用失败,则通过状态监听接口回调返回错误码。
参数说明
无。