麦克风阵列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引擎。

返回值

如果函数调用失败,则通过状态监听接口回调返回错误码。

参数说明

无。