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



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

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


程序效果图:


简单的XML布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns: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>


识别

case R.id.bt_recognize:                    // 这是语言识别部分,最重要的实例化一个                    // RecognizerDialog并把你在官方网站申请的appid填入进去,非法id不能进行识别                    RecognizerDialog isrDialog = new RecognizerDialog(Voice1Activity.this, APPID);                    /*                     * 设置引擎目前支持五种 ”sms”:普通文本转写 “poi”:地名搜索 ”vsearch”:热词搜索                     * ”video”:视频音乐搜索 ”asr”:命令词识别                     */                    isrDialog.setEngine("sms", null, null);                    isrDialog.setListener(recoListener);                    isrDialog.show();                    break;

// 语言识别监听器,有两个方法    RecognizerDialogListener recoListener = new RecognizerDialogListener() {        @Override        public void onResults(ArrayList<RecognizerResult> results,                boolean isLast) {            // 新增加了一个ToggleButton tb,首先检查tb是否被按下,如果被按下才进行语言控制,没被按下就进行文字识别            if (tb.isChecked()) {                // doVoice方法就是进行识别                doVoice(results);            } else {                // 服务器识别完成后会返回集合,我们这里就只得到最匹配的那一项                text += results.get(0).text;                System.out.println(text);            }        }        // 首先迭代结果,然后获取每个结果,并进行对比,如果包含有特定字符串,那么就执行相应Intent跳转。        // 注意 凡是Intent能办到的(发邮件,跳到已安装应用,拨号,发短信,发彩信,浏览网页,播放多媒体),它就都能办到。        private void doVoice(ArrayList<RecognizerResult> results) {            Intent i = new Intent();            for (RecognizerResult result : results) {                if (result.text.contains("天气")) {                    // 天气界面的跳转                    i.setClass(Voice1Activity.this, Weather.class);                    startActivity(i);                } else if (result.text.contains("新闻")) {                    // 新闻界面的跳转                    i.setClass(Voice1Activity.this, News.class);                    startActivity(i);                } else if (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        public void onEnd(SpeechError error) {            if (error == null) {                // 完成后就把结果显示在EditText上                et.setText(text);            }        }    };


Speek

case R.id.bt_speek:                    // 这是语言合成部分 同样需要实例化一个SynthesizerDialog ,并输入appid                    SynthesizerDialog syn = new SynthesizerDialog(Voice1Activity.this, APPID);                    syn.setListener(new SynthesizerDialogListener() {                        @Override                        public void onEnd(SpeechError arg0) {                        }                    });                    // 根据EditText里的内容实现语音合成                    syn.setText(et.getText().toString(), null);                    syn.show();                    break;


后台Speek

 case R.id.bt_speek_bg:                    //这是后台朗读,实例化一个SynthesizerPlayer                    SynthesizerPlayer player = 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


转载请注明.

更多相关文章

  1. android ndk编译x264开源(用于android的ffmpeg中进行软编码)
  2. Android使用Retrofit进行网络请求
  3. haproxy根据客户端浏览器进行跳转
  4. [APP] Android(安卓)开发笔记 006-使用短信验证SDK进行短信验证
  5. Android(安卓)编程下通过 zipalign 对 APK 文件进行优化
  6. Android系统下如何在程序中对XML里面元素进行赋值
  7. android使用inSampleSize、inScaled、inDensity、inTargetDensit
  8. android运行真机运行offline
  9. android录音和得到音量

随机推荐

  1. Android(安卓)中的ANR 问题,响应灵敏性
  2. Android智能硬件开发心得总结(一)
  3. Linux 环境下Android(安卓)Tcpdump 抓取
  4. Android 版 Instagram 正式推出!
  5. android 资源文件学习
  6. Android UI 之TextView控件中可选择的属
  7. Android基础入门知识
  8. Android Bmob后端云—数据库、服务器!
  9. android 网络数据抓包
  10. Android零基础入门第16节:Android用户界面