我一直搞不清楚,有的手机支持TTS,有的不支持,但是需要下载什么东西才能让手机支持TTS呢,真是奇怪啊。。。。

 

下面是转的一篇文章,或许可以借鉴下。还有,google的有一个发音软件,貌似需要下载一个apk安装包,就可以发音了。

看来我偏向那个发音包,需要下载下demo看看哦。因为,他那个已经指明了下载哪个AKP就可以支持了。

 

 

Android ApiDemos示例解析(45):App->Text-To-Speech

分类: ApiDemo Android 教程   373人阅读  评论(1)  收藏  举报

从Android1.6(API Level 4)开始,Android平台开始支持文字到语音(TTS)功能,也就是“合成语音”,支持以声音方式读出文字。

目前Android TTS可以支持多种语言:English, French, German, Italian ,Spanish 等,也有公司提供了用于Android平台的中文TTS Engine。

TTS Engine 在读出文字前,需要知道使用哪种语言,比如“Paris”的发音,英语和法语发音就不同。因此TTS使用的语音库是跟语言相关的。在使用TTS之前需要调入相应的语音库。

尽管Android平台支持TTS,但具体的设备可能不自带某种语言的语音库,Android TTS可以查询需要的语音库是否存在,不在的户运行用户选择下载需要的语音库:

[java]  view plain copy print ?
  1. Intent checkIntent = new Intent();  
  2. checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);  
  3. startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);  


如果需要的语音库存在,则result code为CHECK_VOICE_DATA_PASS,表示TTS可以开始工作,否则可以通知用户下载指定的语音库。如果需要的语音库存在,则result code为CHECK_VOICE_DATA_PASS,表示TTS可以开始工作,否则可以通知用户下载指定的语音库。

[java]  view plain copy print ?
  1. private TextToSpeech mTts;  
  2. protected void onActivityResult(  
  3.  int requestCode, int resultCode, Intent data) {  
  4.  if (requestCode == MY_DATA_CHECK_CODE) {  
  5.  if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {  
  6.  // success, create the TTS instance  
  7.  mTts = new TextToSpeech(thisthis);  
  8.  } else {  
  9.  // missing data, install it  
  10.  Intent installIntent = new Intent();  
  11.  installIntent.setAction(  
  12.  TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);  
  13.  startActivity(installIntent);  
  14.  }  
  15.  }  
  16. }  

TextToSpeechActivity 介绍了TTS的一般用法,可以随机读出一个字符串数组中的文字。

TextToSpeech的构造函数 ,第一个参数可以使用当前Activity,第二个参数为TTS 初始化后回调函数onInit.

public TextToSpeech(Context context, TextToSpeech.OnInitListener listener)

例子中回调函数定义如下:

[java]  view plain copy print ?
  1. // Implements TextToSpeech.OnInitListener.  
  2. public void onInit(int status) {  
  3.  // status can be either TextToSpeech.SUCCESS or TextToSpeech.ERROR.  
  4.  if (status == TextToSpeech.SUCCESS) {  
  5.  // Set preferred language to US english.  
  6.  // Note that a language may not be available, and the result will indicate this.  
  7.  int result = mTts.setLanguage(Locale.US);  
  8.  // Try this someday for some interesting results.  
  9.  // int result mTts.setLanguage(Locale.FRANCE);  
  10.  if (result == TextToSpeech.LANG_MISSING_DATA ||  
  11.  result == TextToSpeech.LANG_NOT_SUPPORTED) {  
  12.  // Lanuage data is missing or the language is not supported.  
  13.  Log.e(TAG, "Language is not available.");  
  14.  } else {  
  15.  // Check the documentation for other possible result codes.  
  16.  // For example, the language may be available for the locale,  
  17.  // but not for the specified country and variant.  
  18.    
  19.  // The TTS engine has been successfully initialized.  
  20.  // Allow the user to press the button for the app to speak again.  
  21.  mAgainButton.setEnabled(true);  
  22.  // Greet the user.  
  23.  sayHello();  
  24.  }  
  25.  } else {  
  26.  // Initialization failed.  
  27.  Log.e(TAG, "Could not initialize TextToSpeech.");  
  28.  }  
  29. }  

status为TextToSpeech.SUCCESS表示TextToSpeech Engine成功初始化,然后设置语言为英语,如果本机带有英语的语音库,就可以开使使用speak来读出文本了。

下面代码从数组HELLOS中随机选择一句读出:

[java]  view plain copy print ?
  1. int helloLength = HELLOS.length;  
  2. String hello = HELLOS[RANDOM.nextInt(helloLength)];  
  3. mTts.speak(hello,  
  4.  TextToSpeech.QUEUE_FLUSH,  // Drop all pending entries in the playback queue.  
  5.  null);  

每个TTS Engine 使用一个队列用于合成语音,TextToSpeech.QUEUE_FLUSH意味着清除队列中内容,将本句放在队列的首位, 而TextToSpeech.QUEUE_ADD表示添加到队列的后面。


更多推荐