1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 安卓智能语音机器人--AlphaGo?你也可以

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

时间:2022-10-29 01:54:16

相关推荐

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

前段时间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,申请地址:// 请勿在“=”与 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="/apk/res/android"xmlns:tools="/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="/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;}}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。