Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 593|回复: 0

开发交流:Android 语音识别和自动朗读

[复制链接]

该用户从未签到

发表于 2011-10-24 10:02:19 | 显示全部楼层 |阅读模式
自动朗读

这个比较容易,直接在模拟器上就可以测试,但是不支持中文,比较悲剧。但是我在EOE看到一个朋友写的,他想到了一种解决办法,我按他说的测试了,但还是不支持中文。因为要准备笔试了,所以没时间去测试了,大家自己拿代码测试去吧。


TextToSpeech简称 TTS,是Android 1.6版本中比较重要的新功能。将所指定的文本转成不同语言音频输出。它可以方便的嵌入到游戏或者应用程序中,增强用户体验。
  在讲解TTS API和将这项功能应用到你的实际项目中的方法之前,先对这套TTS引擎有个初步的了解。

  对TTS资源的大体了解:
  TTS engine依托于当前Android Platform所支持的几种主要的语言:English、French、German、Italian和Spanish五大语言(暂时没有我们伟大的中文,至少Google的科学家们还没有把中文玩到炉火纯青的地步,先易后难也是理所当然,哈哈,还是我们国家的文字强大,外国人学不会。)TTS可以将文本随意的转换成以上任意五种语言的语音输出。与此同时,对于个别的语言版本将取决于不同的时区,例如:对于English,在TTS中可以分别输出美式和英式两种不同的版本(由此看出Google的做事风格真够细致,而正因为如此估计Google不加入中文的另外一种理由是中文的方言太多了)。
  能支持如此庞大的数据量,TTS 引擎对于资源的优化采取预加载的方法。根据一系列的参数信息(参数的用法将在后边有详细的介绍)从库中提取相应的资源,并加载到当前系统中。

  尽管当前大部分加载有Android操作系统的设备都通过这套引擎来提供TTS功能,但由于一些设备的存储空间非常有限而影响到TTS无法最大限度的发挥功能,算是当前的一个瓶颈。为此,开发引入了检测模块,让利用这项技术的应用程序或者游戏针对于不同的设备可以有相应的优化调整,从而避免由于此项功能的限制,影响到整个应用程序的使用。比较稳妥的做法是让用户自行选择是否有足够的空间或者需求来加载此项资源,下边给出一个标准的检测方法:
  Intent checkIntent = new Intent();
    checkIntent.setAction(TextToSpeech.Engine.ACTION_C HECK_TTS_DATA);
  startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
  如果当前系统允许创建一个 “android.speech.tts.TextToSpeech” 的彩虹简谱字库,下载Object, 说明已经提供TTS功能的支持,将检测返回结果中给出“ CHECK_VOICE_DATA_PASS ”的标记。如果系统不支持这项功能,那么用户可以选择是否加载这项功能,从而让设备支持输出多国语言的语音功能“Multi-lingual Talking”。“ACTION_INSTALL_TTS_DATA” intent将用户引入Android market中的TTS下载界面。下载完成后将自动完成安装,下边是实现这一过程的完整代码 (android res) :

   private TextToSpeech mTts;
  protected void onActivityResult(
  int requestCode, int resultCode, Intent data) {
  if (requestCode == MY_DATA_CHECK_CODE) {
  if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
  // sess, create the TTS instance
  mTts = new TextToSpeech(this, this);
  } else {
  // missing data, install it
  Intent installIntent = new Intent();
  installIntent.setAction(
  TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
   startActivity(installIntent);
  }
  }
  }

  TextToSpeech实体和OnInitListener都需要引用当前Activity的Context作为构造参数。 OnInitListener()的用处是通知系统当前TTS Engine已经加载完成,并处于可用状态。
  
根据需求设置语言参数:
  早在Google I/O大会上,官方给出了一段关于应用这项功能的鲜活体验,将翻译结果直接通过五种不同国家语言的语音输出。加载语言的方法非常简单:
  mTts.setLanguage(Locale.US);
  上边代码表示当前TTS实体加载美式英语。其参数并没有指示某种语言的名称,而是利用国家代码来表示,这样做的好处是不但可以确定语言的选择,而且可以根据地区的不同而有所区别。例如:英语作为最广泛被应用的语种,在多个不同的地区都有一定的差别。判断当前系统是否支持某个地区的语言资源,可以通过调用isLanguageAvailable()方法的返回值,根据返回值的描述来选择正确的处理方式。让应用某些绚丽功能的应用程序更加健壮,这个是贯穿整个开发过程都要考虑的技术环节。下边是一些应用实例 (androidres) :
  mTts.isLanguageAvailable(Locale.UK))
   mTts.isLanguageAvailable(Locale.FRANCE))
   mTts.isLanguageAvailable(new Locale("spa", "ESP")))
  如果返回值是“ TextToSpeech.LANG_COUNTRY_AVAILABLE ” 说明所选择的地区被包含在当前TTS系统中。如果系统中已经创建了TTS实体,那么可以利用isLanguageAvailable()方法来替代 Start “ACTION_CHECK_TTS_DATA ” intent 检测。当无法找到任何可用资源匹配所指定的参数时,将会返回“ TextToSpeech.LANG_MISSING_DATA ”的结果。下边给出另外两个返回其它不同状态信息的例子:
   mTts.isLanguageAvailable(Locale.CANADA_FRENCH))
   mTts.isLanguageAvailable(new Locale("spa"))
  两个语句的返回值均为“ TextToSpeech.LANG_AVAILABLE ” 。第一个是检测当前系统是否支持加拿大语,由于系统在资源库中无法找到这个地区的法语分支,其含义是仅支持这项语言(法语),而不支持当前紫光 v4.0下载地区的语言分支。

  另外,相比于上面强制用户应用预定的语音设置,更加提倡利用Locale.getDefault() 方法根据用户默认的地区设置来选择合适的语言库。

  执行Speak的具体方法:

  根据上边的介绍,基本实现了 TextToSpeech的初始化和参数配置。下面是一个有关闹钟的应用实例,利用Speak()方法可以直接在应用程序中发挥强大的语音功能。没错,用起来就是这么简单:
  String myText1 = "This Translation is from androidRes";
  String myText2 = "I hope so, because it's time to wake up.";
  mTts.speak(myText1, TextToSpeech.QUEUE_FLUSH, null);
  mTts.speak(myText2, TextToSpeech.QUEUE_ADD, null);
  
TTS Engine的工作原理:

  每个独立的应用程序都可以单独创建一个TTS实体,而他们需要执行的语音消息列队(Queue)都统一由TTS Engine管理和语音合成。

  名词解释:
  synthesize [sn
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:02:24 | 显示全部楼层

Re:开发交

已下载过一个中文朗读软件,大小才几十K,好象叫“听书”。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:02:27 | 显示全部楼层

Re:开发交

该软件只支持TXT文本朗读
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:02:29 | 显示全部楼层

Re:开发交

由于该软件太小,估计是调用了android系统的TTS
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:02:32 | 显示全部楼层

Re:开发交

有兴趣的朋友不妨反编译看看
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:02:38 | 显示全部楼层

Re:开发交

如果需要的朋友较多,我将发贴提供大家下载
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:02:43 | 显示全部楼层

Re:开发交

好东西啊。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 01:26 , Processed in 0.414484 second(s), 45 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表