您的位置:首页 > 移动开发 > Android开发

android 开发 讯飞语音唤醒功能

2015-05-21 15:46 169 查看
场景:进入程序后处于语音唤醒状态,当说到某个关键词的时候打开某个子界面(如:语音识别界面)

技术要点:

1、

// 设置唤醒一直保持,直到调用stopListening,传入0则完成一次唤醒后,会话立即结束(默认0)
mIvw.setParameter(SpeechConstant.KEEP_ALIVE, "1");

2、添加资源文件appid.jet 很奇怪为什么这里demo里面不需要语法文件

关键代码:

/*********************************语音唤醒************************************************/
// 语音唤醒对象
private VoiceWakeuper mIvw;
// 唤醒结果内容
private String resultString;
private void initAwake()
{
StringBuffer param = new StringBuffer();
String resPath = ResourceUtil.generateResourcePath(MainActivity.this,RESOURCE_TYPE.assets, "ivw/" + getString(R.string.app_id) + ".jet");
param.append(ResourceUtil.IVW_RES_PATH + "=" + resPath);
param.append("," + ResourceUtil.ENGINE_START + "=" + SpeechConstant.ENG_IVW);
boolean ret = SpeechUtility.getUtility().setParameter(
ResourceUtil.ENGINE_START, param.toString());
if (!ret) {
Log.d(TAG, "启动本地引擎失败!");
}
// 初始化唤醒对象
mIvw = VoiceWakeuper.createWakeuper(this, null);

//非空判断,防止因空指针使程序崩溃
mIvw = VoiceWakeuper.getWakeuper();
if(mIvw != null) {
//                resultString = "";
//                textView.setText(resultString);
// 清空参数
mIvw.setParameter(SpeechConstant.PARAMS, null);
// 唤醒门限值,根据资源携带的唤醒词个数按照“id:门限;id:门限”的格式传入
mIvw.setParameter(SpeechConstant.IVW_THRESHOLD, "0:"+ 0);  //20为门阀值
// 设置唤醒模式
mIvw.setParameter(SpeechConstant.IVW_SST, "wakeup");
// 设置唤醒一直保持,直到调用stopListening,传入0则完成一次唤醒后,会话立即结束(默认0)
mIvw.setParameter(SpeechConstant.KEEP_ALIVE, "1");
//                mIvw.startListening(mWakeuperListener); //onresume中操作
} else {
showTip("唤醒未初始化");
}
}
private WakeuperListener mWakeuperListener = new WakeuperListener() {

@Override
public void onResult(WakeuperResult result) {
try {
String text = result.getResultString();
resultString = text;
JSONObject object;
object = new JSONObject(text);
String awakeId = object.optString("id");
if(!StringUtil.isNullorEmpty(awakeId))
{
//打开语音识别界面
boolean needShowVoiceTips = (Boolean) SPUtils.get(MainActivity.this,getResources().getString(R.string.needShowUseVoiceTips), true);
Log.v(TAG, "IsShowVoiceTips="+needShowVoiceTips);
mIvw = VoiceWakeuper.getWakeuper();
if (mIvw != null) {
mIvw.stopListening();
mIvw = null;
} else {
showTip("唤醒未初始化");
}
if(!needShowVoiceTips)
{

if(voicePop==null||!voicePop.isShowing())
{
voicePop = new VoiceInputPopView(MainActivity.this);
//显示窗口
voicePop.showAtLocation(iv_setting, Gravity.CENTER, 0, 0); //设置layout在PopupWindow中显示的位置
}
}
else
{
voidTipsPop= new UseVoiceTipsPop(MainActivity.this);
//显示窗口
voidTipsPop.showAtLocation(iv_setting, Gravity.CENTER, 0, 0); //设置layout在PopupWindow中显示的位置
}

}
} catch (JSONException e) {
resultString = "结果解析出错";
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
//                Toast.makeText(MainActivity.this, "结果"+resultString, Toast.LENGTH_SHORT).show();
}

@Override
public void onError(SpeechError error) {
showTip(error.getPlainDescription(true));
}

@Override
public void onBeginOfSpeech() {
showTip("尝试说【讯飞语点】唤醒语音识别界面");
}

@Override
public void onEvent(int eventType, int isLast, int arg2, Bundle obj) {

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: