溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中如何使用TextToSpeech

發(fā)布時間:2021-09-10 11:42:50 來源:億速云 閱讀:142 作者:小新 欄目:開發(fā)技術

這篇文章主要介紹Android中如何使用TextToSpeech,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

APP初稿如圖:

Android中如何使用TextToSpeech

實現

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 {
                 //檢查文檔中其他可能的結果代碼。
                 // 例如,語言可能對區(qū)域設置可用,但對指定的國家和變體不可用
                 // TTS引擎已成功初始化。
                 // 允許用戶按下按鈕讓應用程序再次發(fā)言。
                 mAgainButton.setEnabled(true);
             }
         } else {
             // 初始化失敗
             Log.e(TAG, "初始化失敗");
         }
     }

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

TextToSpeech的speak方法有兩個重載。

執(zhí)行朗讀的方法

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

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

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

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

         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);
        //觸發(fā)
         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 {
                 //檢查文檔中其他可能的結果代碼。
                 // 例如,語言可能對區(qū)域設置可用,但對指定的國家和變體不可用
                 // TTS引擎已成功初始化。
                 // 允許用戶按下按鈕讓應用程序再次發(fā)言。
                 mAgainButton.setEnabled(true);
             }
         } else {
             // 初始化失敗
             Log.e(TAG, "初始化失敗");
         }
     }

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

         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”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI