Speechsynthesis,如下圖所示:圖1AndroidTTS設置界面當點擊“Listentoanexample”時," />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android TTS學習——TTS初體驗

系統 2137 0

?

Android TTS學習——TTS初體驗

? 8456人閱讀 ? 評論 (18) ? 收藏 ? 舉報

一. ? 基礎知識

TextToSpeech ? 簡稱? ? TTS ? ? 稱為語音合成, ? ? Android? ? ? 1.6版本 ? 開始支持 ? 的新功能 ? ,能 ? 將所指定的文本轉成不同語言音頻輸出。

在具體介紹前我們先來看下Adnroid系統帶的TTS設置界面,點擊Settings->Speech?synthesis,如下圖所示:

Android TTS學習——TTS初體驗

圖?1?Android?TTS設置界面

??? 當點擊“Listen?to?an?example”時,會發出“ This?is?an?example?of?speech?synthesis?in?English. ? ”,如果沒有安裝 ? TTS?Data的話可以點擊第二項安裝,在? Default?settings ?可以設置? Speech?rate ?和? Language ?,如下圖? 2 ?所示可以知道? TTS ?支持的語言。

Android TTS學習——TTS初體驗

2?TTS ?語言選擇

??? 如果勾選“ Always?use?my?settings ?”時要注意,設置了這個選項后那么我們就不能在程序中對 speech?rate ?和? Languages ?進行設置了,這里的設置回覆蓋我們程序中的設置。

TTS功能需要有TTS?Engine的支持,下面我們就來了解下android提供的TTS?Engine。

Android使用了叫Pico的支持多種語言的語音合成引擎,Pico在后臺負責把分析輸入的文本,把分本分成他能識別的各個片段,再把合成的各個語音片段以聽起來比較自然的方式連接在一起,這個過程Android系統幫我們做,我們只把他當做一個神奇的過程就可以了。

TTS?engine 依托于當前 ?Android?Platform? 所支持的幾種主要的語言: ?English? ?French? ?German? ?Italian? Spanish? 五大語言 ? (暫時也是沒有對中文提供支持)。 ? TTS 可以將文本隨意的轉換成以上任意五種語言的語音輸出。與此同時,對于個別的語言版本將取決于不同的時區,例如:對于 ?English? ,在 ?TTS? 中可以分別輸出美式和英式兩種不同的版本 ?

二. ? 實例分析

下面我們先做一個具體的實例來親自體會一下Android的TTS的效果。

我們做一個簡單的輸入英文句子然后朗讀出來的例子,了解Android的TTS使用方法。

在具體做之前給個AndroidTTS的API的鏈接,

http://androidappdocs.appspot.com/reference/android/speech/tts/package-summary.html

可以先看下大概了解TTS提供的功能。

Android TTS學習——TTS初體驗

圖3?Android?TTS?API

可以看到TTS提供了兩個接口和兩個類。

我們希望做的效果如下:

Android TTS學習——TTS初體驗

圖4?實現效果圖

上面一個輸入框,點擊Speak按鈕則朗讀上面的文字內容。

創建一個Android工程,工程名為AndroidTTSDemoFirst,其中SDK必須選擇1.6版本及以上。

其中Main.xml文件很簡單,如下所示:

?

  1. <? xml ? version = "1.0" ? encoding = "utf-8" ?> ??
  2. < LinearLayout ? xmlns:android = "http://schemas.android.com/apk/res/android" ??
  3. ???? android:orientation = "vertical" ??
  4. ???? android:layout_width = "fill_parent" ??
  5. ???? android:layout_height = "fill_parent" ??
  6. ???? > ??
  7. ???? < EditText ? android:id = "@+id/inputText" ???
  8. ???????????????? android:hint = "Input?the?text?here!" ???
  9. ???????????????? android:layout_width = "fill_parent" ???
  10. ???????????????? android:layout_height = "wrap_content" > ??
  11. ???????????????? </ EditText > ??
  12. ???? < Button ? android:text = "Speak" ???
  13. ???????????????? android:id = "@+id/speakBtn" ???
  14. ???????????????? android:layout_width = "wrap_content" ???
  15. ???????????????? android:layout_height = "wrap_content" ??
  16. ???????????????? android:layout_gravity = "center_horizontal" ??
  17. ???????????????? android:enabled = "false" ??
  18. ???????????????? > </ Button > ??
  19. </ LinearLayout > ??

?

Java文件的編寫:

要使用TTS得實現OnInitListener接口

?

  1. public ? class ?AndroidTTSDemoFirst? extends ?Activity? implements ?OnInitListener?{??
  2. ???? /**?Called?when?the?activity?is?first?created.?*/ ??
  3. ???? @Override ??
  4. ???? public ? void ?onCreate(Bundle?savedInstanceState)?{??
  5. ???????? super .onCreate(savedInstanceState);??
  6. ????????setContentView(R.layout.main);??
  7. ????}??
  8. ?? //實現TTS初始化接口 ??
  9. ???? @Override ??
  10. ???? public ? void ?onInit( int ?status)?{??
  11. ???????? //?TODO?Auto-generated?method?stub ??
  12. ??????????
  13. ????}??
  14. }??

?

接著定義好下面要用到的幾個變量:

?

  1. private ?EditText?inputText?=? null ;??
  2. private ?Button?speakBtn?=? null ;??
  3. ??? private ? static ? final ? int ?REQ_TTS_STATUS_CHECK?=? 0 ;??
  4. ??? private ? static ? final ?String?TAG?=? "TTS?Demo" ;??
  5. private ?TextToSpeech?mTts;??

?

雖然安裝Android1.6版本及之后的Android機器都默認安裝了TTS引擎,但某些設備可能會因為存儲容量的限制而缺少安裝和語言對應的資源文件,因此在使用TTS前,得先要檢查是否安裝了TTS語言數據,在onCreate函數中添加以下內容:

?

  1. //檢查TTS數據是否已經安裝并且可用 ??
  2. ??Intent?checkIntent?=? new ?Intent();??
  3. ??checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);??
  4. ??startActivityForResult(checkIntent,?REQ_TTS_STATUS_CHECK);??

?

這里啟動一個新的Intent去檢查TTS數據是否已經安裝,我們根據其返回的結果進行處理,如下所示:

?

  1. protected ?? void ?onActivityResult( int ?requestCode,? int ?resultCode,?Intent?data)?{??
  2. ???????? if (requestCode?==?REQ_TTS_STATUS_CHECK)??
  3. ????????{??
  4. ???????????? switch ?(resultCode)?{??
  5. ???????????? case ?TextToSpeech.Engine.CHECK_VOICE_DATA_PASS:??
  6. ???????????????? //這個返回結果表明TTS?Engine可以用 ??
  7. ????????????{??
  8. ????????????????mTts?=? new ?TextToSpeech( this ,? this );??
  9. ????????????????Log.v(TAG,? "TTS?Engine?is?installed!" );??
  10. ??????????????????
  11. ????????????}??
  12. ??????????????????
  13. ???????????????? break ;??
  14. ???????????? case ?TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA:??
  15. ???????????????? //需要的語音數據已損壞 ??
  16. ???????????? case ?TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA:??
  17. ???????????????? //缺少需要語言的語音數據 ??
  18. ???????????? case ?TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME:??
  19. ???????????????? //缺少需要語言的發音數據 ??
  20. ????????????{??
  21. ???????????????? //這三種情況都表明數據有錯,重新下載安裝需要的數據 ??
  22. ????????????????Log.v(TAG,? "Need?language?stuff:" +resultCode);??
  23. ????????????????Intent?dataIntent?=? new ?Intent();??
  24. ????????????????dataIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);??
  25. ????????????????startActivity(dataIntent);??
  26. ??????????????????
  27. ????????????}??
  28. ???????????????? break ;??
  29. ???????????? case ?TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL:??
  30. ???????????????? //檢查失敗 ??
  31. ???????????? default :??
  32. ????????????????Log.v(TAG,? "Got?a?failure.?TTS?apparently?not?available" );??
  33. ???????????????? break ;??
  34. ????????????}??
  35. ????????}??
  36. ???????? else ??
  37. ????????{??
  38. ???????????? //其他Intent返回的結果 ??
  39. ????????}??
  40. ????????}??

?

如果返回CHECK_VOICE_DATA_PASS表示檢查成功,可以新建一個 ? TextToSpeech ? ,否則就去下載 ? TTS數據。

當TTS數據檢測成功創建一個TextToSpeech后,就會調用接口OnInitListener中定義的回調函數

?

  1. ? //實現TTS初始化接口 ??
  2. @Override ??
  3. public ? void ?onInit( int ?status)?{??
  4. ???? //?TODO?Auto-generated?method?stub ??
  5. ???? //TTS?Engine初始化完成 ??
  6. ???? if (status?==?TextToSpeech.SUCCESS)??
  7. ????{??
  8. ???????? int ?result?=?mTts.setLanguage(Locale.US);??
  9. ???????? //設置發音語言 ??
  10. ???????? if (result?==?TextToSpeech.LANG_MISSING_DATA?||?result?==?TextToSpeech.LANG_NOT_SUPPORTED)??
  11. ???????? //判斷語言是否可用 ??
  12. ????????{??
  13. ????????????Log.v(TAG,? "Language?is?not?available" );??
  14. ????????????speakBtn.setEnabled( false );??
  15. ????????}??
  16. ???????? else ??
  17. ????????{??
  18. mTts.speak( "This?is?an?example?of?speech?synthesis." ,?TextToSpeech.QUEUE_ADD,? null );??
  19. ????????????speakBtn.setEnabled( true );??
  20. ????????}??
  21. ????}??
  22. ??????
  23. }??

?

在這個回調函數里,我們設置語言,然后就可以進行使用 ? TTS引擎進行操作了。

創建一個TextToSpeech是需要占用資源的,因此我們要適時的釋放這個資源:

?

  1. @Override ??
  2. protected ? void ?onPause()?{??
  3. ???? //?TODO?Auto-generated?method?stub ??
  4. ???? super .onPause();??
  5. ???? if (mTts?!=? null )??
  6. ???????? //activity暫停時也停止TTS ??
  7. ????{??
  8. ????????mTts.stop();??
  9. ????}??
  10. }??
  11. ??
  12. @Override ??
  13. protected ? void ?onDestroy()?{??
  14. ???? //?TODO?Auto-generated?method?stub ??
  15. ???? super .onDestroy();??
  16. ???? //釋放TTS的資源 ??
  17. ????mTts.shutdown();??
  18. ????}??

?

最后,在onCreate函數中設置 ? EditText和Button的使用:

?

  1. ?????inputText?=?(EditText)findViewById(R.id.inputText);??
  2. ?????speakBtn?=?(Button)findViewById(R.id.speakBtn);??????????
  3. ??inputText.setText( "This?is?an?example?of?speech?synthesis." );??
  4. ?????speakBtn.setOnClickListener( new ?OnClickListener()?{??
  5. ??
  6. public ? void ?onClick(View?v)?{??
  7. ???? //?TODO?Auto-generated?method?stub ??
  8. ????mTts.speak(inputText.getText().toString(),?TextToSpeech.QUEUE_ADD,? null );??
  9. ???? //朗讀輸入框里的內容 ??
  10. }??
  11. });??

?

至此,我們的 ? Demo就完成了,當啟動程序后,首先會朗讀“ This?is?an?example?of?speech?synthesis?in?English. ? ”,然后你在EditText中輸入內容,點擊Speak按鈕就能把內容給朗讀出來。

文章對應的完整代碼例子可以在這里下載:

http://download.csdn.net/source/2610740

注:文章參加“ ?首屆Google暑期大學生博客分享大賽——2010 Andriod篇

Android TTS學習——TTS初體驗


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 青青青青久久国产片免费精品 | 欧美日韩亚洲精品一区二区三区 | 国产第一色 | 成人影院在线观看视频 | 国产精品亚洲精品影院 | 久热免费在线视频 | 国产尤物福利视频一区二区 | 欧美三级在线观看不卡视频 | 国产欧美亚洲精品综合在线 | 亚欧乱色精品免费观看 | 婷婷免费在线 | 草草影院1 | 四虎在线影视 | 天天爽天天碰狠狠添 | 久99久精品视频免费观看v | 日韩视频网址 | 中国特级黄一级真人毛片 | 福利社91| 免费国产a国产片高清不卡 免费国产阿v视频在线观看 | 狠狠色噜噜狠狠狠狠五月婷 | 色综合五月婷婷 | 国产在线视频凹凸分类 | 一区二区在线播放福利视频 | 欧美一级精品 | 亚洲欧美国产视频 | 五月天婷婷在线观看高清 | 九色视频极品论坛区 | 最近免费中文字幕大全免费版视频 | 婷婷亚洲视频 | 成人短视频在线在线观看 | 国产精品国产精品 | 国产精品久久久久久久久99热 | 久久lu| 视频在线一区二区三区 | 国产一区二区成人 | 日本私人影院 | 91精品日本久久久久久牛牛 | 青青青免费手机版视频在线观看 | 久久国产免费观看精品3 | 一个色综合网 | 啪啪色视频 |