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

實(shí)現(xiàn)
1.初始化語(yǔ)音。這是一個(gè)異步操作。初始化完成后調(diào)用oninitListener(第二個(gè)參數(shù))。
TextToSpeech mTts = new TextToSpeech(this, this);
2.實(shí)現(xiàn)TextToSpeech.OnInitListener
注意:語(yǔ)言可能不可用。
// 實(shí)現(xiàn)TextToSpeech.OnInitListener.
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
//設(shè)置首選語(yǔ)言為中文,注意,語(yǔ)言可能是不可用的,結(jié)果將指示此
int result = mTts.setLanguage(Locale.CHINA);
if (result == TextToSpeech.LANG_MISSING_DATA ||
result == TextToSpeech.LANG_NOT_SUPPORTED) {
//語(yǔ)言數(shù)據(jù)丟失或不支持該語(yǔ)言。
Log.e(TAG, "語(yǔ)言數(shù)據(jù)丟失或不支持該語(yǔ)言");
} else {
//檢查文檔中其他可能的結(jié)果代碼。
// 例如,語(yǔ)言可能對(duì)區(qū)域設(shè)置可用,但對(duì)指定的國(guó)家和變體不可用
// TTS引擎已成功初始化。
// 允許用戶(hù)按下按鈕讓?xiě)?yīng)用程序再次發(fā)言。
mAgainButton.setEnabled(true);
}
} else {
// 初始化失敗
Log.e(TAG, "初始化失敗");
}
}
3.寫(xiě)一個(gè)朗讀方法,在需要的時(shí)候觸發(fā)(如:點(diǎn)擊事件)
TextToSpeech的speak方法有兩個(gè)重載。
執(zhí)行朗讀的方法
speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
第二個(gè)參數(shù)queueMode用于指定發(fā)音隊(duì)列模式,兩種模式選擇。
(1)TextToSpeech.QUEUE_FLUSH:該模式下在有新任務(wù)時(shí)候會(huì)清除當(dāng)前語(yǔ)音任務(wù),執(zhí)行新的語(yǔ)音任務(wù)
(2)TextToSpeech.QUEUE_ADD:該模式下會(huì)把新的語(yǔ)音任務(wù)放到語(yǔ)音任務(wù)之后,等前面的語(yǔ)音任務(wù)執(zhí)行完了才會(huì)執(zhí)行新的語(yǔ)音任務(wù)。
將朗讀的的聲音記錄成音頻文件
synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
private void sayHello() {
String hello ="Hellow";
//TextToSpeech的speak方法有兩個(gè)重載。
// 執(zhí)行朗讀的方法
//speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
// 將朗讀的的聲音記錄成音頻文件
//synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
//第二個(gè)參數(shù)queueMode用于指定發(fā)音隊(duì)列模式,兩種模式選擇
//(1)TextToSpeech.QUEUE_FLUSH:該模式下在有新任務(wù)時(shí)候會(huì)清除當(dāng)前語(yǔ)音任務(wù),執(zhí)行新的語(yǔ)音任務(wù)
//(2)TextToSpeech.QUEUE_ADD:該模式下會(huì)把新的語(yǔ)音任務(wù)放到語(yǔ)音任務(wù)之后,
//等前面的語(yǔ)音任務(wù)執(zhí)行完了才會(huì)執(zhí)行新的語(yǔ)音任務(wù)
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);
//初始化語(yǔ)音。這是一個(gè)異步操作。初始化完成后調(diào)用oninitListener(第二個(gè)參數(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();
}
// 實(shí)現(xiàn)TextToSpeech.OnInitListener.
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
//設(shè)置首選語(yǔ)言為中文,注意,語(yǔ)言可能是不可用的,結(jié)果將指示此
int result = mTts.setLanguage(Locale.CHINA);
if (result == TextToSpeech.LANG_MISSING_DATA ||
result == TextToSpeech.LANG_NOT_SUPPORTED) {
//語(yǔ)言數(shù)據(jù)丟失或不支持該語(yǔ)言。
Log.e(TAG, "語(yǔ)言數(shù)據(jù)丟失或不支持該語(yǔ)言");
} else {
//檢查文檔中其他可能的結(jié)果代碼。
// 例如,語(yǔ)言可能對(duì)區(qū)域設(shè)置可用,但對(duì)指定的國(guó)家和變體不可用
// TTS引擎已成功初始化。
// 允許用戶(hù)按下按鈕讓?xiě)?yīng)用程序再次發(fā)言。
mAgainButton.setEnabled(true);
}
} else {
// 初始化失敗
Log.e(TAG, "初始化失敗");
}
}
private void sayHello() {
String hello ="計(jì)蒙不吃魚(yú)";
//TextToSpeech的speak方法有兩個(gè)重載。
// 執(zhí)行朗讀的方法
//speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
// 將朗讀的的聲音記錄成音頻文件
//synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
//第二個(gè)參數(shù)queueMode用于指定發(fā)音隊(duì)列模式,兩種模式選擇
//(1)TextToSpeech.QUEUE_FLUSH:該模式下在有新任務(wù)時(shí)候會(huì)清除當(dāng)前語(yǔ)音任務(wù),執(zhí)行新的語(yǔ)音任務(wù)
//(2)TextToSpeech.QUEUE_ADD:該模式下會(huì)把新的語(yǔ)音任務(wù)放到語(yǔ)音任務(wù)之后,
//等前面的語(yǔ)音任務(wù)執(zhí)行完了才會(huì)執(zhí)行新的語(yǔ)音任務(wù)
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android開(kāi)發(fā)之拼音轉(zhuǎn)換工具類(lèi)PinyinUtils示例
這篇文章主要介紹了Android開(kāi)發(fā)之拼音轉(zhuǎn)換工具類(lèi)PinyinUtils,涉及Android基于pinyin4j-2.5.0.jar包文件實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
Android編程之藍(lán)牙測(cè)試實(shí)例
這篇文章主要介紹了Android編程之藍(lán)牙測(cè)試,較為詳細(xì)的分析了Android藍(lán)牙測(cè)試的相關(guān)運(yùn)行環(huán)境與調(diào)試技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
Android開(kāi)源AndroidSideMenu實(shí)現(xiàn)抽屜和側(cè)滑菜單
這篇文章主要為大家詳細(xì)介紹了Android開(kāi)源AndroidSideMenu實(shí)現(xiàn)抽屜和側(cè)滑菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Android 對(duì)話框 Dialog使用實(shí)例講解
對(duì)話框是在當(dāng)前的頁(yè)面之上彈出的小窗口, 用于顯示一些重要的提示信息, 提示用戶(hù)的輸入,確認(rèn)信息,或顯示某種狀態(tài).如 : 顯示進(jìn)度條對(duì)話框, 退出提示.接下來(lái)通過(guò)本文給大家介紹android dialog對(duì)話框知識(shí),感興趣的朋友一起看看吧2016-09-09
Android開(kāi)發(fā)中Listview動(dòng)態(tài)加載數(shù)據(jù)的方法示例
這篇文章主要介紹了Android開(kāi)發(fā)中Listview動(dòng)態(tài)加載數(shù)據(jù)的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android操作ListView界面布局與數(shù)據(jù)動(dòng)態(tài)更新相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
android里面屏蔽home鍵/禁止Home鍵或者隨你DIY
可以先禁止Home鍵,再在onKeyDown里處理按鍵值,點(diǎn)然后在擊Home鍵的時(shí)候就把程序關(guān)閉,或者隨你DIY等等,感覺(jué)你可以隨心所欲吧,再接再厲,希望本文可以幫助到你2013-01-01
Android多線程處理機(jī)制中的Handler使用介紹
本文將為大家介紹下Android的Handler的使用方法,Handler可以發(fā)送Messsage和Runnable對(duì)象到與其相關(guān)聯(lián)的線程的消息隊(duì)列,感興趣的朋友可以了解下哈2013-06-06
Android中實(shí)現(xiàn)Runnable接口簡(jiǎn)單例子
這篇文章主要介紹了Android中實(shí)現(xiàn)Runnable接口簡(jiǎn)單例子,著重點(diǎn)在如何實(shí)現(xiàn)run()方法,需要的朋友可以參考下2014-06-06
Android日期選擇器對(duì)話框DatePickerDialog使用詳解
這篇文章主要為大家詳細(xì)介紹了Android日期選擇器對(duì)話框DatePickerDialog的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

