科大讯飞天气预报(测试中)

科大讯飞天气预报

1、云端配置

#创建应用
AIUI是科大讯飞2015年推出的自然语言理解为核心的全链路人机交互语音解决方案,可快速让你的应用和设备能听会说,能理解会思考。
进入AIUI开放平台,登录您的账号,应用接入–进入应用–创建应用,或在下方新手指南–创建AIUI应用,填写您应用的相关信息与应用平台后,便创建好应用了。
在这里插入图片描述
创建完应用后,在该应用的SDK下载页面即可下载对应的SDK包(下载后的SDK包名字如Windows_aiui5.5.1059.0001_60208bd0),SDK包里包含MSC与AIUI库。
本章节仅介绍AIUI库的入门使用,MSC库中包含唤醒与合成能力,如需了解MSC库,请访问MSC开发指南
在这里插入图片描述

Android 平台集成步骤

#导入SDK
打开Android Studio,创建一个新的工程,将下载的Android SDK压缩包中libs目录下的libaiui.so以及AIUI.jar拷贝至Android工程的libs目录下,并将SDK包中assets目录下cfg文件夹以及res目录下vad文件夹拷贝至工程中。

工程结构如下图所示:
在这里插入图片描述
将AIUI.jar添加至工程依赖

在这里插入图片描述
将app module下的gradle配置文件中(build.gradle)指定默认jniLibs目录为libs。

android {
...
	sourceSets {
		main {
			jniLibs.srcDirs = ['libs']
		}
	}
...
}

如下图所示:
在这里插入图片描述

#添加用户权限
在工程AndroidManifest.xml文件中添加如下权限,如在Android6.0及以上手机中集成使用,请动态申请所需权限。

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在这里插入图片描述

注意:如需在打包或者生成APK的时候进行混淆,请在proguard.cfg中添加如下代码:

-keep class com.iflytek.**{*;}
-keepattributes Signature

在这里插入图片描述

#创建布局文件
可参考工程源码添加布局。

#创建AIUIAgent
SDK中提供的AIUIAgent就是和AIUI交互的桥梁。创建AIUIAgent,示例如下:

//创建AIUIAgent

AIUIAgent mAIUIAgent = AIUIAgent.createAgent(context,getAIUIParams(),mAIUIListener);

createAgent方法包含三个参数:

第一个参数类型为Context;
第二个参数类型为String,具体值是通过读取assets目录下的cfg/aiui_phone.cfg文件而获得的字符串;
第三个参数类型为AIUIListener,是AIUI事件回调监听器。
getAIUIParams()具体示例如下所示:

private String getAIUIParams() {
	String params = "";
	AssetManager assetManager = getResources().getAssets();
	try {
		InputStream ins = assetManager.open( "cfg/aiui_phone.cfg" );
		byte[] buffer = new byte[ins.available()];
		
		ins.read(buffer);
		ins.close();
		
		params = new String(buffer);
	} catch (IOException e) {
		e.printStackTrace();
	}
	return params;
}

mAIUIListener具体示例如下所示:

AIUIListener mAIUIListener = new AIUIListener() {

	@Override
	public void onEvent(AIUIEvent event) {
		switch (event.eventType) {
			//唤醒事件
			case AIUIConstant.EVENT_WAKEUP:
			{
				break;
			}
			//结果事件(包含听写,语义,离线语法结果)
			case AIUIConstant.EVENT_RESULT:
			{
				break;
			}
			//休眠事件
			case AIUIConstant.EVENT_SLEEP:
			{
				break;
			}
			// 状态事件
			case AIUIConstant.EVENT_STATE: {
				mAIUIState = event.arg1;
				if (AIUIConstant.STATE_IDLE == mAIUIState) {
					// 闲置状态,AIUI未开启
				} else if (AIUIConstant.STATE_READY == mAIUIState) {
					// AIUI已就绪,等待唤醒
				} else if (AIUIConstant.STATE_WORKING == mAIUIState) {
					// AIUI工作中,可进行交互
				}
			} break;
			//错误事件
			case AIUIConstant.EVENT_ERROR:
			{
				break;
			}
		}
	}
}

#语音语义理解示例
发送CMD_WAKEUP消息至AIUI,使AIUI处于唤醒状态,再发送开始录音消息,使麦克风录入音频,并通过AIUIListener的回调,获取语义结果。代码示例如下:

// 先发送唤醒消息,改变AIUI内部状态,只有唤醒状态才能接收语音输入
if( AIUIConstant.STATE_WORKING != mAIUIState ){
	AIUIMessage wakeupMsg = new AIUIMessage(AIUIConstant.CMD_WAKEUP, 0, 0, "", null);
	mAIUIAgent.sendMessage(wakeupMsg);
}
		
// 打开AIUI内部录音机,开始录音
String params = "sample_rate=16000,data_type=audio";
AIUIMessage writeMsg = new AIUIMessage( AIUIConstant.CMD_START_RECORD, 0, 0, params, null );
mAIUIAgent.sendMessage(writeMsg);

如出现20006错误,请注意下应用是否拥有录音权限。返回的语义结果,参考语义结果说明文档

#结果解析
在AIUIEventListener回调中,可以收到来自AIUI的多种消息,具体示例如下:


private AIUIListener mAIUIListener = new AIUIListener() {

	@Override
	public void onEvent(AIUIEvent event) {
		switch (event.eventType) {
			case AIUIConstant.EVENT_WAKEUP: 
				//唤醒事件
				Log.i( TAG,  "on event: "+ event.eventType );
			break;

			case AIUIConstant.EVENT_RESULT: {
				//结果解析事件
				try {
					JSONObject bizParamJson = new JSONObject(event.info);
					JSONObject data = bizParamJson.getJSONArray("data").getJSONObject(0);
					JSONObject params = data.getJSONObject("params");
					JSONObject content = data.getJSONArray("content").getJSONObject(0);
					
					if (content.has("cnt_id")) {
						String cnt_id = content.getString("cnt_id");
						JSONObject cntJson = new JSONObject(new String(event.data.getByteArray(cnt_id), "utf-8"));
						String sub = params.optString("sub");
						if ("nlp".equals(sub)) {
							// 解析得到语义结果
							String resultStr = cntJson.optString("intent");
							Log.i( TAG, resultStr );
						}
					}
				} catch (Throwable e) {
					e.printStackTrace();
				}
			} break;

			case AIUIConstant.EVENT_ERROR: {
				//错误事件
				Log.i( TAG,  "on event: "+ event.eventType );
				Log.e(TAG, "错误: "+event.arg1+"\n"+event.info );
			} break;

			case AIUIConstant.EVENT_VAD: {
				if (AIUIConstant.VAD_BOS == event.arg1) {
					//语音前端点
				} else if (AIUIConstant.VAD_EOS == event.arg1) {
					//语音后端点
				} 
			} break;
			
			case AIUIConstant.EVENT_START_RECORD: {
				Log.i( TAG,  "on event: "+ event.eventType );
				//开始录音
			} break;
			
			case AIUIConstant.EVENT_STOP_RECORD: {
				Log.i( TAG,  "on event: "+ event.eventType );
				// 停止录音
			} break;

			case AIUIConstant.EVENT_STATE: {	
				// 状态事件
				mAIUIState = event.arg1;
				if (AIUIConstant.STATE_IDLE == mAIUIState) {
					// 闲置状态,AIUI未开启
				} else if (AIUIConstant.STATE_READY == mAIUIState) {
					// AIUI已就绪,等待唤醒
				} else if (AIUIConstant.STATE_WORKING == mAIUIState) {
					// AIUI工作中,可进行交互
				}
			} break;

			default:
				break;
		}
	}
};

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小飞熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值