Android TTS學習——繼續愛的表白

一. 簡單介紹

在上一篇裏

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

我們講到了TTS 最主要的一個API

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

其中我們介紹了前兩個參數,第三個參數設置了null ,並沒有具體介紹。

而且我們在介紹Android TTS 提供的功能時,說到TTS 提供了兩個接口,第一個初始化接口OnInitListener 我們已經使用過了,而第二個接口OnUtteranceCompletedListener 我們還沒有使用到。

首先我們就來簡單介紹一下這個接口的使用方式。TTS 引擎進行語音合成的每個語音片段叫做"utterance ", 而且在送給speak 函數進行語音合成時,可以爲這次的語音片段"utterance " 設置一個IDOnUtteranceCompletedListener 這個接口裏定義了一個回調函數,當設置了ID 的語音片段"utterance " 語音合成結束後就會調用這個回調函數。然後我們就可以在這回調函數裏進行我們需要的操作,比如在某個特定ID 的語音片段結束後播放音樂,或者跟蹤記錄哪些文本內容已經被朗讀等。

       下面利用這個接口的功能完成一個Demo 例子,朗讀一段愛的表白,並且在程序退出後可以記住這次表白到哪了,下次在她再次打開程序時,就可以繼續這愛的表白。

二. 實例分析

我們希望做的效果如下:

1 實現效果圖

在界面上體現不出這個Demo 的特點,除了一長串英文的愛的表白外,還有一個Speak 按鈕。但當點擊了Speak 按鈕開始朗讀上面的表白後,在沒有讀完就退出程序後,下次再啓動後還會接着上次的繼續朗讀。

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

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

Java 文件的編寫:

這次要實現 OnInitListener OnUtteranceCompletedListener 兩個接口

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

因爲通過前面的兩個 Demo ,我們知道已經安裝了 TTS 需要的數據,因此這裏我們可以在 onCreate 函數中直接創建一個 TextToSpeech 實例,

成功創建一個 TextToSpeech 後,就會調用接口 OnInitListener 中定義的回調函數

和前面的 Demo 相比,這裏多了一句 mTts .setOnUtteranceCompletedListener( this );

就是設置語音片段結束後的回調函數。

 

接着在 onCreate 函數中設置 EditText Button 的使用:

SpeakBtn onClick 事件中,先把輸入框中的內容按 ',' '.' 分割成一個個短的部分並保存在字符串數組中,然後調用我們寫的 speakText() 函數來進行朗讀。

speakText() 函數的定義如下:

lastUtterance 變量保存上一個語音片段的 ID params HashMap<String, String> 類型,鍵值對形式的變量,在這裏我們的鍵 name TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID ,是一個 UTTERANCE_ID ,值 value String.valueOf(i) ,其實只要是任何字符串變量都行,爲了方便我們設置的爲有順序的數字。然後把這個鍵值對變量添加給 speak 函數, TTS 引擎就會在這個語音片段朗讀結束後通知我們,調用設置好的回調函數 onUtteranceCompleted(String utteranceId) ,這個回調函數的內容如下:

很簡單,主要就是把當前剛結束的這個語音片段 ID--utteranceId 保存到 lastUtterance 變量中,這樣在程序退出時,我們就可以保存這個變量,

首先是釋放 TTS 資源,然後把 lastUtterance 變量的值以鍵值對的方式保存在系統中,這樣下次啓動程序時 lastUtterance 就可以從系統中讀取上次退出時保存的值。在 onCreate 函數中添加獲取保存的 lastUtterance 代碼:

至此,這個 Demo 完成了,運行後點擊 Speak 按鈕會朗讀文本框中的經典的愛的表白,一小段一小段朗讀,每朗讀完一小段程序都會調用回調函數 onUtteranceCompleted 記錄剛朗讀完的那個小段的 ID ,當所有的表白沒朗讀完就按返回退出程序時,程序在 onDestroy() 裏把記錄着的片段 ID 保存在系統中,這樣下次再次打開程序時就可以接着上次繼續這愛的表白。

 

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

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