android 开发 讯飞语音唤醒功能

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

技术要点:

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) {

            }
        };
时间: 2024-11-14 06:31:34

android 开发 讯飞语音唤醒功能的相关文章

讯飞语音——唤醒

讯飞语音唤醒 唤醒功能,顾名思义,通过语音,唤醒服务,做我们想做的事情. 效果图(开启应用后说讯飞语音或者讯飞语点唤醒) 源码下载 地址:http://download.csdn.net/detail/q4878802/9023213 步骤 1. 创建应用,开通服务 地址:http://blog.csdn.net/q4878802/article/details/47762169 2. 下载SDK 我们要使用的是讯飞的付费功能,选择唤醒服务,点击下载以后,会提示没有购买.点击"购买服务"

iOS开发讯飞语音的集成

1.进入官网注册账号,登陆,注册,应用. 2,下载sdk  导入系统库. 3,关闭bitcode 4,初始化讯飞语音. NSString * initString = [[NSString alloc] initWithFormat:@"appid=%@",@"56fb34f4"]; [IFlySpeechUtility createUtility:initString]; 5.集成代码 #import <UIKit/UIKit.h> #import &

Android 使用讯飞语音SDK

最近一直忙着写代码,每天的空闲时间不多.先占位,慢慢填坑. 讯飞开放平台: http://www.xfyun.cn/ 注册为开发者,然后参照文档一步步走下去. 由于是商业SDK,平台有诸多限制,免费的话只能联网,并且有限制次数,应用通过审核后无请求次数限制.

Android集成讯飞语音、百度语音、阿里语音识别

项目实践:https://blog.csdn.net/Jsagacity/article/details/80094164 demo下载地址:https://fir.im/jy28 demo源码:https://github.com/wapchief/android-CollectionDemo 百度网盘:https://pan.baidu.com/s/1gvoTlcddstxb7tyS8MvWzw密码:l5gd 2 科大讯飞  https://www.xfyun.cn/ 网友使用1https:

Android集成讯飞SDK实现语音拨号、语音导航、语音启动应用

转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui 科大讯飞语音SDK的语义分析还是挺强大的,可使我们的应用更加强大. 上篇博文介绍了讯飞SDK的一些简单功能: Android 使用讯飞语音SDK 今天来看看对语义分析结果JSON的解析并处理: 实现语音拨号 首先,我们看看"打电话给张三"这句话在服务器分析之后,传给我们的JSON是什么样的: { "semantic": { "slots": {

Android讯飞语音云语音听写学习

讯飞语音云语音听写学习         这几天两个舍友都买了iPhone 6S,玩起了"Hey, Siri",我依旧对我的Nexus 5喊着"OK,Google".但种种原因,国内的"OK,Google"并不能展示出他的全部威力,于是上网搜索国内Android平台的语音助手,个人觉得评价最好的是讯飞的--灵犀语音助手.其实讯飞语音云平台早就注册过了,并下载了相应的SDK,只是没仔细研究.今天突然想好好学习一下,以方便以后集成到自己开发的APP中,

一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino

大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说最大的问题是标准不统一云云,但在我看来,最大的问题在于两个方面,一个是价格,一个是操作的简便性,技术上的问题并不是阻碍智能家居推广的核心因素. 再来说说最近很火很惹人爱的微软小娜,Cortana.本人作为微软的死忠,作为一名靠.Net混饭的屌丝程序男,自然是有一部撸妹的,并且在小娜推送当天更新了手机

Android 通过调用系统接口使用如 谷歌语音、百度语音、讯飞语音等语音识别对话框的方法

现在app的开发进程会集成一些语音识别功能,而一般开发者是不具备自己开发一套语音识别引擎的,因此大多数情况是选择一个已经成熟的语音识别引擎SDK集成到自己的app中. 通常情况下,这种集成分两种,一种是直接调用SDK为开发者设计好的弹出框,开发者不需要开发识别交互界面:还有一种是开发者只利用SDK提供的语音识别服务,自己开发一个属于自己的交互设计. 本文介绍最简单直接调起弹出框的方法. 首先,测试机需要安装如谷歌语音.百度语音.讯飞语音等产品的语音软件,这时可以在系统设置界面的语言与输入处找到相

Android 讯飞语音之语音合成(在线有声朗读)

在线语音合成的使用方法: 首先下载相关的sdk,这个网址里有多种版本,我选择的Android. http://open.voicecloud.cn/index.php/services/voicebase?type=tts&tab_index=1 需要注意的是,最好先创建应用,审核通过后会返回一个APPID号,这个号在开发时会使用. 下载并解压后如图: 其中,doc中是相关文档,libs中是待会儿要导入的语音包,sample中是自带的Demo,大家可以看看. 下面我们通过实例来简单的使用在线语音