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

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

此文为博主原创,转载注明出处http://blog.csdn.net/qq_24424175/article/details/51367785

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

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

  • 科大讯飞语音

  • 科大讯飞提供了多种语音功能,详情请参照http://www.xfyun.cn/services/service
    在科大讯飞网站注册,下载SDK包,并在Demo中可以找到开发文档

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

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

  • 语义理解
    我这个应用集成语音拨号是基于语义理解的,因此,我们要先设置
//语义理解对象
 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);
        }
    };

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

  //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) {}//扩展用接口
};
  • 上传联系人
  //获取 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进行与手机联系人进行匹配,然后导出联系人电话号码,进行拨号,这样语音控制拨号就能够成功了,具体的实现我将在后面提出。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值