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 {
//檢查文檔中其他可能的結果代碼。
// 例如,語言可能對區(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的使用的文章就介紹到這了,更多相關adroid TextToSpeech使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android 如何定制vibrator的各種震動模式M 具體方法
這篇文章介紹了Android 如何定制vibrator的各種震動模式M 具體方法,有需要的朋友可以參考一下2013-09-09
Android中解決RecyclerView各種點擊事件的方法
這篇文章主要介紹了Android中解決RecyclerView各種點擊事件的方法,完美解決RecyclerView點擊事件、長按事件、子項點擊事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
kotlin項目加入Glide圖片加載庫并使用GlideApp的方法
這篇文章主要給大家介紹了關于kotlin項目加入Glide圖片加載庫并使用GlideApp的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧2019-01-01

