28
2019
04

《android入门教程三》语音控制的那些事

    开源是一种精神,开源是一种境界。上面的教程已经教大家学习如何搭建app的开发环境和app工程的基本框架,如果你没有看,不要紧,点击下面代码,按照步骤学习一下吧。

请大家跟随我一起DIY属于我们自己的app吧!在前面的入帖问候中,我曾经提到,怎么让家居智能起来,“智能”二字如何体现?难道我们拿着手机,打开看看家里温湿度多少,这就算智能吗?出门办事,眼睛时时盯着手机上的烟雾报警器数据和红外人体探测数据吗?答案显然是否定的!传感器数据不仅仅是为了给我们查看而存在的,如何运用它们,并且智能地做出反应和提醒,实现智能联动,给传感器们配上一个大脑,这才是我们的终极目标。有人会说:别扯这些没用的,你就告诉我怎么弄吧!{:soso_e143:}好吧,接下来,就教大家如何把手机app转换成自己的管家机器人,陪它说说话,陪它聊聊天,陪它唠唠嗑!
    作为管家机器人,不能说话你说着急不着急,还好创客提供的app里面有语音控制这个模块,但是大部分人点进去之后会发现:童话里都是骗人的!你跟它说话,它也不回答你,你说什么,它就只能识别出你说的话,然后显示出来。没关系,之所以是这样,是创客想让我们自己设计,自由发挥,别问我怎么知道的,因为,我也是猜的!
    首先,我们先进入语音控制的模块,看一下里面的代码是怎么写的吧!找到下图的文件,双击打开:


    打开后,其他的你先不要管,找到如图的代码位置
现在你就找到处理语言的地方了,你会发现,在里面已经写了这么几行代码

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
String cmdstr="";//当前命令类型
cmdstr="卧室开灯";//当前命令类型
if ( yuyin.contains("开") && yuyin.contains("灯") && yuyin.contains("卧室")) {
WebApi znckWebapi = new WebApi(IatDemo.this);//声明云端操作api类
znckWebapi.sid="003";//修改成云端对应的sid
znckWebapi.nid="001";//修改成云端对应的nid
String mode="yysetdata";//语音数据模式
String data="1";//上传的数据,1代表开灯
znckWebapi.SetDate(mode,data);//调用SetDate数据函数发送。
 
return;
}
 
cmdstr="卧室关灯";//当前命令类型
if ( yuyin.contains("关") && yuyin.contains("灯") && yuyin.contains("卧室")) {
 
WebApi znckWebapi = new WebApi(IatDemo.this);//声明云端操作api类
znckWebapi.sid="003";//修改成云端对应的sid
znckWebapi.nid="001";//修改成云端对应的nid
String mode="yysetdata";//语音数据模式
String data="0";//上传的数据,0代表关灯
znckWebapi.SetDate(mode,data);//调用SetDate数据函数发送。
 
return;
}


    如果你看得懂中文,就会发现,噢,原来语音就是在这个地方识别和进行控制的啊!是的!但是现在,机器人都不开口说话,怎么办呢?别着急,接着往下看。
    让手机说话,其实是通过android里面的TextToSpeech类实现的,不需要知道它是什么的,你跟着教程一步步做就行了。
    一、新建m_speeck变量,位置放着跟下图一样就行了

1
TextToSpeech m_speech;


    二、复制如下代码,将其放入制定位置,主要是初始化TextToSpeech。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
m_speech = new TextToSpeech(IatDemo.this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int arg0) {
if (arg0 == TextToSpeech.SUCCESS) {
 
//下面这句代码是主要的,设置语言,如果是英文的话,就用Locale.ENGLISH
int result = m_speech.setLanguage(Locale.CHINA);
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("lanageTag", "not use");
}
 
}
 
}
});
注意上面的红框,这个是复制的位置哦,别复制错了。
    三、找到上面的鼠标选中里面的代码,然后Ctrl+/,将它们全部注释掉


然后在里面添加

1
m_speech.speak(yuyin, TextToSpeech.QUEUE_FLUSH, null);
Ctrl+S保存后,插上你的安卓手机,点击上面的绿色小爬虫运行。
以上就是实现你说什么,手机就说什么,复读机模式!
运行后,有人会发现,就算在app的语音控制对着手机说话,它也还是一样不说话,咋回事呢?别着急,主要是因为你手机上没有中文的语音包,那怎么办呢?
首先,通过手机应用市场:应用宝,豌豆荚之类的,在里面搜索:讯飞语音+,搜到后安装,安装完啥也别干,退出来,打开手机设置,找到“语言和输入法”,往下找,找到“文字转语音(TTS)输出”,


找到“讯飞语音+”选中就行了。


最后,重新打开app,点击开始说一句话,是不是说话啦!是不是很神奇?
    到这里,有的创友会问:我搞到现在弄一个复读机干什么呢?别着急,你现在可以在里添加自己想要的语音命令了,比如说做一个类似iphone的SIRI下面接一段示例代码,相信你们一定能看懂

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
if(yuyin.contains("你好") || yuyin.contains("哈喽") || yuyin.contains("hello")){
 
speakString = "你好!很高兴认识你!";
 
m_speech.speak(speakString, TextToSpeech.QUEUE_FLUSH, null);
return;
}
if(yuyin.contains("介绍") && yuyin.contains("你")){
 
speakString = "你好!我是这个家的管家机器人!你可以叫我瓦力!";
m_speech.speak(speakString, TextToSpeech.QUEUE_FLUSH, null);
return;
 
}
if(yuyin.contains("操")|| yuyin.contains("草") ){
 
speakString = "不能骂人,不然我会不高兴的!";
m_speech.speak(speakString, TextToSpeech.QUEUE_FLUSH, null);
return;
}


下面,你可以编制属于自己的语音命令了哦。在接下来的教程中,我会依据语音命令继续给大家做拓展,让机器人更加智能,实现不间断对话,启动各种自定义模式,并且进行消息推送等功能,敬请期待!大神勿喷!


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。