Android TTS學習——用五種外語說出“我愛你”

一. 簡單介紹

在上一篇裏

http://blog.csdn.net/ichliebephone/archive/2010/08/10/5802044.aspx

我們簡單的介紹了Android裏的TTS功能並實現了一個最簡單的Demo例子--AndroidTTSDemoFirst,在這篇文章中我們將具體介紹用到的TTS API,並給上一個Demo增加語言選擇功能,可以使用TTS引擎支持的 English French German Italian Spanish 5大語言來進行相應的語音合成,並用這 5 種外語向她說出“我愛你”。

二. 實例分析

我們希望做的效果如下:

圖1 實現效果圖

有了上一個例子做基礎,這個Demo比較好實現,主要是增加了一個語言選擇的控件Spinner,選擇不同的語言,就會用對應的語言表達“我愛你”。

接下來就邊實現這個Demo邊講解用到的TTS API。也是先創建一個Android工程,工程名爲AndroidTTSDemoSecond,其中SDK必須選擇1.6版本及以上。

其中Main.xml文件也還是很簡單,在前一個AndroidTTSDemoFirst例子的基礎上增加了一個Spinner控件, 如下所示:

Java文件的編寫:

因爲這個Demo例子只是在上一個AndroidTTSDemoFirst基礎上的增加,因此可以使用上一個編寫的java文件,只要把class名字改爲AndroidTTSDemoSecond,如下所示:

下面簡單介紹下上面代碼中和TTS相關的一些API使用。

首先是實現 OnInitListener 這個接口,這個接口中只有一個抽象函數 void  onInit( int  status) ,在 TextToSpeech 引擎初始化完成後調用,在這個函數裏就可以根據狀態 status(爲 TextToSpeech.SUCCESS 或者 TextToSpeech. Error )判斷TTS 初始化成功與否進行相應的操作。


 

接着在使用TTS 時,會先啓動一個 Activity 檢查 TTS 引擎需要的 TTS 數據是否已經安裝並且可用, checkIntent. setAction ( TextToSpeech .Engine. ACTION_CHECK_TTS_DATA );

這個 Activity會返回如下結果之一: CHECK_VOICE_DATA_PASS CHECK_VOICE_DATA_FAIL CHECK_VOICE_DATA_BAD_DATA CHECK_VOICE_DATA_MISSING_DATA 或者 CHECK_VOICE_DATA_MISSING_VOLUME

只有第一個結果 CHECK_VOICE_DATA_PASS 表明 TTS數據可用,其他都是數據不可用的結果,可以啓動一個 Activity 去安裝需要的 TTS 數據,

dataIntent.setAction(TextToSpeech.Engine. ACTION_INSTALL_TTS_DATA );


 

當數據可用時,就可以創建一個TextToSpeech 實例,

public TextToSpeech ( Context  context,  TextToSpeech.OnInitListener  listener)

這裏需要兩個參數,一個是 TTS 實例運行的 Context

另一個是初始化接口的實現,在實例的創建過程中,如果TTS 引擎沒有運行的話,則會初始化 TTS 引擎,並且在初始化完成後調用其第二個參數 listener


 

有了 TextToSpeech實例,接下來就可以對文本進行語音合成併發音了,對應的 API

public int speak ( String  text, int queueMode,  HashMap < String String > params)

這裏需要三個參數,第一個爲要合成的文本;

第二個爲使用 TTS隊列的方式,因爲使用TTS合成語音時需要時間,TTS引擎就會把還沒有輪到的部分放在其隊列中排隊,後來的內容有兩種使用隊列的方式: QUEUE_ADD   或者   QUEUE_FLUSH QUEUE_ADD 表示把當前需要合成的內容添加到 TTS隊列的後面,等前面的都完成了後再輪到他, QUEUE_FLUSH 表示清除隊列中原有的內容,直接使 TTS引擎對當前內容進行語音合成,一般來說適合比較緊急的情況使用,但因爲在 Android 中可能不止你一個程序使用 TTS 引擎,因此爲了不破壞其他人的數據,建議使用 QUEUE_ADD 參數;

第三個爲鍵值對錶示的一個參數,我們後面再來介紹,目前可以使其爲 null

 

前半部分簡單的介紹了前一個Demo 用到的 API ,下半部分添加這個 Demo 中新的語言選擇部分。

首先爲 Spinner 控件 新增加兩個變量,

接着添加 Spinner 的使用,

TTS 相關的部分是 Spinner 控件的 item selected事件的處理,

在選擇不同的 item時,爲 inputText 設置不同語言“我愛你”對應的文本,並且爲 TTS實例設置語言。

TTS 引擎設置語言的 API

public int setLanguage ( Locale  loc)

使用Locale 這個表示語言及國家區域的類來設置語言,目前支持 English French German Italian Spanish 5大語言, 返回的結果爲

LANG_AVAILABLE LANG_COUNTRY_AVAILABLE LANG_COUNTRY_VAR_AVAILABLE LANG_MISSING_DATA   LANG_NOT_SUPPORTED 。其中 LANG_MISSING_DATA   LANG_NOT_SUPPORTED 表示無法使用當前進行設置的語言,另外的幾個表示設置的語言有效。

    至此,增加了語言選擇的新的Demo 完成了,程序運行後可以選擇不同的語言說出“我愛你”,簡單效果圖如下所示:

簡單效果圖

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

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章