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!
推薦閱讀:
- Android實現自動朗讀功能(TTS)
- Android實現簡單計算器界面
- Android studio制作簡易計算器功能
- Android實現文字消除效果
- Android使用setContentView實現頁面的轉換效果