Android使用科大讯飞实现语音播报、语音识别功能
16lz
2022-01-13
Android语音播报、后台播报、语音识别
本文介绍使用讯飞语音实现语音播报、语音识别功能。
讯飞开放平台:http://www.xfyun.cn/index.php/default/index
程序效果图:
简单的XML布局
[html] view plain copy print ?
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical">
- <EditText
- android:id="@+id/et"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:editable="true"/>
- <Button
- android:id="@+id/bt_recognize"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="识别"/>
- <Button
- android:id="@+id/bt_speek"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="Speek"/>
- <Button
- android:id="@+id/bt_speek_bg"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="后台Speek"/>
- <TextView
- android:textColor="@android:color/white"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="语音控制开关"/>
- <ToggleButton
- android:id="@+id/tb"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- </LinearLayout>
识别
[java] view plain copy print ?
- caseR.id.bt_recognize:
- //这是语言识别部分,最重要的实例化一个
- //RecognizerDialog并把你在官方网站申请的appid填入进去,非法id不能进行识别
- RecognizerDialogisrDialog=newRecognizerDialog(Voice1Activity.this,APPID);
- /*
- *设置引擎目前支持五种”sms”:普通文本转写“poi”:地名搜索”vsearch”:热词搜索
- *”video”:视频音乐搜索”asr”:命令词识别
- */
- isrDialog.setEngine("sms",null,null);
- isrDialog.setListener(recoListener);
- isrDialog.show();
- break;
[java] view plain copy print ?
- //语言识别监听器,有两个方法
- RecognizerDialogListenerrecoListener=newRecognizerDialogListener(){
- @Override
- publicvoidonResults(ArrayList<RecognizerResult>results,
- booleanisLast){
- //新增加了一个ToggleButtontb,首先检查tb是否被按下,如果被按下才进行语言控制,没被按下就进行文字识别
- if(tb.isChecked()){
- //doVoice方法就是进行识别
- doVoice(results);
- }else{
- //服务器识别完成后会返回集合,我们这里就只得到最匹配的那一项
- text+=results.get(0).text;
- System.out.println(text);
- }
- }
- //首先迭代结果,然后获取每个结果,并进行对比,如果包含有特定字符串,那么就执行相应Intent跳转。
- //注意凡是Intent能办到的(发邮件,跳到已安装应用,拨号,发短信,发彩信,浏览网页,播放多媒体),它就都能办到。
- privatevoiddoVoice(ArrayList<RecognizerResult>results){
- Intenti=newIntent();
- for(RecognizerResultresult:results){
- if(result.text.contains("天气")){
- //天气界面的跳转
- i.setClass(Voice1Activity.this,Weather.class);
- startActivity(i);
- }elseif(result.text.contains("新闻")){
- //新闻界面的跳转
- i.setClass(Voice1Activity.this,News.class);
- startActivity(i);
- }elseif(result.text.contains("短信")){
- //短信界面的跳转
- i.setAction(Intent.ACTION_VIEW);
- i.setType("vnd.android-dir/mms-sms");
- startActivity(i);
- }else{
- //如果没有相应指令就用Toast提示用户
- Toast.makeText(Voice1Activity.this,"无法识别",Toast.LENGTH_SHORT).show();
- }
- }
- }
- @Override
- publicvoidonEnd(SpeechErrorerror){
- if(error==null){
- //完成后就把结果显示在EditText上
- et.setText(text);
- }
- }
- };
Speek
[java] view plain copy print ?
- caseR.id.bt_speek:
- //这是语言合成部分同样需要实例化一个SynthesizerDialog,并输入appid
- SynthesizerDialogsyn=newSynthesizerDialog(Voice1Activity.this,APPID);
- syn.setListener(newSynthesizerDialogListener(){
- @Override
- publicvoidonEnd(SpeechErrorarg0){
- }
- });
- //根据EditText里的内容实现语音合成
- syn.setText(et.getText().toString(),null);
- syn.show();
- break;
后台Speek
[java] view plain copy print ?
- caseR.id.bt_speek_bg:
- //这是后台朗读,实例化一个SynthesizerPlayer
- SynthesizerPlayerplayer=SynthesizerPlayer.createSynthesizerPlayer(Voice1Activity.this,APPID);
- //设置语音朗读者,可以根据需要设置男女朗读,具体请看api文档和官方论坛
- player.setVoiceName("vivixiaoyan");//在此设置语音播报的人选例如:vivixiaoyan、vivixiaomei、vivixiaoqi
- player.playText(et.getText().toString(),"ent=vivi21,bft=5",null);
- break;
源码下载:http://download.csdn.net/download/gao_chun/8775975
转载请注明.
更多相关文章
- android 面向对象数据库 db40使用demo
- Android(安卓)LiveData Transformations
- 修改 Android(安卓)开机 LOGO
- Android的按键处理
- 使用air进行移动app开发常见功能和问题(二)
- android webkit 打开debug调试信息
- Android设备的识别
- Android编译问题:Only 64-bit build environments are supported
- Android(安卓)语音识别示例