Android開發(fā)之文本內(nèi)容自動(dòng)朗讀功能實(shí)現(xiàn)方法
本文實(shí)例講述了Android開發(fā)之文本內(nèi)容自動(dòng)朗讀功能實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
Android提供了自動(dòng)朗讀支持。自動(dòng)朗讀支持可以對(duì)指定文本內(nèi)容進(jìn)行朗讀,從而發(fā)生聲音;不僅如此,Android的自動(dòng)朗讀支持還允許把文本對(duì)應(yīng)的音頻錄制成音頻文件,方便以后播放。這種自動(dòng)朗讀支持的英文名稱為TextToSpeech,簡稱TTS。
借助于TTS的支持,可以在應(yīng)用程序中動(dòng)態(tài)地增加音頻輸出,從而改善用戶體驗(yàn)。
Android的自動(dòng)朗讀支持主要通過TextTospeech來完成,該累提供了如下一個(gè)構(gòu)造器:
TextTospeech(Context context, TextTospeech.OnInitListenerlistener)
從上面的構(gòu)造器不難看書,當(dāng)創(chuàng)建TextTospeech對(duì)象時(shí),必須先提供一個(gè)OnInitListener監(jiān)聽器——該監(jiān)聽器負(fù)責(zé)監(jiān)聽TextTospeech的初始化結(jié)果。
一旦在程序中獲得了TextTospeech對(duì)象之后,接下來可以調(diào)用TextTospeech的setLanguage(Localeloc)
方法來設(shè)置該TTS發(fā)聲引擎應(yīng)使用的語言、國家選項(xiàng)。
如果調(diào)用setLanguage(Localeloc)的返回值是“TextToSpeech.LANG_COUNTRY_AVAILABLE”說明當(dāng)前TTS系統(tǒng)可以支持所設(shè)置的語言、國家選項(xiàng)。
對(duì)TextToSpeech設(shè)置完成后,就可以調(diào)用它的方法來朗讀文本了,具體方法可參考TextToSpeech的API文檔。TextToSpeech類中最常用的方法是如下兩個(gè)。
speak(String text,int queueMode,HashMap<String,String>params)
synthesizeToFile(Stringtext,HashMap<String,String>params,String filename)
上面兩個(gè)方法都用于把text文字內(nèi)容轉(zhuǎn)換為音頻,區(qū)別只是speak方法是播放轉(zhuǎn)換的音頻,而synthesizeToFile是把轉(zhuǎn)換得到的音頻保存成聲音文件。
上面兩個(gè)方法中的params都用于指定聲音轉(zhuǎn)換時(shí)的參數(shù),speak()
方法中的queueMode參數(shù)指定TTS發(fā)音隊(duì)列模式,該參數(shù)支持如下兩個(gè)常量。
TextToSpeech.QUEUE_FLUSH:如果指定該模式,當(dāng)TTS調(diào)用speak方法時(shí), 它會(huì)中斷當(dāng)前實(shí)例正在運(yùn)行的任務(wù)(也可以理解為清楚當(dāng)前語音任務(wù),轉(zhuǎn)而執(zhí)行新的語音任務(wù))
TextToSpeech.QUEUE_ADD:如果指定該模式,當(dāng)TTS調(diào)用speak方法時(shí),會(huì)把新的發(fā)音任務(wù)添加到當(dāng)前發(fā)音任務(wù)列隊(duì)之后——也就是等任務(wù)隊(duì)列中的發(fā)音任務(wù)執(zhí)行完成后再來執(zhí)行speak()方法指定的發(fā)音任務(wù)。
當(dāng)程序用完了TextToSpeech對(duì)象之后,可以在Activity的OnDestroy()方法中調(diào)用它的shutdown()來關(guān)閉TextToSpeech、釋放它所占用的資源。
歸納起來,使用TextToSpeech的步驟如下
1、創(chuàng)建TextToSpeech對(duì)象,創(chuàng)建時(shí)傳入OnInitListener監(jiān)聽器監(jiān)聽創(chuàng)建是否成功。
2、設(shè)置TextToSpeech所使用語言、國家選項(xiàng),通過返回值判斷TTS是否支持該語言、國家選項(xiàng)。
3、調(diào)用speak()或者synthesizeToFile方法。
4、關(guān)閉TTS,回收資源。
下面的程序示范了如何利用TTS來朗讀用戶所輸入的文本內(nèi)容。
Speech.java:
public class Speech extends Activity { TextToSpeech tts; EditText editText; Button speech; Button record; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 初始化TextToSpeech對(duì)象 tts = new TextToSpeech(this, new OnInitListener() { @Override public void onInit(int status) { // 如果裝載TTS引擎成功 if (status == TextToSpeech.SUCCESS) { // 設(shè)置使用美式英語朗讀 int result = tts.setLanguage(Locale.US); // 如果不支持所設(shè)置的語言 if (result != TextToSpeech.LANG_COUNTRY_AVAILABLE && result != TextToSpeech.LANG_AVAILABLE) { Toast.makeText(Speech.this, "TTS暫時(shí)不支持這種語言的朗讀。", 50000) .show(); } } } }); editText = (EditText) findViewById(R.id.txt); speech = (Button) findViewById(R.id.speech); record = (Button) findViewById(R.id.record); speech.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // 執(zhí)行朗讀 tts.speak(editText.getText().toString(), TextToSpeech.QUEUE_ADD, null); } }); record.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // 將朗讀文本的音頻記錄到指定文件 tts.synthesizeToFile(editText.getText().toString(), null, "/mnt/sdcard/sound.wav"); Toast.makeText(Speech.this, "聲音記錄成功!", 50000).show(); } }); } @Override public void onDestroy() { // 關(guān)閉TextToSpeech對(duì)象 if (tts != null) { tts.shutdown(); } } }
上面的程序第一行粗體字代碼設(shè)置創(chuàng)建了一個(gè)TextToSpeech對(duì)象,第二行粗體字使用美式英語進(jìn)行英語朗讀。接下來程序分別體統(tǒng)了兩個(gè)按鈕,一個(gè)按鈕用于執(zhí)行朗讀發(fā)生,一個(gè)按鈕用于將文本內(nèi)容朗讀音頻保存成聲音文件,分別通過調(diào)用TextToSpeech對(duì)象的兩個(gè)方法完成。
運(yùn)行程序,可以看到下圖界面:
在界面中,當(dāng)用戶點(diǎn)擊“朗讀”按鈕后,系統(tǒng)將會(huì)調(diào)用TTS的speak()方法來朗讀文本框的內(nèi)容;當(dāng)用戶單擊“記錄聲音”按鈕后,系統(tǒng)會(huì)調(diào)用synthesizeToFile()
方法把文本框中的文本對(duì)應(yīng)的朗讀音頻記錄到SD卡的聲音文件中——單擊該按鈕后將可以在SD卡的根目錄下生成一個(gè)sound.wav文件,該文件可以被導(dǎo)出,在其他音頻播放軟件中播放。
程序重寫Activity的onDestroy()
方法,并在該方法中關(guān)閉了TextToSpeech對(duì)象,回收了它的資源。
提示:由于不同的文字,在不同的語言、國家中的發(fā)音是不同的,尤其是歐美,它們所使用的都是字母文字,因此一段文本內(nèi)容,使用不同的語言、國家選項(xiàng)來朗讀,發(fā)音效果是截然不同的。目前Android的TTS暫時(shí)不支持中文。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android開發(fā)入門與進(jìn)階教程》、《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android數(shù)據(jù)庫操作技巧總結(jié)》、《Android文件操作技巧匯總》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android實(shí)現(xiàn)相冊(cè)中圖片上傳或下載
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)相冊(cè)中圖片上傳或下載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05Flutter使用Provider進(jìn)行狀態(tài)管理的實(shí)現(xiàn)
Provider是Flutter中一個(gè)非常流行的狀態(tài)管理工具,它可以幫助開發(fā)者更有效地管理Widget樹中的數(shù)據(jù),本文主要介紹了Flutter使用Provider進(jìn)行狀態(tài)管理的實(shí)現(xiàn),感興趣的可以了解一下2024-04-04詳解Android 7.0 Settings 加載選項(xiàng)
本篇文章主要介紹了Android 7.0 Settings 加載選項(xiàng),Android 7.0 Settings頂部多了一個(gè)建議選項(xiàng),多了個(gè)側(cè)邊欄,操作更加便捷了,有興趣的可以了解一下。2017-02-02Android自定義控件實(shí)現(xiàn)時(shí)鐘效果
這篇文章主要介紹了Android自定義控件實(shí)現(xiàn)時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12Android實(shí)現(xiàn)照片墻效果的實(shí)例代碼
Android實(shí)現(xiàn)照片墻效果的設(shè)計(jì)思路其實(shí)也非常簡單,用一個(gè)GridView控件當(dāng)作“墻”,然后隨著GridView的滾動(dòng)將一張張照片貼在“墻”上,這些照片可以是手機(jī)本地中存儲(chǔ)的,也可以是從網(wǎng)上下載的2018-05-05

Android 給應(yīng)用程序的icon添加未讀消息個(gè)數(shù)提示(紅圈內(nèi)數(shù)字)

kotlin中EditText賦值Type mismatch方式