Android自带的TTS功能_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Android自带的TTS功能

Android自带的TTS功能

 2013/11/11 20:39:33  安卓吧  博客园  我要评论(0)
  • 摘要:在Android1.6之后添加了TextToSpeech,也叫TTS,把相应的文字转化成语音播报,增强了用户体验。可以根据语言播报界面上的控件如下:可以选择的语言但有的语言不支持,比如中文就不支持代码也比较简单,能简单介绍TTS的用法MainActivity.javapackagecom.example.tts;importjava.util.ArrayList;importjava.util.List;importjava.util.Locale;importandroid.app
  • 标签:android 功能

在Android1.6之后添加了TextToSpeech,也叫TTS,把相应的文字转化成语音播报,增强了用户体验。可以根据语言播报

 

界面上的控件如下:

可以选择的语言

但有的语言不支持,比如中文就不支持

 

代码也比较简单,能简单介绍TTS的用法

MainActivity.java

 class="keyword" style="line-height: 1.5;">package com.example.tts;  

  1.   
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import java.util.Locale;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.speech.tts.TextToSpeech;  
  9. import android.speech.tts.TextToSpeech.OnInitListener;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.AdapterView;  
  13. import android.widget.ArrayAdapter;  
  14. import android.widget.Button;  
  15. import android.widget.EditText;  
  16. import android.widget.Spinner;  
  17. import android.widget.Toast;  
  18.   
  19. /** 
  20.  * 根据选择的语言播报TTS 
  21.  *  
  22.  * @author Administrator 
  23.  *  
  24.  */  
  25. public class MainActivity extends Activity {  
  26.   
  27.     private TextToSpeech mSpeech = null;  
  28.     private Spinner langSpinner = null;  
  29.     private EditText edit = null;  
  30.     private Button btn = null;  
  31.     private String[] langs;  
  32.     private String curLang;  
  33.     private List<String> langList = new ArrayList<String>();  
  34.     private ArrayAdapter<String> langAdapter;  
  35.   
  36.     @Override  
  37.     protected void onCreate(Bundle savedInstanceState) {  
  38.         super.onCreate(savedInstanceState);  
  39.         setContentView(R.layout.main);  
  40.         langs = getResources().getStringArray(R.array.languages); // 得到语言数组  
  41.         langSpinner = (Spinner) findViewById(R.id.spinner);  
  42.         edit = (EditText) findViewById(R.id.edit);  
  43.         btn = (Button) findViewById(R.id.btn);  
  44.         btn.setOnClickListener(new BtnListener());  
  45.           
  46.         for (int i = 0; i < langs.length; i++) {  
  47.             langList.add(langs[i]);  
  48.         }  
  49.         // 设置下拉框的适配器和样式  
  50.         langAdapter = new ArrayAdapter<String>(MainActivity.this,  
  51.                 android.R.layout.simple_spinner_item, langList);  
  52.         langAdapter  
  53.                 .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
  54.         langSpinner.setAdapter(langAdapter);  
  55.   
  56.         // 下拉框监听  
  57.         langSpinner  
  58.                 .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {  
  59.                     @Override  
  60.                     public void onItemSelected(AdapterView<?> adapter,  
  61.                             View view, int position, long id) {  
  62.                         // TODO Auto-generated method stub  
  63.                         curLang = (String) langSpinner.getAdapter().getItem(  
  64.                                 (int) id);  
  65.                         if(mSpeech != null)  
  66.                         {  
  67.                             mSpeech.stop();  
  68.                             mSpeech.shutdown();  
  69.                             mSpeech = null;  
  70.                         }  
  71.                         // 创建TTS对象  
  72.                         mSpeech = new TextToSpeech(MainActivity.thisnew TTSListener());  
  73.                         Toast.makeText(MainActivity.this"select = " + curLang, Toast.LENGTH_SHORT).show();  
  74.                     }  
  75.   
  76.                     @Override  
  77.                     public void onNothingSelected(AdapterView<?> arg0) {  
  78.                         // TODO Auto-generated method stub  
  79.   
  80.                     }  
  81.                 });  
  82.     }  
  83.   
  84.     private int SetLanguage(String lang) {  
  85.         int result = 0;  
  86.         if (lang.equals("CANADA")) {  
  87.             result = mSpeech.setLanguage(Locale.CANADA);  
  88.         } else if (lang.equals("CANADA_FRENCH")) {  
  89.             result = mSpeech.setLanguage(Locale.CANADA_FRENCH);  
  90.         } else if (lang.equals("CHINA")) {  
  91.             result = mSpeech.setLanguage(Locale.CHINA);  
  92.         } else if (lang.equals("CHINESE")) {  
  93.             result = mSpeech.setLanguage(Locale.CHINESE);  
  94.         } else if (lang.equals("ENGLISH")) {  
  95.             result = mSpeech.setLanguage(Locale.ENGLISH);  
  96.         } else if (lang.equals("FRANCE")) {  
  97.             result = mSpeech.setLanguage(Locale.FRANCE);  
  98.         } else if (lang.equals("FRENCH")) {  
  99.             result = mSpeech.setLanguage(Locale.FRENCH);  
  100.         } else if (lang.equals("GERMAN")) {  
  101.             result = mSpeech.setLanguage(Locale.GERMAN);  
  102.         } else if (lang.equals("GERMANY")) {  
  103.             result = mSpeech.setLanguage(Locale.GERMANY);  
  104.         } else if (lang.equals("ITALIAN")) {  
  105.             result = mSpeech.setLanguage(Locale.ITALIAN);  
  106.         } else if (lang.equals("ITALY")) {  
  107.             result = mSpeech.setLanguage(Locale.ITALY);  
  108.         } else if (lang.equals("JAPAN")) {  
  109.             result = mSpeech.setLanguage(Locale.JAPAN);  
  110.         } else if (lang.equals("JAPANESE")) {  
  111.             result = mSpeech.setLanguage(Locale.JAPANESE);  
  112.         } else if (lang.equals("KOREA")) {  
  113.             result = mSpeech.setLanguage(Locale.KOREA);  
  114.         } else if (lang.equals("KOREAN")) {  
  115.             result = mSpeech.setLanguage(Locale.KOREAN);  
  116.         } else if (lang.equals("PRC")) {  
  117.             result = mSpeech.setLanguage(Locale.PRC);  
  118.         } else if (lang.equals("ROOT")) {  
  119.             result = mSpeech.setLanguage(Locale.ROOT);  
  120.         } else if (lang.equals("SIMPLIFIED_CHINESE")) {  
  121.             result = mSpeech.setLanguage(Locale.SIMPLIFIED_CHINESE);  
  122.         } else if (lang.equals("TAIWAN")) {  
  123.             result = mSpeech.setLanguage(Locale.TAIWAN);  
  124.         } else if (lang.equals("TRADITIONAL_CHINESE")) {  
  125.             result = mSpeech.setLanguage(Locale.TRADITIONAL_CHINESE);  
  126.         } else if (lang.equals("UK")) {  
  127.             result = mSpeech.setLanguage(Locale.UK);  
  128.         } else if (lang.equals("US")) {  
  129.             result = mSpeech.setLanguage(Locale.US);  
  130.         }  
  131.         return result;  
  132.     }  
  133.   
  134.     private class TTSListener implements OnInitListener {  
  135.   
  136.         @Override  
  137.         public void onInit(int status) {  
  138.             // TODO Auto-generated method stub  
  139.             if (status == TextToSpeech.SUCCESS) {  
  140.                 //int result = mSpeech.setLanguage(Locale.ENGLISH);  
  141.                 int result = SetLanguage(curLang);    
  142.                 //如果打印为-2,说明不支持这种语言  
  143.                 Toast.makeText(MainActivity.this"-------------result = " + result, Toast.LENGTH_LONG).show();  
  144.                 if (result == TextToSpeech.LANG_MISSING_DATA  
  145.                         || result == TextToSpeech.LANG_NOT_SUPPORTED) {  
  146.                     System.out.println("-------------not use");  
  147.                 } else {  
  148.                     mSpeech.speak("i love you", TextToSpeech.QUEUE_FLUSH, null);  
  149.                 }  
  150.             }  
  151.         }  
  152.   
  153.     }  
  154.   
  155.     private class BtnListener implements OnClickListener {  
  156.   
  157.         @Override  
  158.         public void onClick(View v) {  
  159.             // TODO Auto-generated method stub  
  160.             mSpeech.speak(edit.getText().toString(), TextToSpeech.QUEUE_FLUSH,  
  161.                     null);  
  162.         }  
  163.   
  164.     }  
  165.   
  166.     @Override  
  167.     protected void onDestroy() {  
  168.         // TODO Auto-generated method stub  
  169.         if (mSpeech != null) {  
  170.             mSpeech.stop();  
  171.             mSpeech.shutdown();  
  172.             mSpeech = null;  
  173.         }  
  174.         super.onDestroy();  
  175.     }  
  176.   
  177. }  


布局文件

 

 
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     tools:context=".MainActivity" >  
  6.   
  7.     <TextView  
  8.         android:id="@+id/text"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="@string/hello_world" />  
  12.   
  13.     <TextView  
  14.         android:id="@+id/label"  
  15.         android:layout_width="match_parent"  
  16.         android:layout_height="wrap_content"  
  17.         android:layout_below="@id/text"  
  18.         android:text="@string/select_language" />  
  19.   
  20.     <Spinner  
  21.         android:id="@+id/spinner"  
  22.         android:layout_width="150dip"  
  23.         android:layout_height="wrap_content"  
  24.         android:layout_below="@id/label"  
  25.         android:drawSelectorOnTop="false" />  
  26.   
  27.      <TextView  
  28.         android:id="@+id/label2"  
  29.         android:layout_width="match_parent"  
  30.         android:layout_height="wrap_content"  
  31.         android:layout_below="@id/spinner"  
  32.         android:text="@string/text" />  
  33.        
  34.      <EditText   
  35.          android:id="@+id/edit"  
  36.          android:layout_width="match_parent"  
  37.          android:layout_height="wrap_content"  
  38.          android:layout_below="@id/label2"  
  39.          android:text="@string/example"  
  40.          android:inputType="text"  
  41.          />  
  42.        
  43.      <Button   
  44.          android:id="@+id/btn"  
  45.          android:layout_width="match_parent"  
  46.          android:layout_height="wrap_content"  
  47.          android:layout_below="@id/edit"  
  48.          android:text="@string/btn"  
  49.          />  
  50. </RelativeLayout>  

代码下载:http://files.cnblogs.com/android100/TTS.zip

发表评论
用户名: 匿名