Android TTS學習(補充)--我能說中文

 

一. 基礎知識

Android 從1.6 版本開始支持Text To Speech ,使用的是Pico 語音合成引擎,但是隻支持 English 、 French 、 German 、 Italian 和 Spanish 五大語言 , 暫時沒有對中文提供支持。因此使用 Android 默認的 TTS Engine 是沒法朗讀中文的。

不過有開源項目 eyes-free ( http://code.google.com/p/eyes-free/ , Android 上的 TTS 功能應該也是基於這個開源項目提供的)除了提供 Pico 外,還把支持其他更多語言語音合成的另一個 TTS 引擎 eSpeak 也移植到了 Android 平臺,其中就支持中文的語音合成。

因此在安裝了 eyes-free 提供的 TTS Service Extended 的 apk 後,就可以在程序中使用 eyes-free 提供的 TTS library ,並把 TTS Engine 設置爲不是默認的 Pico ,而是 eSpeak ,就可以實現朗讀中文了。不過經過測試,實際的效果還是很差的,只能說勉強可以朗讀而已。

二. 實例分析

下面我們就通過一個具體的例子來說明朗讀中文的實現過程。

希望實現的效果和之前的類似:

 

圖 1 實現效果圖

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

首先我們要到 eyes-free 那下載需要的 TTS library 的 jar 包 (http://code.google.com/p/eyes-free/downloads/detail?name=TTS_library_stub_3.0_market.jar&can=2&q=) 。

創建一個 Android 工程,工程名爲 NiHaoTTS ,並且把下載的 jar 包放在 assets 文件夾下。右鍵點擊工程,選擇 properties , Java Build Path , Libraries , Add JARs, 往工程中添加進 assets 下的 jar 包 , 如下圖所示:

圖2 添加 TTS library jar 包

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

 

Java 文件的編寫:

Java 文件和之前的類似,只是因爲使用了 eyes-free 的 TTS API ,而不是 Android 自帶的 TTS API ,因此有些許改變。相關的 API 參考: http://eyes-free.googlecode.com/svn/trunk/documentation/tts/com/google/tts/package-summary.html ,其中我們可以看到基本和 Android 的 API ()類似,其中一個明顯的區別是創建 TTS 對象這裏使用的是 TextToSpeechBeta ,而之前我們使用的是 TextToSpeech


Java 完整的代碼爲:

 

基本和我們之前學過的類似,其中不同的地方有:


1 TTS 的初始化回調函數多了一個版本號參數 version,

public void onInit( int status, int version) ,

如果返回的版本號 version 等於 -1 ,則表明還沒有安裝 eyes-free 提供的 TTS Service Extended ,提示進行下載和安裝。

// 提示安裝所需的 TTS 數據

alertInstallEyesFreeTTSData();


主要就是彈出對話框進行提示,然後鏈接到 eyes-free 的網站進行下載對應的 apk

// 彈出對話框提示安裝所需的 TTS 數據

private void alertInstallEyesFreeTTSData()

{

Builder alertInstall = new AlertDialog.Builder( this )

.setTitle( " 缺少需要的語音包 " )

.setMessage( " 下載安裝缺少的語音包 " )

.setPositiveButton( " 確定 " , new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

// 下載 eyes-free 的語音數據包

String ttsDataUrl = "http://eyes-free.googlecode.com/files/tts_3.1_market.apk" ;

Uri ttsDataUri = Uri.parse (ttsDataUrl);

Intent ttsIntent = new Intent(Intent. ACTION_VIEW , ttsDataUri);

startActivity(ttsIntent);

}

})

.setNegativeButton( " 取消 " , new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

finish();

}

});

alertInstall.create().show();

}


下載完進行安裝,然後重新啓動程序就可以運行。

2 )如果已經安裝了,則可以進設置 TTS 引擎和需要合成的語言。

// 設置 TTS 引擎, com.google.tts eSpeak 支持的語言包含中文,使用 Android 系統默認的 pico 可以設置爲 com.svox.pico

mTTS .setEngineByPackageNameExtended( "com.google.tts" );

int result = mTTS .setLanguage(Locale. CHINA );

// 設置發音語言


其中如果設置爲 com.google.tts 則表示使用 eSpeak 引擎,其包括對中文語音合成的支持。如果設置爲 com.svox.pico 則表示使用 Pico 引擎,實際效果就是使用 Android 自帶的 Pico 的效果,不過只支持 5 中語言,不支持中文。


除了這兩塊,其他和我們之前的程序基本一樣。

然後就可以運行程序。因爲模擬器開始時沒有安裝需要的 eyes-free TTS Service Extended apk ,因此會彈出提示對話框,點擊確定開始下載,下載完進行安裝,如下圖所示。

圖3 安裝eyes-free的TTS

安裝完會在應用程序中看到對應的圖標,並且在 TTS 的設置中也會增加 eSpeak TTS 一項,如下圖所示:

圖4 安裝了eyes-free的TTS

安裝完後就可以再次打開 NiHaoTTS 程序,這時會有個選擇詢問使用哪個 TTS ,選擇第二項,然後就可以在輸入框中輸入中文來朗讀了。

圖5 選擇TTS

不過經過簡單測試就知道了,中文朗讀的效果基本沒法實際使用的。

 

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

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

 

 

 

 

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