• Android自带的TTS功能


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

    界面上的控件如下:

    可以选择的语言

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

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

    MainActivity.java

     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

  • 相关阅读:
    Altium Designer如何从已有的PCB图中导出封装库
    获得内核函数地址的四种方法
    poj2976 Dropping tests
    poj3045 Cow Acrobats
    CF916C Jamie and Interesting Graph
    poj3104 Drying
    poj2455 Secret Milking Machine
    poj2289 Jamie's Contact Groups
    网络流最小路径覆盖
    CF897C Nephren gives a riddle
  • 原文地址:https://www.cnblogs.com/android100/p/android-tts.html
Copyright © 2020-2023  润新知