和QQ微信语音聊天的功能差不多,模仿一个微信聊天页面,可以进行语音通话,然后根据说的话进行不同的回复,例如你说的话里带美女,两个字,就会回复你一张美女的照片,你说的话里带唐诗,就可以回复你一首唐诗,并且可以语音说出来。
附下如下代码,需要导入安徽科大讯飞的语音识别的jar包,并且做一些初始化。
1.mainActivity的代码,实现了语音识别,语音说话等
package com.example; import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.ScrollView; import android.widget.Scroller; import com.iflytek.speech.RecognizerResult; import com.iflytek.speech.SpeechConfig.RATE; import com.iflytek.speech.SpeechError; import com.iflytek.speech.SynthesizerPlayer; import com.iflytek.speech.SynthesizerPlayerListener; import com.iflytek.ui.RecognizerDialog; import com.iflytek.ui.RecognizerDialogListener; /** * 语音识别的小demo,可以根据说的话发送不同的东西 * @author liming * */ public class MainActivity extends Activity implements RecognizerDialogListener, OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); initView(); initClass(); } private void initClass() { view = new UpdateView(this,scrolllayout); } private void initView() { //initPlayer(); Button voice_start = (Button) findViewById(R.id.voice_start); voice_start.setOnClickListener(this); scrolllayout = (ScrollView) findViewById(R.id.scolllayout); } public void initPlayer(String result) { SynthesizerPlayer player = SynthesizerPlayer.createSynthesizerPlayer(this, "appid=5212ef0a"); player.playText(result , null, new SynthesizerPlayerListener() { @Override public void onPlayResumed() { // TODO Auto-generated method stub } @Override public void onPlayPercent(int arg0, int arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPlayPaused() { // TODO Auto-generated method stub } @Override public void onPlayBegin() { // TODO Auto-generated method stub } @Override public void onEnd(SpeechError arg0) { // TODO Auto-generated method stub } @Override public void onBufferPercent(int arg0, int arg1, int arg2) { // TODO Auto-generated method stub } }); player.setSampleRate(RATE.rate16k); player.setVolume(100); player.setBackgroundSound(null); player.setSpeed(50); player.setVoiceName("vixr"); } // public void click(View view) { // // } public void initDialog(){ RecognizerDialog dialog = new RecognizerDialog(this, "appid=5212ef0a"); dialog.setListener(this); // 设置采样率 dialog.setSampleRate(RATE.rate16k); dialog.show(); } private StringBuffer sb = new StringBuffer(); private ScrollView scrolllayout; private UpdateView view; @Override public void onEnd(SpeechError error) { if(error == null){ System.out.println(sb.toString()); view.update(sb.toString()); MyAsyncTask task = new MyAsyncTask(sb.toString(),this,scrolllayout,view); } sb.setLength(0); } @Override public void onResults(ArrayList<RecognizerResult> results, boolean arg1) { if (results != null) { for (RecognizerResult result : results) { sb.append(result.text); } } } @Override public void onClick(View v) { initDialog(); } }
2.这个是进行更新View的类负责把说的话更新到view上去.
package com.example; import java.util.Random; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; public class UpdateView { private MainActivity mainActivity; private ScrollView scrolllayout; private String result; private LinearLayout base_layout; public UpdateView(MainActivity mainActivity, ScrollView scrolllayout) { this.mainActivity = mainActivity; this.scrolllayout = scrolllayout; base_layout = (LinearLayout) scrolllayout .findViewById(R.id.base_layout); } public void update(String result) { this.result = result; View view = View.inflate(mainActivity, R.layout.list_say_me_item, null); TextView message = (TextView) view .findViewById(R.id.messagedetail_row_text); message.setText(result); TextView date = (TextView) view .findViewById(R.id.messagedetail_row_date); date.setText(CommonUtil.getStringDate()); base_layout.addView(view); mainActivity.initPlayer(result); scrolllayout.post(new Runnable() { @Override public void run() { scrolllayout.fullScroll(ScrollView.FOCUS_DOWN); } }); } public void updateMM(Answer result, String texts) { View view = View.inflate(mainActivity, R.layout.list_say_she_mm_item, null); ImageView image = (ImageView) view.findViewById(R.id.image_mm); if (result != null) { image.setImageResource(result.getMm()); } TextView text = (TextView) view .findViewById(R.id.messagedetail_row_text); text.setText(texts); base_layout.addView(view); mainActivity.initPlayer(texts); scrolllayout.post(new Runnable() { @Override public void run() { scrolllayout.fullScroll(ScrollView.FOCUS_DOWN); } }); } }
3.这是异步加载数据的类,放在子线程中执行。
package com.example; import java.util.ArrayList; import java.util.List; import java.util.Random; import android.os.AsyncTask; import android.widget.ScrollView; public class MyAsyncTask { private String result; private MainActivity mainActivity; private ScrollView scrolllayout; private UpdateView updateView; public MyAsyncTask(String result,MainActivity mainActivity,ScrollView scrolllayout,UpdateView updateView) { this.result = result; this.mainActivity = mainActivity; this.scrolllayout = scrolllayout; this.updateView = updateView; new QueryAsyncTask().execute(result); } private class QueryAsyncTask extends AsyncTask<String, Void, Answer>{ @Override protected Answer doInBackground(String... params) { String str = params[0]; Answer answer = getMMPic(str); return answer; } @Override protected void onPostExecute(Answer result) { super.onPostExecute(result); if(result != null){ if(Answer.MM_TYPE == result.getType()){ String[] texts = mainActivity.getResources().getStringArray(R.array.mm); Random rand = new Random(); int index = rand.nextInt(texts.length); updateView.updateMM(result,texts[index]); }else if(Answer.POETREY_TYPE == result.getType()){ String[] texts = mainActivity.getResources().getStringArray(R.array.tang_poetry); Random rand = new Random(); int index = rand.nextInt(texts.length); updateView.updateMM(result,texts[index]); } } } } public Answer getMMPic(String str) { if(str.contains("美女") || str.contains("妹子")){ int mm = initPic(); Answer answer = new Answer(); answer.setMm(mm); answer.setType(Answer.MM_TYPE); return answer; }else if(str.contains("唐诗")){ Answer answer = new Answer(); answer.setType(Answer.POETREY_TYPE); return answer; } return null; } private int initPic() { List<Integer> list = new ArrayList<Integer>(); list.add(R.drawable.mm0); list.add(R.drawable.mm1); list.add(R.drawable.mm2); list.add(R.drawable.mm13); list.add(R.drawable.mm12); list.add(R.drawable.mm15); list.add(R.drawable.mm16); Random rand = new Random(); return list.get(rand.nextInt(list.size())); } }
4,算是一个javaBean,将获得到的数据封装到这个Bean中
package com.example; public class Answer { public static final int MM_TYPE = 1; public static final int POETREY_TYPE = 2; private int mm; private int type; public int getMm() { return mm; } public void setMm(int mm) { this.mm = mm; } public int getType() { return type; } public void setType(int type) { this.type = type; } }
相关推荐
unity + 讯飞语音识别插件 webgl版本
基于讯飞的语音识别代码。做到语音转文字,文字转语音等功能。
资源中含有使用Unity做的 讯飞语音识别+唤醒的整套Demo 使用Unity接入的讯飞语音SDK 包中含有Unity的工程、AndroidStudio的工程和成品apk
freeswitch对接讯飞语音识别模块
C#讯飞语音识别代码,讯飞语音识别,讯飞C#语音sdk,C#语音识别
Unity 接入讯飞语音识别包,实现语音识别,包含Unity 项目工程和Android安装包
讯飞语音功能介绍: 就论国内的语音识别来说,由科大讯飞推出的安卓版讯飞输入法可谓是首屈一指的,其的语音库、识别度都高达90%以上(前提是说话要清楚) 科大讯飞之前推出过windowspc端的讯飞输入法(语音词库及...
unity写的讯飞语音识别合成与评测功能,走的是webapi,连接讯飞WebSocket服务器没有接入任何sdk,也没有多余插件,开发工具unity2019.3.6 ,真正实现了跨平台,不用在每个平台重新接入sdk这么麻烦了!
源码描述: 一、菜单功能 1、实现C# 调用科大讯飞语音识别和语音合成API 2、实现基本的语音识别和语音播报 二、注意事项 1、开发环境为Visual Studio 2012,无数据库,使用.net 4.0开发。
unity讯飞SDK语音识别demo(windows平台),工程中导入自己SDK中的msc,脚本中只需要把appid改成自己的就行,不会的可以看我的博客
采用了讯飞的官方sdk,实现了点击按钮进行语音的识别,并把识别到的内容展示到EditText,可以识别方言以及英文,请用android studio开发工具打开
讯飞语音识别 HTML5
基于讯飞的语音转文字,原来的那个包被下载次数太多分数已经超高了,所以新发一版,内容一样
安卓讯飞语音识别最简demo实现,只有语音识别功能,可以作为参考
使用unity3d软件实现了讯飞语音识别功能,并进行了sqlite数据库的检索,得到相应的结果。
Nao机器人使用的讯飞语音识别
本Demo集成了讯飞的语音听写SDK,可以高精度在线识别语音
在网上找了很多,看不太懂,这个很详细,希望能帮到你们