前段时间AlphaGo大战李世乭让人工智能火了一把。本文将为大家简单的介绍下安卓平台的语音机器人。

项目文件:

代码:
MainActivity:

package com.itcast.chatrobot;import java.util.ArrayList;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;import com.google.gson.Gson;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import com.itcast.chatrobot.VoiceBean.WS;public class MainActivity extends Activity {private StringBuffer mBuffer;private ListView lvList;private ArrayList<TalkBean> mList = new ArrayList<TalkBean>();private MyAdapter mAdapter;private String[] mAnswers = new String[] { "约吗?", "这张怎么样?", "漂不漂亮呀?","一晚上500块呀!" };private int[] mPics = new int[] { R.drawable.p1, R.drawable.p2,R.drawable.p3, R.drawable.p4 };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//将“12345678”替换成您申请的 APPID,申请地址:http://www.xfyun.cn// 请勿在“=”与 appid 之间添加任务空字符或者转义符SpeechUtility.createUtility(this, SpeechConstant.APPID + "=568d036a");lvList = (ListView) findViewById(R.id.lv_list);mAdapter = new MyAdapter();lvList.setAdapter(mAdapter);}/*** 开始语音识别* @param view*/public void startListen(View view) {//1.创建RecognizerDialog对象RecognizerDialog mDialog = new RecognizerDialog(this, null);//2.设置accent、language等参数mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");mDialog.setParameter(SpeechConstant.ACCENT, "mandarin");//若要将UI控件用于语义理解,必须添加以下参数设置,设置之后onResult回调返回将是语义理解//结果// mDialog.setParameter("asr_sch", "1");// mDialog.setParameter("nlp_version", "2.0");mBuffer = new StringBuffer();//3.设置回调接口mDialog.setListener(new RecognizerDialogListener() {//听写结果回调接口(返回Json格式结果,用户可参见附录13.1);//一般情况下会通过onResults接口多次返回结果,完整的识别内容是多次结果的累加;//关于解析Json的代码可参见Demo中JsonParser类;//isLast等于true时会话结束。@Overridepublic void onResult(RecognizerResult results, boolean isLast) {String result = results.getResultString();//System.out.println("识别结果:" + result);String parseData = parseData(result);//System.out.println("解析结果:" + parseData);//System.out.println("isLast:" + isLast);mBuffer.append(parseData);if (isLast) {//会话结束String askContent = mBuffer.toString();System.out.println("最终结果:" + askContent);//初始化提问对象TalkBean askBean = new TalkBean(askContent, -1, true);mList.add(askBean);//初始化回答对象String answer = "没听清";int imageId = -1;if (askContent.contains("你好")) {answer = "你好呀!";} else if (askContent.contains("你是谁")) {answer = "我是你的小助手!";} else if (askContent.contains("美女")) {//随机回答int i = (int) (Math.random() * mAnswers.length);//0,1,2,3answer = mAnswers[i];int j = (int) (Math.random() * mPics.length);//0,1,2,3imageId = mPics[j];} else if (askContent.contains("天王盖地虎")) {answer = "小鸡炖蘑菇";imageId = R.drawable.m;} else if(askContent.contains("明天天气")){answer = "会很热的";} else if(askContent.contains("修") && askContent.contains("空调")){answer = "正在为您下单";}TalkBean answerBean = new TalkBean(answer, imageId, false);mList.add(answerBean);//刷新listviewmAdapter.notifyDataSetChanged();//让listview自动显示最后一个条目lvList.setSelection(mList.size() - 1);startSpeak(answer);}}@Overridepublic void onError(SpeechError arg0) {}});//4.显示dialog,接收语音输入mDialog.show();}/*** 语音合成* @param view*/public void startSpeak(String content) {//1.创建 SpeechSynthesizer 对象, 第二个参数:本地合成时传 InitListenerSpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(this, null);//2.合成参数设置,详见《科大讯飞MSC API手册(Android)》SpeechSynthesizer 类//设置发音人(更多在线发音人,用户可参见 附录12.2mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); //设置发音人mTts.setParameter(SpeechConstant.SPEED, "50");//设置语速mTts.setParameter(SpeechConstant.VOLUME, "80");//设置音量,范围 0~100mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置云端//设置合成音频保存位置(可自定义保存位置),保存在“./sdcard/iflytek.pcm”//保存在 SD 卡需要在 AndroidManifest.xml 添加写 SD 卡权限//仅支持保存为 pcm 和 wav 格式,如果不需要保存合成音频,注释该行代码mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");//3.开始合成mTts.startSpeaking(content, null);}/*** 解析json*/protected String parseData(String json) {//Gson googleGson gson = new Gson();VoiceBean voiceBean = gson.fromJson(json, VoiceBean.class);StringBuffer sb = new StringBuffer();ArrayList<WS> ws = voiceBean.ws;for (WS w : ws) {String word = w.cw.get(0).w;sb.append(word);}return sb.toString();}class MyAdapter extends BaseAdapter {@Overridepublic int getCount() {return mList.size();}@Overridepublic TalkBean getItem(int position) {return mList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = View.inflate(getApplicationContext(),R.layout.list_item, null);holder = new ViewHolder();holder.tvAsk = (TextView) convertView.findViewById(R.id.tv_ask);holder.tvAnswer = (TextView) convertView.findViewById(R.id.tv_answer);holder.ivPic = (ImageView) convertView.findViewById(R.id.iv_pic);holder.llAnswer = (LinearLayout) convertView.findViewById(R.id.ll_answer);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}TalkBean item = getItem(position);if (item.isAsk) {//提问holder.tvAsk.setVisibility(View.VISIBLE);holder.llAnswer.setVisibility(View.GONE);holder.tvAsk.setText(item.content);} else {//回答holder.tvAsk.setVisibility(View.GONE);holder.llAnswer.setVisibility(View.VISIBLE);holder.tvAnswer.setText(item.content);//图片if (item.imageId > 0) {holder.ivPic.setVisibility(View.VISIBLE);holder.ivPic.setImageResource(item.imageId);} else {holder.ivPic.setVisibility(View.GONE);}}return convertView;}}static class ViewHolder {public TextView tvAsk;public TextView tvAnswer;public ImageView ivPic;public LinearLayout llAnswer;}}

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ListView
        android:id="@+id/lv_list"android:layout_width="match_parent"android:divider="@null"android:layout_height="0dp"android:layout_weight="1" /><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/bottom_bar"android:gravity="center"android:orientation="vertical" ><Button
            android:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/btn_selector"android:onClick="startListen"android:text="点击开始语音识别" /></LinearLayout></LinearLayout>

listview的item布局(对话):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="5dp" ><TextView
        android:id="@+id/tv_ask"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_alignParentTop="true"android:background="@drawable/asker_bubble"android:gravity="center"android:paddingLeft="10dp"android:paddingRight="15dp"android:text="提问"android:textColor="#000"android:textSize="16sp" /><LinearLayout
        android:id="@+id/ll_answer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/tv_ask"android:layout_marginTop="10dp"android:background="@drawable/answer_bubble"android:orientation="vertical"android:gravity="center_vertical"android:paddingLeft="15dp"android:paddingRight="10dp" ><TextView
            android:id="@+id/tv_answer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:gravity="center"android:text="回答"android:textColor="#000"android:textSize="16sp" /><ImageView
            android:id="@+id/iv_pic"android:layout_width="wrap_content"android:layout_height="wrap_content"android:visibility="gone" /></LinearLayout></RelativeLayout>

TalkBean:

package com.itcast.chatrobot;//提问/回答
public class TalkBean {public TalkBean(String content, int imageId, boolean isAsk) {super();this.content = content;this.imageId = imageId;this.isAsk = isAsk;}public String content;public int imageId;public boolean isAsk;//是否是提问
}

voicebean:

package com.itcast.chatrobot;import java.util.ArrayList;public class VoiceBean {public ArrayList<WS> ws;public class WS {public ArrayList<CW> cw;}public class CW {public String w;}
}

需要项目源码的可以私信我

安卓智能语音机器人--AlphaGo?你也可以相关推荐

  1. yy自动语音接待机器人_智能语音机器人落地产品有哪些?

    据相关研究报告表明,在众多人工智能落地产品或者应用场景中,智能语音机器人无论从产品的成熟度还是应用的广泛度来说,都是人工智能行业最热门和最有前景的产品. 智能语音机器人并不只是一款产品,它是所有智能语 ...

  2. 钉钉机器人关键词应答_除了用于电销,智能语音机器人可以应用哪些地方?

    之前的文章探讨的是智能语音机器人在电销行业的应用,然而在实际的场景中,电销行业的应用只是大家所熟知的行业之一. 对比于人工电销,使用智能语音机器人有着诸多优势,例如:工作效率高.意向筛选.电话录音并转 ...

  3. 彼聆智能语音机器人_南昌智能语音机器人作用

    南昌智能语音机器人作用dfv39g 人工智能+电话销售把人类从重复的脑力劳动中解放出来这个任务沉重却赋予了咱们奋斗的动力,咱们把解放话务员的重复脑力劳动作为完结任务的个里程碑心态是一个大门槛. 南昌智 ...

  4. 关于智能语音机器人使用中可能出现的问题

    关于智能语音机器人的使用误区 对于一些销售型的企业来说, 智能语音机器人他们应该不会陌生, 这种节省人力提高效 率的方法一直为大家使用,但是总体市场反响并不是很好. 为了能够对大家提供帮助,专门试用了 ...

  5. 智能机器人无法智能对话_关于智能语音机器人使用中可能出现的问题

    关于智能语音机器人的使用误区 对于一些销售型的企业来说, 智能语音机器人他们应该不会陌生, 这种节省人力提高效 率的方法一直为大家使用,但是总体市场反响并不是很好. 为了能够对大家提供帮助,专门试用了 ...

  6. 服务双管齐下,智能语音机器人帮你say hi~

    什么是智能语音机器人? 智能语音机器人是一种以ASR.TTS. NLU 等技术为基础的智能客服机器人.能够根据客户咨询做出反应,快速识别客户意图,并根据客户咨询内容进行智能化解答,为客户提供即时.高质 ...

  7. 智能语音机器人智能在哪里?

    怕没有意向客户? 它每天直接将意向客户名单交给你. 怕记录混乱不好跟踪? 它分类明确.记录清晰,通话录音.文字,随时随地查看.下载. 怕效果太假交流差? 它真人语音.秒回客户,比真人还智能. 怕员工辞 ...

  8. 【Android App】实战项目之实现你问我答的智能语音机器人(超详细 附源码和演示视频)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.需求描述 想必大家都见过商场里的智能语音机器人,你对它提问时它可以自动回答你的问题,接下来我们也实现这样一个机器人,它依靠语音技术完成问询服务 基 ...

  9. 看VIKI智能语音机器人如何在“五一小长假”帮助企业获客

    五一假期结束了,大家都回来上班了吧?是不是感觉假期还没开始就结束了? 今年"五一小长假"由三天增加至四天,此消息一出,很快拉动了大众的旅游热情,也促进了旅游市场的兴旺,旅行社作为旅 ...

最新文章

  1. HttpApplication事件ASP.NET页面周期
  2. Jmeter性能测试-GC相关
  3. 一台服务器最多能创建多少个 TCP 连接?
  4. 查看mysql本地路径
  5. Vb 与 Vc 的区别
  6. Exif文件格式描述
  7. D3D中的粒子系统(4)
  8. SQL中CONVERT转化函数的用法[个人推荐]
  9. 使用一个命令执行单个Java源文件
  10. dubbo 分组后,dubbo-admin 看不到服务
  11. 高性能Javascript重绘和重排学习笔记
  12. LINUX 编译gluegen/jogl
  13. php重置按钮,input 标签中 reset 重置按钮点击后表单不能清空的原因
  14. win7访问linux共享没有权限设置,局域网共享时提示:你没有权限访问,请与网络管理员联系...
  15. EXCEL:转换人民币大写
  16. ASP多媒体视频教程
  17. 网络编程-HTTP编程
  18. Struts2漏洞爆发 知道创宇云安全已拦截近万攻击样本
  19. 【可视化开发】数据大屏可视化技术汇总
  20. JS判断一个数是否为质数(素数)

热门文章

  1. 代购服务器哪个网站好,搭建韩国代购平台网站选择哪家服务器比较好?
  2. 完美简单解决git和svn共用混用,或用git维护svn的问题
  3. apple tv设置_如何设置Apple TV以自动安装iPhone的应用程序
  4. 全球与中国集成平台即服务(iPaaS)软件市场现状及未来发展趋势
  5. redis和zookeeper实现分布式锁的区别
  6. 100个python算法超详细讲解:分糖果
  7. github/git问题之 LibreSSL SSL_connect: Operation timed out in connection to github.com:443
  8. 深度学习的应用——检測糖尿病型视网膜症
  9. 学习笔记50--terminate called after throwing an instance of ‘YAML::BadFile‘ what(): bad file报错踩坑
  10. 做好 FIBOS 生态门户 —— FO 钱包 v2.0.0 新版上线