Android中使用TextToSpeech的方法

前言

在一年前,和朋友一起碼瞭一個英語APP,仿照某APP實現瞭單詞的功能,最開始就是借助的TextToSpeech,後面感覺聲音不夠好聽,於是使用瞭第三方

APP初稿如圖:

請添加圖片描述

實現

1.初始化語音。這是一個異步操作。初始化完成後調用oninitListener(第二個參數)。

TextToSpeech mTts = new TextToSpeech(this, this);

2.實現TextToSpeech.OnInitListener

註意:語言可能不可用。

// 實現TextToSpeech.OnInitListener.
     public void onInit(int status) {
         if (status == TextToSpeech.SUCCESS) {
             //設置首選語言為中文,註意,語言可能是不可用的,結果將指示此
             int result = mTts.setLanguage(Locale.CHINA);
             if (result == TextToSpeech.LANG_MISSING_DATA ||
                 result == TextToSpeech.LANG_NOT_SUPPORTED) {
                 //語言數據丟失或不支持該語言。
                 Log.e(TAG, "語言數據丟失或不支持該語言");
             } else {
                 //檢查文檔中其他可能的結果代碼。
                 // 例如,語言可能對區域設置可用,但對指定的國傢和變體不可用
                 // TTS引擎已成功初始化。
                 // 允許用戶按下按鈕讓應用程序再次發言。
                 mAgainButton.setEnabled(true);
             }
         } else {
             // 初始化失敗
             Log.e(TAG, "初始化失敗");
         }
     }

3.寫一個朗讀方法,在需要的時候觸發(如:點擊事件)

TextToSpeech的speak方法有兩個重載。

執行朗讀的方法

speak(CharSequence text,int queueMode,Bundle params,String utteranceId);

第二個參數queueMode用於指定發音隊列模式,兩種模式選擇。
(1)TextToSpeech.QUEUE_FLUSH:該模式下在有新任務時候會清除當前語音任務,執行新的語音任務
(2)TextToSpeech.QUEUE_ADD:該模式下會把新的語音任務放到語音任務之後,等前面的語音任務執行完瞭才會執行新的語音任務。

將朗讀的的聲音記錄成音頻文件

synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
 private void sayHello() {
         String hello ="Hellow";
         //TextToSpeech的speak方法有兩個重載。
         // 執行朗讀的方法
         //speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
         // 將朗讀的的聲音記錄成音頻文件
         //synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
         //第二個參數queueMode用於指定發音隊列模式,兩種模式選擇
         //(1)TextToSpeech.QUEUE_FLUSH:該模式下在有新任務時候會清除當前語音任務,執行新的語音任務
         //(2)TextToSpeech.QUEUE_ADD:該模式下會把新的語音任務放到語音任務之後,
         //等前面的語音任務執行完瞭才會執行新的語音任務

         mTts.speak(hello,
             TextToSpeech.QUEUE_FLUSH,
             null);
     }

4.記得利用Activity的生命周期中將其關閉

@Override
     public void onDestroy() {
         // 生命周期中結束
         if (mTts != null) {
             mTts.stop();
             mTts.shutdown();
         }

         super.onDestroy();
     }

源碼

SpeechActivity.java

public class SpeechActivity extends Activity implements TextToSpeech.OnInitListener {

     private static final String TAG = "SpeechDemo";

     private TextToSpeech mTts;
     private Button mButton;

     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.text_to_speech);

         //初始化語音。這是一個異步操作。初始化完成後調用oninitListener(第二個參數)。
         mTts = new TextToSpeech(this, this);

         mButton = (Button) findViewById(R.id.again_button);
        //觸發
         mButton.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 sayHello();
             }
         });
     }

     @Override
     public void onDestroy() {
         // 生命周期中結束
         if (mTts != null) {
             mTts.stop();
             mTts.shutdown();
         }

         super.onDestroy();
     }

     // 實現TextToSpeech.OnInitListener.
     public void onInit(int status) {
         if (status == TextToSpeech.SUCCESS) {
             //設置首選語言為中文,註意,語言可能是不可用的,結果將指示此
             int result = mTts.setLanguage(Locale.CHINA);
             if (result == TextToSpeech.LANG_MISSING_DATA ||
                 result == TextToSpeech.LANG_NOT_SUPPORTED) {
                 //語言數據丟失或不支持該語言。
                 Log.e(TAG, "語言數據丟失或不支持該語言");
             } else {
                 //檢查文檔中其他可能的結果代碼。
                 // 例如,語言可能對區域設置可用,但對指定的國傢和變體不可用
                 // TTS引擎已成功初始化。
                 // 允許用戶按下按鈕讓應用程序再次發言。
                 mAgainButton.setEnabled(true);
             }
         } else {
             // 初始化失敗
             Log.e(TAG, "初始化失敗");
         }
     }

     private void sayHello() {
         String hello ="計蒙不吃魚";
         //TextToSpeech的speak方法有兩個重載。
         // 執行朗讀的方法
         //speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
         // 將朗讀的的聲音記錄成音頻文件
         //synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
         //第二個參數queueMode用於指定發音隊列模式,兩種模式選擇
         //(1)TextToSpeech.QUEUE_FLUSH:該模式下在有新任務時候會清除當前語音任務,執行新的語音任務
         //(2)TextToSpeech.QUEUE_ADD:該模式下會把新的語音任務放到語音任務之後,
         //等前面的語音任務執行完瞭才會執行新的語音任務

         mTts.speak(hello,
             TextToSpeech.QUEUE_FLUSH,
             null);
     }

 }

text_to_speech.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <Button android:id="@+id/again_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:enabled="false" />
</LinearLayout>

到此這篇關於Android中TextToSpeech的使用的文章就介紹到這瞭,更多相關adroid TextToSpeech使用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: