标签:
语音识别
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化语音引擎SpeechUtility.createUtility(this, SpeechConstant.APPID + "=54b8bca3");}/*** 开始听写** @param view*/public void listen(View view) {// 1.创建SpeechRecognizer对象,第二个参数:本地听写时传InitListenerSpeechRecognizer mIat = SpeechRecognizer.createRecognizer(this, null);// 2.设置听写参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类mIat.setParameter(SpeechConstant.DOMAIN, "iat");mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");mIat.setParameter(SpeechConstant.ACCENT, "mandarin");// 开始听写mIat.startListening(mRecoListener);}/*** 交互动画** @param view*/public void listenUI(View view) {RecognizerDialog iatDialog = new RecognizerDialog(this, mInitListener);// 2.设置听写参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类iatDialog.setParameter(SpeechConstant.DOMAIN, "iat");iatDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");iatDialog.setParameter(SpeechConstant.ACCENT, "mandarin");iatDialog.setListener(recognizerDialogListener);iatDialog.show();}/*** 语音朗诵*/public void read(View view) {SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(this, null);mTts.setParameter(SpeechConstant.VOICE_NAME, "vixm");mTts.setParameter(SpeechConstant.SPEED, "50");mTts.setParameter(SpeechConstant.VOLUME, "80");mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);mTts.startSpeaking("床前明月光,地上鞋两双,床上狗男女,其中就有你! 你好啊?",mSynthesizerListener);}private SynthesizerListener mSynthesizerListener = new SynthesizerListener() {@Overridepublic void onSpeakResumed() {// TODO Auto-generated method stub}@Overridepublic void onSpeakProgress(int arg0, int arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onSpeakPaused() {// TODO Auto-generated method stub}@Overridepublic void onSpeakBegin() {// TODO Auto-generated method stub}@Overridepublic void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {// TODO Auto-generated method stub}@Overridepublic void onCompleted(SpeechError arg0) {// TODO Auto-generated method stub}@Overridepublic void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {// TODO Auto-generated method stub}};private RecognizerDialogListener recognizerDialogListener = new RecognizerDialogListener() {@Overridepublic void onResult(RecognizerResult results, boolean isLast) {System.out.println(results.getResultString());System.out.println("isLast=" + isLast);}@Overridepublic void onError(SpeechError arg0) {}};private InitListener mInitListener = new InitListener() {@Overridepublic void onInit(int arg0) {}};private RecognizerListener mRecoListener = new RecognizerListener() {/*** 语音识别结果 isLast=true表示会话结束*/@Overridepublic void onResult(RecognizerResult results, boolean isLast) {System.out.println(results.getResultString());}@Overridepublic void onBeginOfSpeech() {// TODO Auto-generated method stub}@Overridepublic void onEndOfSpeech() {// TODO Auto-generated method stub}@Overridepublic void onError(SpeechError arg0) {// TODO Auto-generated method stub}@Overridepublic void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {// TODO Auto-generated method stub}@Overridepublic void onVolumeChanged(int arg0) {// TODO Auto-generated method stub}};}
<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" ><ListViewandroid:id="@+id/lv_list"android:layout_width="wrap_content"android:layout_height="0dp"android:divider="@null"android:layout_weight="1" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/bottom_bar"android:gravity="center"android:orientation="vertical" ><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:background="@drawable/btn_selector"android:onClick="startListen"android:text="点击开始语音识别"android:textColor="#000"android:textSize="16sp" /></LinearLayout></LinearLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><TextViewandroid:id="@+id/tv_ask"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_alignParentTop="true"android:layout_margin="5dp"android:background="@drawable/asker_bubble"android:gravity="center"android:text="你吃饭了吗?"android:textColor="#000"android:textSize="16sp" /><LinearLayoutandroid:id="@+id/ll_answer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/tv_ask"android:layout_margin="5dp"android:background="@drawable/answer_bubble"android:orientation="vertical" ><TextViewandroid:id="@+id/tv_answer"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="5dp"android:text="吃个毛线啊!"android:textColor="#000"android:textSize="16sp" /><ImageViewandroid:id="@+id/iv_pic"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/m"android:visibility="gone" /></LinearLayout></RelativeLayout>
public class ChatBean {public String text;// 内容public boolean isAsker;// true表示提问者,否则是回答者public int imageId = -1;// 图片idpublic ChatBean(String text, boolean isAsker, int imageId) {this.text = text;this.isAsker = isAsker;this.imageId = imageId;}}
public class VoiceBean {public ArrayList<WSBean> ws;public class WSBean {public ArrayList<CWBean> cw;}public class CWBean {public String w;}}
public class MainActivity extends Activity {private ListView lvList;private ArrayList<ChatBean> mChatList = new ArrayList<ChatBean>();private ChatAdapter mAdapter;private String[] mMMAnswers = new String[] { "约吗?", "讨厌!", "不要再要了!","这是最后一张了!", "漂亮吧?" };private int[] mMMImageIDs = 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);lvList = (ListView) findViewById(R.id.lv_list);mAdapter = new ChatAdapter();lvList.setAdapter(mAdapter);// 初始化语音引擎SpeechUtility.createUtility(this, SpeechConstant.APPID + "=54b8bca3");}StringBuffer mTextBuffer = new StringBuffer();private RecognizerDialogListener recognizerDialogListener = new RecognizerDialogListener() {@Overridepublic void onResult(RecognizerResult results, boolean isLast) {// System.out.println(results.getResultString());// System.out.println("isLast=" + isLast);String text = parseData(results.getResultString());mTextBuffer.append(text);if (isLast) {// 会话结束String finalText = mTextBuffer.toString();mTextBuffer = new StringBuffer();// 清理bufferSystem.out.println("最终结果:" + finalText);mChatList.add(new ChatBean(finalText, true, -1));String answer = "没听清";int imageId = -1;if (finalText.contains("你好")) {answer = "大家好,才是真的好!";} else if (finalText.contains("你是谁")) {answer = "我是你的小助手!";} else if (finalText.contains("天王盖地虎")) {answer = "小鸡炖蘑菇";imageId = R.drawable.m;} else if (finalText.contains("美女")) {Random random = new Random();int i = random.nextInt(mMMAnswers.length);int j = random.nextInt(mMMImageIDs.length);answer = mMMAnswers[i];imageId = mMMImageIDs[j];}mChatList.add(new ChatBean(answer, false, imageId));// 添加回答数据mAdapter.notifyDataSetChanged();// 刷新listviewlvList.setSelection(mChatList.size() - 1);// 定位到最后一张read(answer);}}@Overridepublic void onError(SpeechError arg0) {}};/*** 语音朗诵*/public void read(String text) {SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(this, null);mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");mTts.setParameter(SpeechConstant.SPEED, "50");mTts.setParameter(SpeechConstant.VOLUME, "80");mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);mTts.startSpeaking(text, null);}/*** 开始语音识别** @param view*/public void startListen(View view) {RecognizerDialog iatDialog = new RecognizerDialog(this, null);// 2.设置听写参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类iatDialog.setParameter(SpeechConstant.DOMAIN, "iat");iatDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");iatDialog.setParameter(SpeechConstant.ACCENT, "mandarin");iatDialog.setListener(recognizerDialogListener);iatDialog.show();}class ChatAdapter extends BaseAdapter {@Overridepublic int getCount() {return mChatList.size();}@Overridepublic ChatBean getItem(int position) {return mChatList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {holder = new ViewHolder();convertView = View.inflate(MainActivity.this,R.layout.list_item, null);holder.tvAsk = (TextView) convertView.findViewById(R.id.tv_ask);holder.tvAnswer = (TextView) convertView.findViewById(R.id.tv_answer);holder.llAnswer = (LinearLayout) convertView.findViewById(R.id.ll_answer);holder.ivPic = (ImageView) convertView.findViewById(R.id.iv_pic);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}ChatBean item = getItem(position);if (item.isAsker) {// 是提问者holder.tvAsk.setVisibility(View.VISIBLE);holder.llAnswer.setVisibility(View.GONE);holder.tvAsk.setText(item.text);} else {holder.tvAsk.setVisibility(View.GONE);holder.llAnswer.setVisibility(View.VISIBLE);holder.tvAnswer.setText(item.text);if (item.imageId != -1) {// 有图片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 LinearLayout llAnswer;public ImageView ivPic;}/*** 解析语音数据** @param resultString*/protected String parseData(String resultString) {Gson gson = new Gson();VoiceBean bean = gson.fromJson(resultString, VoiceBean.class);ArrayList<WSBean> ws = bean.ws;StringBuffer sb = new StringBuffer();for (WSBean wsBean : ws) {String text = wsBean.cw.get(0).w;sb.append(text);}return sb.toString();}}
标签:
原文地址:http://www.cnblogs.com/liuyu0529/p/4919365.html