Android语音播报、后台播报、语音识别



本文介绍使用讯飞语音实现语音播报、语音识别功能。

讯飞开放平台:http://www.xfyun.cn/index.php/default/index


程序效果图:


简单的XML布局

[html] view plain copy print ?
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical">
  6. <EditText
  7. android:id="@+id/et"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:editable="true"/>
  11. <Button
  12. android:id="@+id/bt_recognize"
  13. android:layout_width="fill_parent"
  14. android:layout_height="wrap_content"
  15. android:gravity="center"
  16. android:text="识别"/>
  17. <Button
  18. android:id="@+id/bt_speek"
  19. android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"
  21. android:gravity="center"
  22. android:text="Speek"/>
  23. <Button
  24. android:id="@+id/bt_speek_bg"
  25. android:layout_width="fill_parent"
  26. android:layout_height="wrap_content"
  27. android:gravity="center"
  28. android:text="后台Speek"/>
  29. <TextView
  30. android:textColor="@android:color/white"
  31. android:layout_width="wrap_content"
  32. android:layout_height="wrap_content"
  33. android:text="语音控制开关"/>
  34. <ToggleButton
  35. android:id="@+id/tb"
  36. android:layout_width="wrap_content"
  37. android:layout_height="wrap_content"/>
  38. </LinearLayout>


识别

[java] view plain copy print ?
  1. caseR.id.bt_recognize:
  2. //这是语言识别部分,最重要的实例化一个
  3. //RecognizerDialog并把你在官方网站申请的appid填入进去,非法id不能进行识别
  4. RecognizerDialogisrDialog=newRecognizerDialog(Voice1Activity.this,APPID);
  5. /*
  6. *设置引擎目前支持五种”sms”:普通文本转写“poi”:地名搜索”vsearch”:热词搜索
  7. *”video”:视频音乐搜索”asr”:命令词识别
  8. */
  9. isrDialog.setEngine("sms",null,null);
  10. isrDialog.setListener(recoListener);
  11. isrDialog.show();
  12. break;

[java] view plain copy print ?
  1. //语言识别监听器,有两个方法
  2. RecognizerDialogListenerrecoListener=newRecognizerDialogListener(){
  3. @Override
  4. publicvoidonResults(ArrayList<RecognizerResult>results,
  5. booleanisLast){
  6. //新增加了一个ToggleButtontb,首先检查tb是否被按下,如果被按下才进行语言控制,没被按下就进行文字识别
  7. if(tb.isChecked()){
  8. //doVoice方法就是进行识别
  9. doVoice(results);
  10. }else{
  11. //服务器识别完成后会返回集合,我们这里就只得到最匹配的那一项
  12. text+=results.get(0).text;
  13. System.out.println(text);
  14. }
  15. }
  16. //首先迭代结果,然后获取每个结果,并进行对比,如果包含有特定字符串,那么就执行相应Intent跳转。
  17. //注意凡是Intent能办到的(发邮件,跳到已安装应用,拨号,发短信,发彩信,浏览网页,播放多媒体),它就都能办到。
  18. privatevoiddoVoice(ArrayList<RecognizerResult>results){
  19. Intenti=newIntent();
  20. for(RecognizerResultresult:results){
  21. if(result.text.contains("天气")){
  22. //天气界面的跳转
  23. i.setClass(Voice1Activity.this,Weather.class);
  24. startActivity(i);
  25. }elseif(result.text.contains("新闻")){
  26. //新闻界面的跳转
  27. i.setClass(Voice1Activity.this,News.class);
  28. startActivity(i);
  29. }elseif(result.text.contains("短信")){
  30. //短信界面的跳转
  31. i.setAction(Intent.ACTION_VIEW);
  32. i.setType("vnd.android-dir/mms-sms");
  33. startActivity(i);
  34. }else{
  35. //如果没有相应指令就用Toast提示用户
  36. Toast.makeText(Voice1Activity.this,"无法识别",Toast.LENGTH_SHORT).show();
  37. }
  38. }
  39. }
  40. @Override
  41. publicvoidonEnd(SpeechErrorerror){
  42. if(error==null){
  43. //完成后就把结果显示在EditText上
  44. et.setText(text);
  45. }
  46. }
  47. };


Speek

[java] view plain copy print ?
  1. caseR.id.bt_speek:
  2. //这是语言合成部分同样需要实例化一个SynthesizerDialog,并输入appid
  3. SynthesizerDialogsyn=newSynthesizerDialog(Voice1Activity.this,APPID);
  4. syn.setListener(newSynthesizerDialogListener(){
  5. @Override
  6. publicvoidonEnd(SpeechErrorarg0){
  7. }
  8. });
  9. //根据EditText里的内容实现语音合成
  10. syn.setText(et.getText().toString(),null);
  11. syn.show();
  12. break;


后台Speek

[java] view plain copy print ?
  1. caseR.id.bt_speek_bg:
  2. //这是后台朗读,实例化一个SynthesizerPlayer
  3. SynthesizerPlayerplayer=SynthesizerPlayer.createSynthesizerPlayer(Voice1Activity.this,APPID);
  4. //设置语音朗读者,可以根据需要设置男女朗读,具体请看api文档和官方论坛
  5. player.setVoiceName("vivixiaoyan");//在此设置语音播报的人选例如:vivixiaoyan、vivixiaomei、vivixiaoqi
  6. player.playText(et.getText().toString(),"ent=vivi21,bft=5",null);
  7. break;



源码下载:http://download.csdn.net/download/gao_chun/8775975


转载请注明.

更多相关文章

  1. android 面向对象数据库 db40使用demo
  2. Android(安卓)LiveData Transformations
  3. 修改 Android(安卓)开机 LOGO
  4. Android的按键处理
  5. 使用air进行移动app开发常见功能和问题(二)
  6. android webkit 打开debug调试信息
  7. Android设备的识别
  8. Android编译问题:Only 64-bit build environments are supported
  9. Android(安卓)语音识别示例

随机推荐

  1. Android菜鸟历程7
  2. DES加密解密工具类
  3. Android(安卓)保存和回复应用状态
  4. SwipeRefreshLayout使用
  5. Android:ADT 17.0.0 发布
  6. android 获取wifi信息
  7. android上特效(源代码)
  8. 获取sd卡容量
  9. Unity Android(安卓)崩溃 处理
  10. ”Android(安卓)Application Framework F