android是Google推出的嵌入式操作系统,有着广泛的根基与基础。最近一个中关村的一个CEO朋友送了一个摩托罗拉android手机,想玩玩语音技术过把瘾。如何用android开发语音技术应用呢,本人下载的最新SDK,android-2.1_r01-windows,

废话少说,看看老夫一展身手,虽然我本人精通C/C++,.Net,但是玩起java也是一点都不含糊的,老夫我的android手机提前安装了

Linux开源语音识别引擎simon,本人已经完全移植成功,英文识别率非常高只比nuance差一点

Linux开源语音朗读引擎espeak, ,本人已经完全移植成功,英文朗读只比于科大讯飞差一点

先简单介绍下语音朗读技术

详细代码见注释

import android.app.Activity; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.util.Log; import android.view.View; import android.widget.Button; import com.example.android.apis.R; import java.util.Locale; import java.util.Random; public class TextToSpeechActivity extends Activity implements TextToSpeech.OnInitListener { private static final String TAG = "TextToSpeech"; private TextToSpeech mTts; private Button mAgainButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.text_to_speech); //初始化文本到语音。这是一个异步操作。 //OnInitListener(第二个参数)被调用初始化后完成。 mTts = new TextToSpeech(this, this // 创建接口初始化 ); //禁用按钮的布局。 //这将被启用后的TTS引擎的初始化 mAgainButton = (Button) findViewById(R.id.again_button); mAgainButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { sayHello(); } }); } public void onDestroy() { // 删除对象退出 if (mTts != null) { mTts.stop(); mTts.shutdown(); } super.onDestroy(); } // 实现TextToSpeech.OnInitListener public void onInit(int status) { // 返回成功或者失败 if (status == TextToSpeech.SUCCESS) { //设置首选语言为美国英语。 //注意语言可能无法使用,其结果将表明这一点。 int result = mTts.setLanguage(Locale.US); // 定义结果 mTts.setLanguage(Locale.FRANCE); if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { // 语言不受支持 Log.e(TAG, "Language is not available."); } else { //检查其他可能的结果代码文件。 //例如,语言可能是可用的语言环境,但不是指定的国家和变体。 //TTS引擎已成功初始化。 //允许用户按下按钮的应用程序再次发言。 mAgainButton.setEnabled(true); // 开始调用 sayHello(); } } else { // Initialization failed. Log.e(TAG, "Could not initialize TextToSpeech."); } } private static final Random RANDOM = new Random(); private static final String[] HELLOS = { "Hello", "yincheng", "ShanDongUniversity", "microsoft", "google is great", "My name is yincheng!" }; private void sayHello() { // 随机选择朗读文本 int helloLength = HELLOS.length; String hello = HELLOS[RANDOM.nextInt(helloLength)]; mTts.speak(hello, TextToSpeech.QUEUE_FLUSH, null); } }

android语音识别是通过一个Intent的Action动作来完成的。主要有以下两种模式:

ACTION_RECOGNIZE_SPEECH:一般语音识别,主要用于语音控制。

ACTION_WEB_SEARCH:网络搜索识别,主要用于语音搜索

我们先来分析下语音控制,

import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.speech.RecognizerIntent; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class VoiceRecognition extends Activity implements OnClickListener { private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; private ListView mList; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.voice_recognition); Button speakButton = (Button) findViewById(R.id.btn_speak); mList = (ListView) findViewById(R.id.list); // 检查是否有语音识别活动 PackageManager pm = getPackageManager(); List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); if (activities.size() != 0) { speakButton.setOnClickListener(this); } else { speakButton.setEnabled(false); speakButton.setText("Recognizer not present"); } } public void onClick(View v) { if (v.getId() == R.id.btn_speak) { startVoiceRecognitionActivity(); } } private void startVoiceRecognitionActivity() { //借助Intent传递语音识别的模式 Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); //语言模式和自由形式的语音识别 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); //提示语音开始 intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo"); //开始语音识别 startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); } //当语音结束时的回调函数onActivityResult @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { // 取得语音结果,加入一个选择判断就可以语音控制 ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches)); } super.onActivityResult(requestCode, resultCode, data); } }

然后我们来亲自实践一个语音搜索,创建一个webview 来进行搜索,就是完整的语音搜索了,结合上述的语音合成,那简直牛的很,

import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.speech.RecognizerIntent; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class VoiceRecognition extends Activity implements OnClickListener { private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; private ListView mList; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.voice_recognition); Button speakButton = (Button) findViewById(R.id.btn_speak); mList = (ListView) findViewById(R.id.list); // 检查是否有语音识别活动 PackageManager pm = getPackageManager(); List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); if (activities.size() != 0) { speakButton.setOnClickListener(this); } else { speakButton.setEnabled(false); speakButton.setText("Recognizer not present"); } } public void onClick(View v) { if (v.getId() == R.id.btn_speak) { startVoiceRecognitionActivity(); } } private void startVoiceRecognitionActivity() { //借助Intent传递语音识别的模式 ,注明语音搜索识别模式 Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); //语言模式和自由形式的语音识别 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); //提示语音开始 intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo"); //开始语音识别 startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); } //当语音结束时的回调函数onActivityResult @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { // 取得语音结果,加入一个选择判断就可以语音控制 ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches)); //进行访问网页的语音搜索,可以结合上述例子实现语音合成朗读,他妈的,太爽了哈 WebView webView = (WebView) findViewById(R.id.webView); // 配置浏览器,使其可支持 JavaScript WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); // 清除浏览器缓存 webView.clearCache(true); // 指定浏览器地址,就是google搜索关键词的访问格式,检索语音结果 webView.loadUrl("http://www.google.com.hk/search?hl=zh-CN&source=hp&q="+data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)+"&meta=&aq=f&aqi=g10&aql=&oq=&gs_rfai="); // 指定浏览器需要解析的 html 数据 ,可以结合语音朗读读出 // webView.loadData("<a href="http://webabcd.cnblogs.com/" mce_href="http://webabcd.cnblogs.com/">webabcd</a>", "text/html", "utf-8"); } super.onActivityResult(requestCode, resultCode, data); } }

至此大功告成,本文未经许可,不准转载。否则侵权后果自负。

需要源代码(Andrroid语音控制拨号sample,Andrroid语音自动搜索并朗读结果的语音浏览器sample),请在本人CSDN博客留言,源码将在4.12日VS2010发布大会那一天统一发送源码(仅发送前200楼),请大家踊跃留下Email.后面排队的将等到5.20日。

作为语音技术业内专家,提供语音技术开发应用企业咨询顾问,有需要者请联系MSN:yincheng01@163.com,

策划有一套云计算语音交互移动3G商业计划正在实施已经获得天使投资,在移动3G上面有想法的站长们可以联系我共创语音3G时代!

另外本人正在参加Google Andrroid软件开发大赛(作品为基于人工智能与语音交互的3D宠物),希望有空大家去捧场!

http://code.google.com/intl/zh-CN/android/

http://code.google.com/intl/zh-CN/android/adc/

本人完成作品时,得到中国科学院陈博士后在人工智能与多线程并行计算上的支持,在此特别感谢!

也特别感谢中国科学院著名的图形学天才专家颜博士后完成了3D智能宠物的所有表情与动作,其效果之炫丽简直是惊天地,泣鬼神!

基于Google的嵌入式系统android开发语音技术(语音搜索,语音朗读文章,语音控制)相关推荐

  1. Windows CE嵌入式系统程序开发

    <Windows CE嵌入式系统程序开发> 基本信息 作者: 胡文    冯剑    姜海涛    胡玥    丛书名: 单片机与嵌入式丛书 出版社:机械工业出版社 ISBN:978711 ...

  2. 嵌入式系统实验 构建嵌入式Linux系统,《嵌入式系统与开发》构建嵌入式Linux系统-实验报告.doc...

    <嵌入式系统与开发>构建嵌入式Linux系统-实验报告 <嵌入式数据库sqlite移植及使用> 实验报告 学生姓名: 陈 彤 学 号: 1座机电话号码 专业班级: 130044 ...

  3. 在linux下进行嵌入式系统设计,一种应用于测控系统的基于Linux的嵌入式系统的设计...

    描述 1.前言 随着网络控制技术的快速发展,工业以太网得到逐步完善,在工业控制领域获得越来越广泛的应用.工业以太网使用了TCP/IP协议,便于联网,并具有高速控制网络的优点.随着32位嵌入式CPU价格 ...

  4. 嵌入式系统linux开发流程,嵌入式系统的定义及嵌入式系统的开发流程

    描述 1.嵌入式系统的定义 以应用为中心,以计算机技术为基础,且软硬件可裁减,适应应用系统对功能.可靠性.成本.体积.功耗的严格要求的专用计算机系统. 2.嵌入式系统的组成 硬件部分:嵌入式微处理器. ...

  5. 基于ARM的嵌入式系统外围硬件设计

    基于ARM的嵌入式系统外围硬件设计 一.嵌入式接口分类 (1)基本嵌入式接口 (2)嵌入式网络接口 (3)标准协议接口 (4)无线通信接口 二.基本嵌入式接口 1.实时时钟 (1)功能:专用的电路单元 ...

  6. [看门狗]基于Linux的嵌入式系统全程喂狗策略

    https://www.cnblogs.com/aaronLinux/p/8073898.html https://github.com/aaronRong [看门狗]基于Linux的嵌入式系统全程喂 ...

  7. 嵌入式系统的开发流程

    嵌入式系统的概念: 以应用为中心,以计算机技术为基础,且软硬件可裁减,适应应用系统对功能.可靠性.成本.体积.功耗有严格要求的专用计算机系统. 嵌入式系统与普通PC机的对比: 软件上的对比: 名称 嵌 ...

  8. 《嵌入式系统原理与接口技术》第1章 绪论1.1 嵌入式系统概述

    点击查看本书目录与写作说明 课程比较多,一直没太多的时间写,打总更新一下,欢迎提出宝贵意见. 第1章 绪论 1.1 嵌入式系统概述 嵌入式系统的飞速发展已经极大的改变了我们的生活,从风靡全球的ipho ...

  9. 《嵌入式系统原理与接口技术》——嵌入式系统接口应用基础

    本文为我负责编写的电子工业出版社出版的<嵌入式系统原理与接口技术>一书第七章部分,这里整理的仍然是修改稿,供需要的同学参考,本书为普通高等教育"十二五"规划教材,电子信 ...

最新文章

  1. 如何连接本地mysql+设置无密码登录
  2. Java 如何实现二维码?
  3. MySQL绿色版的安装
  4. 【重磅收藏】智源发布《人工智能的认知神经基础白皮书》
  5. java随机动态分组_Java将一组数随机分组
  6. Mybatis解析动态sql原理分析
  7. win7计算机管理禁用,Win7任务管理器已被系统管理员禁用怎么办
  8. 用html编写你好,02 - HTML5第一个项目:HelloWorld!(收藏)
  9. Docker学习总结(63)——容器并不能解决一切问题
  10. fedora学习笔记 6:浅谈linux文件系统
  11. HashKey TokenGazer | 去中心化身份(DID)研究报告
  12. 基于AP6212实现 Airkiss NDK编程
  13. 机器学习基础---回归方法---支持向量回归(SVR)
  14. Wordpress 网站搭建及性能监控方法详解!
  15. 一起学libcef--一个应用libcef的简单例子(windows程序)
  16. 菁英杯计算机能力大赛试题,“第四届全国大学生计算机系统能力培养大赛(龙芯杯)”决赛结果...
  17. Python0基础(上)——期末不挂科
  18. 回顾小米公司的成功过程,用五个层次的问题阐述,小米的成功基础、小米的爆品特点、小米生态链模式的根本原因。
  19. Spark(四)— Spark Streaming
  20. AOP技术学习之AspectJ

热门文章

  1. Hololens第三人称视角Spectator View!
  2. BotHunter安装
  3. UVA 673-Parentheses Balance
  4. 别在再满屏的 if、else 了,试试策略模式,真香!!
  5. NewBing国内成功申请操作教程(三步搞定)
  6. 三星note20u计算机功能,三星Note20和Note20U区别_三星Note20和Note20U配置参数-太平洋IT百科...
  7. 【编译原理-练习题-3】语法分析大题
  8. Consumer closed input channel or an error occurred. events=0x8
  9. linux ssh x11,使用SSH的X11 Forwarding远程执行GUI程序
  10. win7下安装vs2008失败——解决方法