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

科大讯飞语音实现Android拨号之一

2016-05-10 23:27 816 查看

科大讯飞语音实现Android拨号之一

此文为博主原创,转载注明出处/article/11098559.html

这段时间由于自身项目功能的完善需要用上语音拨号功能,但由于网上各种资料参差不齐,而且自己本身主要在做C++,对于Android端代码不甚了解,如果有错误,欢迎交流。希望可以帮到大家,

原谅我一言不合就上代码…=-=

科大讯飞语音

科大讯飞提供了多种语音功能,详情请参照http://www.xfyun.cn/services/service

在科大讯飞网站注册,下载SDK包,并在Demo中可以找到开发文档

代码块语法遵循标准markdown代码,例如:

SpeechUtility.createUtility(this, "appid=xxxxxxx");


其中xxxxxxx是你的APPID,这里基本的语音识别可以进行参考讯飞论坛http://bbs.xfyun.cn/forum.php

语义理解

我这个应用集成语音拨号是基于语义理解的,因此,我们要先设置

python

//语义理解对象

private com.iflytek.cloud.SpeechUnderstander understander;


在onCreate()里面进行设置

python

//init()

understander= SpeechUnderstander.createUnderstander(this,hInitListener);

private InitListener hInitListener = new InitListener() {

@Override

public void onInit(int i) {

//     Log.d(TAG, "SpeechRecognizer init() code = " + i);

}

};


我们需要对语义理解的对象进行设置

python

//1.创建语音语义理解对象

SpeechUnderstander understander = SpeechUnderstander.createUnderstander(context, null);

//2.设置参数,语义场景配置请登录 http://osp.voicecloud.cn/ 
understander.setParameter(SpeechConstant.LANGUAGE, "zh_cn");

//3.开始语义理解

understander.startUnderstanding(mUnderstanderListener);

// XmlParser为结果解析类,见SpeechDemo

private SpeechUnderstanderListener mUnderstanderListener = new SpeechUnderstanderListener(){

public void onResult(UnderstanderResult result) { String text = result.getResultString();

}

public void onError(SpeechError error) {}//会话发生错误回调接口

public void onBeginOfSpeech() {}//开始录音

public void onVolumeChanged(int volume){} //音量值0~30

public void onEndOfSpeech() {}//结束录音

public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {}//扩展用接口

};


上传联系人

python

//获取 ContactManager 实例化对象

ContactManager mgr = ContactManager.createManager(context, mContactListener);

//异步查询联系人接口,通过 onContactQueryFinish 接口回调

mgr.asyncQueryAllContactsName();

//获取联系人监听器。

private ContactListener mContactListener = new ContactListener() {

@Override

public void onContactQueryFinish(String contactInfos, boolean changeFlag) {

//指定引擎类型

mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); mIat.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8");

ret = mIat.updateLexicon("contact", contactInfos, lexiconListener);

if(ret != ErrorCode.SUCCESS){ Log.d(TAG,"上传联系人失败:" + ret);

}

}};

//上传联系人监听器。

private LexiconListener lexiconListener = new LexiconListener() {

@Override

public void onLexiconUpdated(String lexiconId, SpeechError error) {

if(error != null){ Log.d(TAG,error.toString());

}else{

Log.d(TAG,"上传成功!");

}

}


JSon解析

{

“semantic”: {

“slots”: {

“name”: “张三”

}

},

“rc”: 0,

“operation”: “CALL”,

“service”: “telephone”,

“text”: “打电话给张三”

}这是讯飞解析的结果

于是我们要获取name进行与手机联系人进行匹配,然后导出联系人电话号码,进行拨号,这样语音控制拨号就能够成功了,具体的实现我将在后面提出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: