用户对设备(手机、玩具、家电等)说出操作指令(即“命令词”),设备即作出相应的反馈,开启语音交互,支持的语种有中文、英文。
支持多实例并发:否
协议类型:同步流式
DEMO中已经集成了SDK,您可以参考DEMO,集成SDK。集成前,请先测通DEMO,了解调用原理。如果您自己代码过于复杂,可以使用一个helloworld项目了解集成过程。
将SDKzip包解压缩,得到如下文件:
复制AIKit.aar到项目的libs目录下,然后在项目的build.gradle文件中,增加如下配置:
SDK中已配置如下权限,如部分权限不需要,可通过如下配置去除
在使用能力前,需要首先初始化SDK,使用SDK提供的单能力或组合能力时,SDK均只需要初始化一次。
//初始化参数构建AiHelper.Paramsparams=AiHelper.Params.builder().appId(appID).apiKey(apiKey).apiSecret(apiSecret).ability("e75f07b62").workDir("/sdcard/iflytek/aikit")//SDK工作路径,这里为绝对路径,此处仅为示例.build();//初始化AiHelper.getInst().init(this,params);如上代码所示,SDK初始化参数中appId、apiKey、apiSecret和workDir为必填项。
以下是这些初始化参数:
SDK初始化状态及能力结果可通过registerListener注册监听,在回调方法中获取,SDK的状态和结果回调只支持一个监听器,多次设置会覆盖。可为每个能力指定一个结果回调监听。注册方法及回调接口说明如下:
onAuthStateChange:
能力结果及计算进度状态回调示例代码如下:
/***能力监听回调*/privateAiListeneraiRespListener=newAiListener(){@OverridepublicvoidonResult(inthandleID,List
onEvent:事件回调
onError:错误通知,能力执行终止
能力输出结果AiResponse说明:
个性化数据一般为用户自定义配置文件,用户根据业务需求配置个性化数据,SDK加载个性化数据示例代码如下:
intret=0;AiRequest.BuildercustomBuilder=AiRequest.builder();/***key数据标识*value数据内容*index数据索引,用户可自定义设置*/customBuilder.customText("FSA","/sdcard/iflytek/CNENESR/cn_fsa/Album.txt",0);ret=AiHelper.getInst().loadData("e75f07b62",customBuilder.build());if(ret!=0){Log.e(TAG,"loadData失败:"+ret);}//指定要使用的个性化数据集合,未调用,则默认使用所有loadData加载的数据int[]indexs={0};/***indexs个性化数据索引数组*/AiHelper.getInst().specifyDataSet("e75f07b62","FSA",indexs);if(ret!=0){Log.e(TAG,"specifyDataSet失败:"+ret);}个性化数据参数说明
数据段名称:FSA数据类型:文本
loadData方法参数说明:设置个性化数据
specifyDataSet方法参数说明:指定要使用的个性化数据集合,未调用,则默认使用所有loadData加载的数据
preProcess方法参数说明:非必须方法,为避免个性化数据重复加载耗时,可调用该预处理方法,对原始个性化资源进行预处理,再次调用能力时,则引擎会自动加载预处理后的资源。
通过start方法开启会话,传入当前能力所需要指定的参数。示例代码如下:
AiRequest.BuilderparamBuilder=AiRequest.builder();paramBuilder.param("languageType",$paramValue);paramBuilder.param("vadOn",$paramValue);//paramBuilder.param("vadLinkOn",false);paramBuilder.param("vadEndGap",$paramValue);//paramBuilder.param("beamThreshold",20);//paramBuilder.param("hisGramThreshold",3000);//paramBuilder.param("vadSpeechEnd",80);//paramBuilder.param("vadResponsetime",1000);//paramBuilder.param("postprocOn",false);AiHandlehandle=AiHelper.getInst().start("e75f07b62",paramBuilder.build(),null);if(!handle.isSuccess()){Log.e(TAG,"ERROR::START|handlecode:"+handle.getCode());return;}功能参数
AiRequest.Builder
start方法参数说明
返回:AiHandle
AiHandle对象内部提供isSucess方法,用于判断会话是否启动成功
返回:0=成功,其他=错误
送入数据实现代码如下:
AiRequest.BuilderdataBuilder=AiRequest.builder();//输入音频数据AiAudio.HolderaudioData=AiAudio.get("audio")//输入数据key.encoding(AiAudio.ENCODING_DEFAULT)//设置音频类型.data(part);//part为byte[]类型输入数据audioData.status(AiStatus.BEGIN);//送入数据的状态,首帧数据、尾帧数据、中间数据,根据送入数据的状态传入对应的值,取值对应AiStatus.BEGIN、AiStatus.END、AiStatus.CONTINUEdataBuilder.payload(audioData.valid());intret=AiHelper.getInst().write(dataBuilder.build(),aiHandle);//ret值为0写入成功;非0失败,请参照文档中错误码部分排查if(ret!=0){Stringerror="startwritefailed"+ret;Log.e(TAG,error);}能力输入数据
数据段名称:audio数据类型:音频
以下是音频输入参数含义说明:
送入数据后,需要调用read方法获取到能力结果,read方法为阻塞式方法,当次送入数据处理完毕读取到结果后会返回结果状态码。如果有多次输入,读取到当次结果后,方可进行下一次数据输入。
read方法调用方法如下:
try{intret=AiHelper.getInst().read("e75f07b62",aiHandle);if(ret!=0){Stringerror="startwritefailed"+ret;Log.e(TAG,error);}}}catch(Exceptione){e.printStackTrace();}read方法参数说明:
结果将通过AIListener回调返回,AIListener接口实现可参考6.5.2节;能力结果数据格式及含义如下:
能力输出数据
数据段名称:data数据类型:文本
以下是文本输出参数含义说明:
输出结果示例:
intret=AiHelper.getInst().end(aiHandle);if(ret!=0){Stringerror="endfailed"+ret;Log.e(TAG,error);}参数说明:
返回:0=成功,其他=错误
当不再使用能力时,需调用逆初始化方法释放资源,示例代码如下:
AiHelper.getInst().setLogInfo(LogLvl.DEBUG,``1``,``"/sdcard/iflytek/aikit/aeeLog.txt"``);日志配置参数说明
可通过setConfig方法实现license缓存路径、日志文件上限等配置,使用举例如下:
AiHelper.getInst().setConfig(``"licenseStoragePath"``,``"/sdcard/iflytek/aikit"``);可配置参数
已加载的个性化数据,如果不在使用或者需要替换,需要卸载已加载的个性化资源,示例代码如下:
AiHelper.getInst().unLoadData(``"e75f07b62"``,``"FSA"``,indexs);可配置参数
个性化数据参数说明
数据段名称:FSA数据类型:命令词配置语法文件
对于模型资源比较小的能力,如果想将模型资源打包到APK或aar中,可在项目主module下asset目录下创建aikit_resources目录,将模型资源导入到aikit_resources文件夹下即可。
如果想将命令词配置文件打包到APK或aar中,可在项目主module中asset目录下创建aikit_resources目录,将命令词配置文件导入到aikit_resources文件夹下。自定义命令词配置文件路径通过FucUtil.getFilePath(mContext,"配置文件名称")获取。离线命令词配置参考【6.6配置自定义命令词】。
具体示例如下:
customBuilder.customText("FSA",FucUtil.getFilePath(MyApp.CONTEXT,"cn_fsa.txt"),//注意,这里不要再写路径了,默认是遍历所有文件夹,所以即便该文件在子文件夹里面,也是可以找到的0)
FucUtil的getFilePath方法配置参数说明:
appid、apiKey、apiSecret配置有误,请检查配置。
apiKey或apiSecret有误,请检查apiKey、apiSecret的值是否正确,并替换为正确的值。
SDK初始化时设置的SDK工作路径即“workDir”无读写权限,请确保SDK初始化时,SDK工作路径具有读写权限。
该错误为资源未找到,请检查是否将资源导入到了SDK的工作路径下。
流式接口能力,调用AEE_Start或start方法开始的会话,未调用AEE_End或end方法打断或正常结束,再次调用AEE_Srart则SDK会返回18310错误,同一个能力SDK不支持并发调用,需要结束本次会话之后,才能开始下一次会话。