Android TTS技術(shù)
Android TTS技術(shù),也就是Text-to-speech技術(shù)。TTS技術(shù)對(duì)文本文件進(jìn)行實(shí)時(shí)轉(zhuǎn)換,轉(zhuǎn)換時(shí)間之短可以秒計(jì)算。在其特有智能語(yǔ)音控制器作用下,文本輸出的語(yǔ)音音律流暢,使得聽(tīng)者在聽(tīng)取信息時(shí)感覺(jué)自然,毫無(wú)機(jī)器語(yǔ)音輸出的冷漠與生澀感。TTS語(yǔ)音合成技術(shù)即將覆蓋國(guó)標(biāo)一、二級(jí)漢字,具有英文接口,自動(dòng)識(shí)別中、英文,支持中英文混讀。所有聲音采用真人普通話(huà)為標(biāo)準(zhǔn)發(fā)音,實(shí)現(xiàn)了120-150個(gè)漢字/秒的快速語(yǔ)音合成,朗讀速度達(dá)3-4個(gè)漢字/秒,使用戶(hù)可以聽(tīng)到清晰悅耳的音質(zhì)和連貫流暢的語(yǔ)調(diào)。
下面我們來(lái)看看這是如何實(shí)現(xiàn)的:
***步:檢查T(mén)TS數(shù)據(jù)是否可用:
java代碼:
- //檢查T(mén)TS數(shù)據(jù)是否已經(jīng)安裝并且可用
- Intent checkIntent = new Intent();
- checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
- startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK);
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if(requestCode == REQ_TTS_STATUS_CHECK)
- {
- switch (resultCode) {
- case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS:
- //這個(gè)返回結(jié)果表明TTS Engine可以用
- {
- mTts = new TextToSpeech(this, this);
- Log.v(TAG, "TTS Engine is installed!");
- }
- break;
- case TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA:
- //需要的語(yǔ)音數(shù)據(jù)已損壞
- case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA:
- //缺少需要語(yǔ)言的語(yǔ)音數(shù)據(jù)
- case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME:
- //缺少需要語(yǔ)言的發(fā)音數(shù)據(jù)
- {
- //這三種情況都表明數(shù)據(jù)有錯(cuò),重新下載安裝需要的數(shù)據(jù)
- Log.v(TAG, "Need language stuff:"+resultCode);
- Intent dataIntent = new Intent();
- dataIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
- startActivity(dataIntent);
- }
- break;
- case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL:
- //檢查失敗
- default:
- Log.v(TAG, "Got a failure. TTS apparently not available");
- break;
- }
- }
- else
- {
- //其他Intent返回的結(jié)果
- }
- }
下一步,初始化TTS。
java代碼:
- //實(shí)現(xiàn)TTS初始化接口
- @Override
- public void onInit(int status) {
- // TODO Auto-generated method stub
- //TTS Engine初始化完成
- if(status == TextToSpeech.SUCCESS)
- {
- int result = mTts.setLanguage(Locale.US);
- //設(shè)置發(fā)音語(yǔ)言
- if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)
- //判斷語(yǔ)言是否可用
- {
- Log.v(TAG, "Language is not available");
- speakBtn.setEnabled(false);
- }
- else
- {
- mTts.speak("This is an example of speech synthesis.", TextToSpeech.QUEUE_ADD, null);
- speakBtn.setEnabled(true);
- }
- }
- }
接下來(lái),設(shè)置發(fā)音語(yǔ)言
java代碼:
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- // TODO Auto-generated method stub
- int pos = langSelect.getSelectedItemPosition();
- int result = -1;
- switch (pos) {
- case 0:
- {
- inputText.setText("I love you");
- result = mTts.setLanguage(Locale.US);
- }
- break;
- case 1:
- {
- inputText.setText("Je t'aime");
- result = mTts.setLanguage(Locale.FRENCH);
- }
- break;
- case 2:
- {
- inputText.setText("Ich liebe dich");
- result = mTts.setLanguage(Locale.GERMAN);
- }
- break;
- case 3:
- {
- inputText.setText("Ti amo");
- result = mTts.setLanguage(Locale.ITALIAN);
- }
- break;
- case 4:
- {
- inputText.setText("Te quiero");
- result = mTts.setLanguage(new Locale("spa", "ESP"));
- }
- break;
- default:
- break;
- }
- //設(shè)置發(fā)音語(yǔ)言
- if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)
- //判斷語(yǔ)言是否可用
- {
- Log.v(TAG, "Language is not available");
- speakBtn.setEnabled(false);
- }
- else
- {
- speakBtn.setEnabled(true);
- }
- }
***點(diǎn)擊Button按鈕發(fā)音:
java代碼:
- public void onClick(View v) {
- // TODO Auto-generated method stub
- mTts.speak(inputText.getText().toString(), TextToSpeech.QUEUE_ADD, null);
- //朗讀輸入框里的內(nèi)容
- }
【編輯推薦】
Android輕松實(shí)現(xiàn)語(yǔ)音識(shí)別
Android開(kāi)發(fā)中插入新的Activity