Android中使用TextToSpeech的方法
前言
在一年前,和朋友一起碼了一個英語APP,仿照某APP實現(xiàn)了單詞的功能,最開始就是借助的TextToSpeech,后面感覺聲音不夠好聽,于是使用了第三方
APP初稿如圖:

實現(xiàn)
1.初始化語音。這是一個異步操作。初始化完成后調(diào)用oninitListener(第二個參數(shù))。
TextToSpeech mTts = new TextToSpeech(this, this);
2.實現(xiàn)TextToSpeech.OnInitListener
注意:語言可能不可用。
// 實現(xiàn)TextToSpeech.OnInitListener.
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
//設置首選語言為中文,注意,語言可能是不可用的,結(jié)果將指示此
int result = mTts.setLanguage(Locale.CHINA);
if (result == TextToSpeech.LANG_MISSING_DATA ||
result == TextToSpeech.LANG_NOT_SUPPORTED) {
//語言數(shù)據(jù)丟失或不支持該語言。
Log.e(TAG, "語言數(shù)據(jù)丟失或不支持該語言");
} else {
//檢查文檔中其他可能的結(jié)果代碼。
// 例如,語言可能對區(qū)域設置可用,但對指定的國家和變體不可用
// TTS引擎已成功初始化。
// 允許用戶按下按鈕讓應用程序再次發(fā)言。
mAgainButton.setEnabled(true);
}
} else {
// 初始化失敗
Log.e(TAG, "初始化失敗");
}
}
3.寫一個朗讀方法,在需要的時候觸發(fā)(如:點擊事件)
TextToSpeech的speak方法有兩個重載。
執(zhí)行朗讀的方法
speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
第二個參數(shù)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);
//第二個參數(shù)queueMode用于指定發(fā)音隊列模式,兩種模式選擇
//(1)TextToSpeech.QUEUE_FLUSH:該模式下在有新任務時候會清除當前語音任務,執(zhí)行新的語音任務
//(2)TextToSpeech.QUEUE_ADD:該模式下會把新的語音任務放到語音任務之后,
//等前面的語音任務執(zhí)行完了才會執(zhí)行新的語音任務
mTts.speak(hello,
TextToSpeech.QUEUE_FLUSH,
null);
}
4.記得利用Activity的生命周期中將其關(guān)閉
@Override
public void onDestroy() {
// 生命周期中結(jié)束
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);
//初始化語音。這是一個異步操作。初始化完成后調(diào)用oninitListener(第二個參數(shù))。
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() {
// 生命周期中結(jié)束
if (mTts != null) {
mTts.stop();
mTts.shutdown();
}
super.onDestroy();
}
// 實現(xiàn)TextToSpeech.OnInitListener.
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
//設置首選語言為中文,注意,語言可能是不可用的,結(jié)果將指示此
int result = mTts.setLanguage(Locale.CHINA);
if (result == TextToSpeech.LANG_MISSING_DATA ||
result == TextToSpeech.LANG_NOT_SUPPORTED) {
//語言數(shù)據(jù)丟失或不支持該語言。
Log.e(TAG, "語言數(shù)據(jù)丟失或不支持該語言");
} else {
//檢查文檔中其他可能的結(jié)果代碼。
// 例如,語言可能對區(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);
//第二個參數(shù)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>
到此這篇關(guān)于Android中TextToSpeech的使用的文章就介紹到這了,更多相關(guān)adroid TextToSpeech使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android開發(fā)之拼音轉(zhuǎn)換工具類PinyinUtils示例
這篇文章主要介紹了Android開發(fā)之拼音轉(zhuǎn)換工具類PinyinUtils,涉及Android基于pinyin4j-2.5.0.jar包文件實現(xiàn)漢字轉(zhuǎn)拼音功能的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
Android開源AndroidSideMenu實現(xiàn)抽屜和側(cè)滑菜單
這篇文章主要為大家詳細介紹了Android開源AndroidSideMenu實現(xiàn)抽屜和側(cè)滑菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02
Android開發(fā)中Listview動態(tài)加載數(shù)據(jù)的方法示例
這篇文章主要介紹了Android開發(fā)中Listview動態(tài)加載數(shù)據(jù)的方法,結(jié)合實例形式較為詳細的分析了Android操作ListView界面布局與數(shù)據(jù)動態(tài)更新相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
android里面屏蔽home鍵/禁止Home鍵或者隨你DIY
可以先禁止Home鍵,再在onKeyDown里處理按鍵值,點然后在擊Home鍵的時候就把程序關(guān)閉,或者隨你DIY等等,感覺你可以隨心所欲吧,再接再厲,希望本文可以幫助到你2013-01-01
Android中實現(xiàn)Runnable接口簡單例子
這篇文章主要介紹了Android中實現(xiàn)Runnable接口簡單例子,著重點在如何實現(xiàn)run()方法,需要的朋友可以參考下2014-06-06
Android日期選擇器對話框DatePickerDialog使用詳解
這篇文章主要為大家詳細介紹了Android日期選擇器對話框DatePickerDialog的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01

