Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1033412
  • 博文数量: 146
  • 博客积分: 3444
  • 博客等级: 中校
  • 技术积分: 1602
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-21 15:18
文章分类

全部博文(146)

文章存档

2014年(9)

2013年(3)

2012年(6)

2011年(44)

2010年(38)

2009年(46)

分类: 嵌入式

2011-12-30 16:02:34

创建一个Android工程,工程名为AndroidTTSDemoFirst,其中SDK必须选择1.6版本及以上。

其中Main.xml文件很简单,如下所示:

  1. xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android=""  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.     <EditText android:id="@+id/inputText"   
  8.                 android:hint="Input the text here!"   
  9.                 android:layout_width="fill_parent"   
  10.                 android:layout_height="wrap_content">  
  11.                 EditText>  
  12.     <Button android:text="Speak"   
  13.                 android:id="@+id/speakBtn"   
  14.                 android:layout_width="wrap_content"   
  15.                 android:layout_height="wrap_content"  
  16.                 android:layout_gravity="center_horizontal"  
  17.                 android:enabled="false"  
  18.                 >Button>  
  19. LinearLayout>  

Java文件的编写:

要使用TTS得实现OnInitListener接口

  1. public class AndroidTTSDemoFirst extends Activity implements OnInitListener {  
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.     }  
  8.   //实现TTS初始化接口   
  9.     @Override  
  10.     public void onInit(int status) {  
  11.         // TODO Auto-generated method stub   
  12.           
  13.     }  
  14. }  

接着定义好下面要用到的几个变量:

  1. private EditText inputText = null;  
  2. private Button speakBtn = null;  
  3.    private static final int REQ_TTS_STATUS_CHECK = 0;  
  4.    private static final String TAG = "TTS Demo";  
  5. private TextToSpeech mTts;  

虽然安装Android1.6版本及之后的Android机器都默认安装了TTS引擎,但某些设备可能会因为存储容量的限制而缺少安装和语言对应的资源文件,因此在使用TTS前,得先要检查是否安装了TTS语言数据,在onCreate函数中添加以下内容:

  1. //检查TTS数据是否已经安装并且可用   
  2.   Intent checkIntent = new Intent();  
  3.   checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);  
  4.   startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK);  

这里启动一个新的Intent去检查TTS数据是否已经安装,我们根据其返回的结果进行处理,如下所示:

  1. protected  void onActivityResult(int requestCode, int resultCode, Intent data) {  
  2.         if(requestCode == REQ_TTS_STATUS_CHECK)  
  3.         {  
  4.             switch (resultCode) {  
  5.             case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS:  
  6.                 //这个返回结果表明TTS Engine可以用   
  7.             {  
  8.                 mTts = new TextToSpeech(thisthis);  
  9.                 Log.v(TAG, "TTS Engine is installed!");  
  10.                   
  11.             }  
  12.                   
  13.                 break;  
  14.             case TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA:  
  15.                 //需要的语音数据已损坏   
  16.             case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA:  
  17.                 //缺少需要语言的语音数据   
  18.             case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME:  
  19.                 //缺少需要语言的发音数据   
  20.             {  
  21.                 //这三种情况都表明数据有错,重新下载安装需要的数据   
  22.                 Log.v(TAG, "Need language stuff:"+resultCode);  
  23.                 Intent dataIntent = new Intent();  
  24.                 dataIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);  
  25.                 startActivity(dataIntent);  
  26.                   
  27.             }  
  28.                 break;  
  29.             case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL:  
  30.                 //检查失败   
  31.             default:  
  32.                 Log.v(TAG, "Got a failure. TTS apparently not available");  
  33.                 break;  
  34.             }  
  35.         }  
  36.         else  
  37.         {  
  38.             //其他Intent返回的结果   
  39.         }  
  40.         }  

如果返回CHECK_VOICE_DATA_PASS表示检查成功,可以新建一个 TextToSpeech ,否则就去下载 TTS数据。

当TTS数据检测成功创建一个TextToSpeech后,就会调用接口OnInitListener中定义的回调函数

  1.  //实现TTS初始化接口   
  2. @Override  
  3. public void onInit(int status) {  
  4.     // TODO Auto-generated method stub   
  5.     //TTS Engine初始化完成   
  6.     if(status == TextToSpeech.SUCCESS)  
  7.     {  
  8.         int result = mTts.setLanguage(Locale.US);  
  9.         //设置发音语言   
  10.         if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)  
  11.         //判断语言是否可用   
  12.         {  
  13.             Log.v(TAG, "Language is not available");  
  14.             speakBtn.setEnabled(false);  
  15.         }  
  16.         else  
  17.         {  
  18. mTts.speak("This is an example of speech synthesis.", TextToSpeech.QUEUE_ADD, null);  
  19.             speakBtn.setEnabled(true);  
  20.         }  
  21.     }  
  22.       
  23. }  

在这个回调函数里,我们设置语言,然后就可以进行使用 TTS引擎进行操作了。

创建一个TextToSpeech是需要占用资源的,因此我们要适时的释放这个资源:

  1. @Override  
  2. protected void onPause() {  
  3.     // TODO Auto-generated method stub   
  4.     super.onPause();  
  5.     if(mTts != null)  
  6.         //activity暂停时也停止TTS   
  7.     {  
  8.         mTts.stop();  
  9.     }  
  10. }  
  11.   
  12. @Override  
  13. protected void onDestroy() {  
  14.     // TODO Auto-generated method stub   
  15.     super.onDestroy();  
  16.     //释放TTS的资源   
  17.     mTts.shutdown();  
  18.     }  

最后,在onCreate函数中设置 EditText和Button的使用:

  1.      inputText = (EditText)findViewById(R.id.inputText);  
  2.      speakBtn = (Button)findViewById(R.id.speakBtn);          
  3.   inputText.setText("This is an example of speech synthesis.");  
  4.      speakBtn.setOnClickListener(new OnClickListener() {  
  5.   
  6. public void onClick(View v) {  
  7.     // TODO Auto-generated method stub   
  8.     mTts.speak(inputText.getText().toString(), TextToSpeech.QUEUE_ADD, null);  
  9.     //朗读输入框里的内容   
  10. }  
  11. });  

至此,我们的 Demo就完成了,当启动程序后,首先会朗读“ This is an example of speech synthesis in English. ”,然后你在EditText中输入内容,点击Speak按钮就能把内容给朗读出来。

 

 

原文地址:http://blog.csdn.net/ichliebephone/article/details/5802044

阅读(3013) | 评论(0) | 转发(0) |
0

上一篇:c struct java 实现

下一篇:mac禁用虚拟内存

给主人留下些什么吧!~~