現(xiàn)在,隨著移動(dòng)應(yīng)用的日益普及,移動(dòng)語(yǔ)音應(yīng)用越來(lái)越受到用戶的重視和喜愛,本文將指導(dǎo)用戶如何在Android SDK中使用語(yǔ)音引擎去創(chuàng)建簡(jiǎn)單的應(yīng)用。在Android中使用語(yǔ)音引擎其實(shí)是很容易的事情,通過(guò)若干步驟就可以實(shí)現(xiàn)了,盡管其中有些地方在使用中要注意。在本教程中,將一步步直接教讀者如何創(chuàng)建語(yǔ)音應(yīng)用,具體的代碼在文末有下載。
步驟一 創(chuàng)建Android工程 我們首先創(chuàng)建一個(gè)Android工程,選用的是Android 2.3以上SDK的。 步驟二 創(chuàng)建用戶界面 由于我們的例子很簡(jiǎn)單,所以只需要往界面中增添若干控件就可以了,我們打開main.xml文件,寫入如下代碼,增加了一個(gè)本文框和一個(gè)按鈕: android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Enter some text:" /> android:layout_width="fill_parent" android:layout_height="wrap_content" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Speak" /> 其中文本框中是輸入要發(fā)音朗讀的文字內(nèi)容。界面如下圖:
![]() ▲ 步驟三 編寫監(jiān)聽事件 接下來(lái),我們?yōu)榘粹o添加事件處理,首先要獲得用戶輸入的文字,代碼如下: import android.view.View.OnClickListener; import android.widget.Button; import android.view.View; import android.widget.EditText; public class SpeakingAndroid extends Activity implements OnClickListener { //create the Activity public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button speakButton = (Button)findViewById(R.id.speak); //監(jiān)聽button事件 speakButton.setOnClickListener(this); } //onClick事件的響應(yīng)代碼 public void onClick(View v) { //獲得用戶輸入的文字 EditText enteredText = (EditText)findViewById(R.id.enter); String words = enteredText.getText().toString(); //調(diào)用語(yǔ)音引擎的方法 speakWords(words); } } 步驟四 編寫相關(guān)的語(yǔ)音方法 首先,要導(dǎo)入相關(guān)的語(yǔ)音引擎包,代碼如下: import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech.OnInitListener; 接下來(lái),為了能系統(tǒng)先對(duì)運(yùn)行語(yǔ)音引擎的準(zhǔn)備工作進(jìn)行檢查,因此先要對(duì)其運(yùn)行前的數(shù)據(jù)進(jìn)行就緒檢查,所以首先聲明一個(gè)成員變量,如下: private int MY_DATA_CHECK_CODE = 0; 并且在oncreate方法中,編寫如下代碼: Intent checkTTSIntent = new Intent(); checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); startActivityForResult(checkTTSIntent, MY_DATA_CHECK_CODE); 以上代碼的目的為,創(chuàng)建一個(gè)Intent,去檢查TTS所需要的數(shù)據(jù)是否準(zhǔn)備好,如果準(zhǔn)備好的話,則調(diào)用onActivityResult方法,這個(gè)方法在下文中會(huì)提到。 步驟五 創(chuàng)建TTS的實(shí)例 在onActivityResult方法中,可以開始創(chuàng)建其TTS語(yǔ)音引擎的實(shí)例,代碼如下: protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == MY_DATA_CHECK_CODE) { if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { myTTS = new TextToSpeech(this, this); } else { Intent installTTSIntent = new Intent(); installTTSIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); startActivity(installTTSIntent); } } } 當(dāng)TTS的數(shù)據(jù)就緒數(shù)據(jù)檢查完畢后,將調(diào)用這個(gè)方法,其中resultCode為TTS驗(yàn)證是否通過(guò)的標(biāo)記,如果通過(guò)驗(yàn)證的話,則通過(guò)myTTS = new TextToSpeech(this, this); 創(chuàng)建一個(gè)語(yǔ)音TTS實(shí)例。如果沒(méi)能通過(guò)TTS準(zhǔn)備就緒的安裝測(cè)試,則新聲明一個(gè)Intent,將用戶引導(dǎo)到這個(gè)安裝TTS引擎的界面中去。 步驟六 初始化引擎的數(shù)據(jù) 由于在本程序中實(shí)現(xiàn)了OnInitListener接口,因此可以在oninit方法中,對(duì)語(yǔ)音引擎進(jìn)行初始化設(shè)置,比如設(shè)置語(yǔ)言等,首先應(yīng)該導(dǎo)入相關(guān)的類庫(kù),如下: import java.util.Locale; 在oninit方法中寫入如下代碼: public void onInit(int initStatus) { if (initStatus == TextToSpeech.SUCCESS) { myTTS.setLanguage(Locale.US); } else if (initStatus == TextToSpeech.ERROR) { Toast.makeText(this, "Sorry! Text To Speech failed...", Toast.LENGTH_LONG).show(); } } 這里判斷如果TTS已經(jīng)就緒成功,則調(diào)用setLanguage方法設(shè)置為使用對(duì)應(yīng)的語(yǔ)言(這 里是英文),如果判斷TTS不能準(zhǔn)備就緒,則調(diào)用Toast的顯示方法告知用戶。 步驟七 讓TTS說(shuō)話 在準(zhǔn)備好以上步驟后,最后一步就是讓TTS開口說(shuō)話了,在speakWords方法中,寫入如下代碼即可 private void speakWords(String speech) { myTTS.speak(speech, TextToSpeech.QUEUE_FLUSH, null); } 其中的speak方法中有很多參數(shù)可以選用,具體請(qǐng)參考Android文檔,這里選用了 參數(shù)TextToSpeech.QUEUE_FLUSH,如果想讓TTS語(yǔ)音引擎連續(xù)不斷地朗讀,可以使用 myTTS.speak(speech, TextToSpeech.QUEUE_ADD, null)的參數(shù)。如果要求應(yīng)用不再進(jìn)行朗讀,則可以添加一句: myTTS.shutdown(); 但除非是明確用戶不在需要應(yīng)用進(jìn)行朗讀,否則如果要連續(xù)讓系統(tǒng)朗讀的話,則不應(yīng)該添加這句代碼。 小結(jié) 本文簡(jiǎn)單一步步地介紹了如何在Android SDK中使用語(yǔ)音引擎TTS,讀者可以通過(guò)這個(gè)例子,創(chuàng)建更多豐富的語(yǔ)音應(yīng)用。 |
|
來(lái)自: 王者歸來(lái)525 > 《編程精華》