智能创客,中国最大的极客空间,智能平台,免费教学,视频教程,手把手教你创造儿时梦想!

标题: 《android入门教程四》语音控制之自动应答模式 [打印本页]

作者: feiju    时间: 2015-10-14 20:23
标题: 《android入门教程四》语音控制之自动应答模式
本帖最后由 feiju 于 2015-10-14 21:03 编辑

    开源是一种精神,开源是一种境界。在上一个教程中,我们已经一起学习了如何让app说话,根据自己的语音命令执行一个自定义的操作事件,如果你还没有看以上教程,并且之前没弄过安卓app的话,请查看以上教程,不然你会看不懂的哦!
    成功弄出语音的创友们,这时会发现,语音命令用的太费劲了,每次说语音命令,都要手动按一下开始按钮,这样的使用体验显然不是我们想要的。如何在开启语音模式后就不需要再按了,直接对着app说语音命令,听完一句就自动执行去,这样多方便呢?是的,我也是这样想的,所以,这次的教程,我们就去改造它,让它开启自动语音模式。
   首先,我们先了解一下语音命令的执行周期是怎么样的,简单点说,就是语音命令从什么地方开始的,又在什么地方结束的,机器人给出回应后怎么继续听接下来的语音命令。
我们打开IatDemo.java文件,如下图
打开后我们找到如下图的代码位置
大家可以看到,里面有完整的“开始”按钮,“停止”按钮和“取消”按钮的点击事件,现在是不是找到语音是从哪开始的了吧!我们细看一下,里面么有个recognizerListener如图:
这个是干什么的呢?别着急,我们将鼠标移到上面后,摁住Ctrl键鼠标左击后就自动跳到定义这个东西的地方了,定下心来看看中文注释,是不是有点懂了呢?
注意红色的箭头,“开始说话”代表语音识别开启,“结束说话”代表语音识别结束,onError表示语音识别存在错误,一般情况下就是开启语音识别,你没说话会导致这个问题,记住它哦,一会我们会用到它。onResult顾名思义,就是得到语音识别结果,怎么去处理它,是不是在里面看到你熟悉的字眼了啊?
赶紧鼠标移过去,摁住Ctrl然后左击它,这就来到我们上一篇讲解的位置了。至此,我们对语音命令的流程,大致有了一个了解,概括起来就是,打开语音识别->获取到你说的语音后上传到服务器->返回语音识别出来的文字->根据识别出来的文字,判断执行语音命令。
    其次,了解了语音识别的流程后,我们先来想一下,怎么去实现自动语音。我的思路是这样的,给app一个开启的关键字符,让它知道你是在叫它,然后打开语音处理开关,听你说了些什么,然后根据你说了什么去执行相关命令,并在最后告诉你:“好的!”“OK!”“卧室灯已关闭!”等等,然后关闭语音处理开关,等待下次你叫它!思路有千变万化,如果你有不同的想法,那最好了,设计属于自己的app是我们共同的目标!在这里我就介绍一下如何实现我的思路吧,如果大家有更好的方案,请在下面留言,我们一起交流学习,大神勿喷!
    最后,我们一起去实现它吧!第一步,我们在initLayout()的上面粘贴上以下代码
[Java] 纯文本查看 复制代码
private void ListenAgain(){
setParam();
boolean isShowDialog = mSharedPreferences.getBoolean(getString(R.string.pref_key_iat_show), true);
if (isShowDialog) {
// 显示听写对话框
mResultText.setText(null);
iatDialog.setListener(recognizerDialogListener);
iatDialog.show();
showTip(getString(R.string.text_begin));
} else {
// 不显示听写对话框
ret = mIat.startListening(recognizerListener);
if(ret != ErrorCode.SUCCESS){
showTip("听写失败,错误码:" + ret);
}else {
showTip(getString(R.string.text_begin));
}
}
}
效果如下图,
这个主要是为了让语言识别在结束后再次启动用的,在什么情况下会用到这个呢?首先,如果开启语音识别,一段时间没有说话,就会关闭识别了,这个时候,我们不能让它关闭,要让它继续识别;其次,如果我们说话了,app处理了我们的命令,并且告诉你:“好的!”“OK!”“卧室灯已关闭!”等等后,再启动重新听,为什么要在结束后开启呢?因为如果不这样,app会把它自己说的话当成语音命令上传,导致卡顿,甚至会出现复读机模式。好了,说了这么多,我们就一步步开始吧!
第一步:在上面的recognizerListener里的onError里添加"ListenAgain();",如下图,这是为了在你开启语音模式后,你没说话的情况下能接着听。

第二步:在ListenAgain上面添加如下代码:
[Java] 纯文本查看 复制代码
@SuppressWarnings("deprecation")
private TextToSpeech.OnUtteranceCompletedListener ttsOnUtteranceCompletedListener = new TextToSpeech.OnUtteranceCompletedListener() {

public void onUtteranceCompleted(String utteranceId) {
ListenAgain();
}
};

如下图所示:
第三步:在该位置,
上一教程有提到哦,添加
[AppleScript] 纯文本查看 复制代码
m_speech.setOnUtteranceCompletedListener(ttsOnUtteranceCompletedListener);
如图:

这样,自动语音的运行回路就已经弄好了。
最后一步:我们设置一下那个让app认识的关键字,用来开启识别,怎么弄呢?接着往下。
设置一个全局的开关“boolean mIsAction = false;”,将yuyingtoapi(String yuyin)的东西全部删除,然后粘贴如下代码
[Java] 纯文本查看 复制代码
boolean mIsAction = false;
//分析语音批配文字,Post数据到云端服务器api
@SuppressWarnings({ "deprecation", "unchecked", "rawtypes" })
public void yuyingtoapi(String yuyin) {

mIat.stopListening();

HashMap myHashAlarm = new HashMap();
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"end of wakeup message ID");

if(yuyin.equals("瓦力")){

m_speech.speak("什么事,请您吩咐", TextToSpeech.QUEUE_FLUSH, myHashAlarm);
mIsAction = true;
return;

}
if(mIsAction && !yuyin.equals("")){
mIsAction = false;

//里面可以添加你想要要添加的语音命令
}

}

如图:
第一个if里面,你可以修改你喜欢的关键字,在第二个if里面,你就可以添加上一个教程里面的语音命令了,特别注意的是添加语音命令有些小变化,下面贴出命令示例
[Java] 纯文本查看 复制代码
if(yuyin.contains("你好") || yuyin.contains("哈喽") || yuyin.contains("hello")){

speakString = "你好!很高兴认识你!";

m_speech.speak(speakString, TextToSpeech.QUEUE_FLUSH, myHashAlarm);
return;
}
如图,红色框内和上一个教程的变化,上一教程此位置是null,一定要注意修改哦!
    至此,我们的自动语音教程就圆满结束了哦,希望大家看了以后,多提宝贵意见,分享你的想法和经验,分享你我,分享快乐!

作者: 创客帝国    时间: 2015-10-14 20:26
哎呀我去 !这教程写的真板正!
作者: 洋芋炒土豆    时间: 2015-10-14 20:39
学习了,开源是一种境界!
作者: znck007    时间: 2015-10-14 21:27
哈哈,你都把我们安卓唤醒语音控制的视频给写出教程啦,我们原来用的是多拉A梦,就会自动应答。
作者: 创客帝国    时间: 2015-10-14 21:33
但有个问题,这么会马上刷完每天100次限制的,迅飞语音有限制的。大家用自己申请的迅飞的sdk包,然后申请上线才能无限哦
作者: feiju    时间: 2015-10-15 08:33
创客帝国 发表于 2015-10-14 21:33
但有个问题,这么会马上刷完每天100次限制的,迅飞语音有限制的。大家用自己申请的迅飞的sdk包,然后申请上 ...

对,在教程里忘说了,不够用的创友们,自己可以去申请一下哦!
作者: feiju    时间: 2015-10-15 08:34
znck007 发表于 2015-10-14 21:27
哈哈,你都把我们安卓唤醒语音控制的视频给写出教程啦,我们原来用的是多拉A梦,就会自动应答。 ...

视频在哪啊?我去看看!
作者: feiju    时间: 2015-10-15 08:35
洋芋炒土豆 发表于 2015-10-14 20:39
学习了,开源是一种境界!

嗯嗯!
作者: 无聊者    时间: 2015-11-2 22:46
怎么申请讯飞?
作者: Jone    时间: 2015-11-11 22:04
加油楼主,继续!代码在哪下载啊?
作者: lonsin    时间: 2015-11-26 23:06
赞一个! 正在学习!

作者: XXY    时间: 2015-12-15 13:39
HHHUUUIIJJJKK
作者: uvuys    时间: 2016-1-5 15:06
刚走大众套了3500  3分钟秒转!  信誉杠杠滴 ~赞
作者: Raspberry    时间: 2016-1-13 21:54
小菜鸟刷等级,看教程,学习中
作者: dpzkm    时间: 2016-2-26 00:10
顶上去!顶上去!
作者: chenyuechi    时间: 2016-3-7 15:29
大赞,感谢分享
作者: caiboxuan    时间: 2016-3-11 22:38
厉害得不要不要
作者: 飞珍非仓    时间: 2016-3-16 02:26
强烈支持,楼主万岁!
作者: dpzkm    时间: 2016-3-17 13:08
LZ辛苦了,支持一下!
作者: lk14d9    时间: 2016-3-19 22:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: lccyctyz    时间: 2016-3-25 22:27
懵懵懂懂看完了,看来还要看一遍
作者: 飞珍非仓    时间: 2016-3-28 09:00
绝对喜欢,好帖子不多哦,顶一下
作者: jnwysh    时间: 2016-3-29 12:47
学习了,开源是一种境界!
作者: qiao3755    时间: 2016-3-29 22:12
谢谢分享
作者: iwdlw    时间: 2016-4-4 23:18
〓金牌-投票███扣扣:119209911 ███微信:13911679882(手机)如有网上投票刷票需求就到金牌微信投票公司,将提供专业服务。
随着网络的深入很多商家或者节目都会通过网络的方式进行投票,通过网上投票也是对选手的一种综合评分的评定方式之一,但在网上投票也会有一些限制,有的会选择先关注在投票的模式,有的是对投票的次数有一定的限制,总之,都是给大家一个公平的竞争机会,也是一个供大家交流的一个平台,而微信投票的主要方式还是依靠庞大的专业从事网络投票的人员组成,而微信投票公司的工作人员遍布全国各地实现真实的IP投票流程,投票结果真实,伴随着商城的诞生与兴起,消费者可通过微信平台、微信投票平台、微信公众号等,就可以实现网上查询、购物、支付等线上与线下的一体化服务。
作者: hgzhr    时间: 2016-4-6 12:35
提示: 作者被禁止或删除 内容自动屏蔽
作者: liangzhineng    时间: 2016-5-20 15:31
很好的教程,谢谢作者
作者: jarsi    时间: 2016-5-24 19:09
本地证件办理QQ:599746566,保证质量 ,货到付款。
作者: hszrk    时间: 2016-6-7 07:42
呵呵,好帖一定要顶,支持













作者: dpzkm    时间: 2016-6-10 23:57
帮顶帮顶帮顶
作者: holmes    时间: 2016-6-16 21:28
有点难度,没有搞过,不知道能不能学会。
作者: qq571484380    时间: 2016-6-20 17:02
给力给力
作者: fnfbp    时间: 2016-6-26 09:02
朋友不错,谢谢您的努力,顶了













作者: 昌军凝    时间: 2016-7-21 11:18
初来乍到,请多多关照。












您懂得 您懂得 别想歪了 百度网盘免费下载   hao.wpan123.com
作者: {五洲管道}    时间: 2016-9-13 19:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: 方重明    时间: 2016-9-29 22:58
哈哈,有意思。












某宝购买 视频教程 素材 软件 xiao视频 等资源  百度网盘免费下载   hao.wpan123.com
作者: uu新天地50    时间: 2016-10-17 07:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: 月夜之星642    时间: 2016-10-19 19:25
佩服,佩服!

















欢迎光临 智能创客,中国最大的极客空间,智能平台,免费教学,视频教程,手把手教你创造儿时梦想! (http://luntan.znck007.com/) Powered by Discuz! X3.2