這篇文章主要講解了“Android中如何實現文本內容自動朗讀功能”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Android中如何實現文本內容自動朗讀功能”吧!
Android提供了自動朗讀支持。自動朗讀支持可以對指定文本內容進行朗讀,從而發生聲音;不僅如此,Android的自動朗讀支持還允許把文本對應的音頻錄制成音頻文件,方便以后播放。這種自動朗讀支持的英文名稱為TextToSpeech,簡稱TTS。
借助于TTS的支持,可以在應用程序中動態地增加音頻輸出,從而改善用戶體驗。
Android的自動朗讀支持主要通過TextTospeech來完成,該累提供了如下一個構造器:
TextTospeech(Context context, TextTospeech.OnInitListenerlistener)
從上面的構造器不難看書,當創建TextTospeech對象時,必須先提供一個OnInitListener監聽器——該監聽器負責監聽TextTospeech的初始化結果。
一旦在程序中獲得了TextTospeech對象之后,接下來可以調用TextTospeech的setLanguage(Localeloc)方法來設置該TTS發聲引擎應使用的語言、國家選項。
如果調用setLanguage(Localeloc)的返回值是“TextToSpeech.LANG_COUNTRY_AVAILABLE”說明當前TTS系統可以支持所設置的語言、國家選項。
對TextToSpeech設置完成后,就可以調用它的方法來朗讀文本了,具體方法可參考TextToSpeech的API文檔。TextToSpeech類中最常用的方法是如下兩個。
speak(String text,int queueMode,HashMap<String,String>params)
synthesizeToFile(Stringtext,HashMap<String,String>params,String filename)
上面兩個方法都用于把text文字內容轉換為音頻,區別只是speak方法是播放轉換的音頻,而synthesizeToFile是把轉換得到的音頻保存成聲音文件。
上面兩個方法中的params都用于指定聲音轉換時的參數,speak()方法中的queueMode參數指定TTS發音隊列模式,該參數支持如下兩個常量。
TextToSpeech.QUEUE_FLUSH:如果指定該模式,當TTS調用speak方法時, 它會中斷當前實例正在運行的任務(也可以理解為清楚當前語音任務,轉而執行新的語音任務)
TextToSpeech.QUEUE_ADD:如果指定該模式,當TTS調用speak方法時,會把新的發音任務添加到當前發音任務列隊之后——也就是等任務隊列中的發音任務執行完成后再來執行speak()方法指定的發音任務。
當程序用完了TextToSpeech對象之后,可以在Activity的OnDestroy()方法中調用它的shutdown()來關閉TextToSpeech、釋放它所占用的資源。
歸納起來,使用TextToSpeech的步驟如下
1、創建TextToSpeech對象,創建時傳入OnInitListener監聽器監聽創建是否成功。
2、設置TextToSpeech所使用語言、國家選項,通過返回值判斷TTS是否支持該語言、國家選項。
3、調用speak()或者synthesizeToFile方法。
4、關閉TTS,回收資源。
下面的程序示范了如何利用TTS來朗讀用戶所輸入的文本內容。
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對象
tts = new TextToSpeech(this, new OnInitListener()
{
@Override
public void onInit(int status)
{
// 如果裝載TTS引擎成功
if (status == TextToSpeech.SUCCESS)
{
// 設置使用美式英語朗讀
int result = tts.setLanguage(Locale.US);
// 如果不支持所設置的語言
if (result != TextToSpeech.LANG_COUNTRY_AVAILABLE
&& result != TextToSpeech.LANG_AVAILABLE)
{
Toast.makeText(Speech.this, "TTS暫時不支持這種語言的朗讀。", 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)
{
// 執行朗讀
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()
{
// 關閉TextToSpeech對象
if (tts != null)
{
tts.shutdown();
}
}
}上面的程序第一行粗體字代碼設置創建了一個TextToSpeech對象,第二行粗體字使用美式英語進行英語朗讀。接下來程序分別體統了兩個按鈕,一個按鈕用于執行朗讀發生,一個按鈕用于將文本內容朗讀音頻保存成聲音文件,分別通過調用TextToSpeech對象的兩個方法完成。
運行程序,可以看到下圖界面:

在界面中,當用戶點擊“朗讀”按鈕后,系統將會調用TTS的speak()方法來朗讀文本框的內容;當用戶單擊“記錄聲音”按鈕后,系統會調用synthesizeToFile()方法把文本框中的文本對應的朗讀音頻記錄到SD卡的聲音文件中——單擊該按鈕后將可以在SD卡的根目錄下生成一個sound.wav文件,該文件可以被導出,在其他音頻播放軟件中播放。
程序重寫Activity的onDestroy()方法,并在該方法中關閉了TextToSpeech對象,回收了它的資源。
感謝各位的閱讀,以上就是“Android中如何實現文本內容自動朗讀功能”的內容了,經過本文的學習后,相信大家對Android中如何實現文本內容自動朗讀功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。