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

返回值

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

参数说明

无。

在线
咨询
建议
反馈
体验
中心