首頁>>廠商>>軟件開發(fā)商>>Microsoft

微軟SAPI讓你的軟件能說會道

2011/01/06

  “沒聲音,再好的戲也出不來!边@雖然是一句廣告,但是也說出了一個道理,我們所開發(fā)的軟件,特別是一些多媒體軟件,要是能夠發(fā)出聲音,能說會道,將為我們的軟件增添不少光彩。同時,我們面臨的是一個老齡化的社會,將會有越來越多的視力不太好的老年人成為我們的用戶,開始使用我們的軟件,如果我們的軟件能說會道,可以用語音的方式提示用戶進行操作,這將大大增加軟件的可用性,從而獲得用戶的喜愛。

  那么如何才能讓我們的軟件能說會道呢?別著急,微軟有解決辦法,用微軟提供的SAPI就可以讓我們的軟件能說會道。

  什么是SAPI?

  軟件中的語音技術主要包括兩方面的內容,一個是語音識別(speech recognition) ,另外一個是語音合成(speech synthesis),也即是文本語音轉換系統(TTS)。TTS系統使用合成語音合成文本字符串和文件到聲音音頻流。而語音識別系統則是轉換人類的聲音語音流到可讀的文本字符串或者文件。這兩個工作,都是通過各種語音引擎來完成的。微軟所提供的SAPI (全稱The Microsoft Speech API),正是在應用程序和語音引擎之間提供一個高級別的接口,它實現了所有必需的對各種語音引擎的實時的控制和管理等低級別的細節(jié)。語音引擎通過DDI層(設備驅動接口)和SAPI進行交互,應用程序通過API層和SAPI通信。通過使用這些API,我們可以快速開發(fā)在語音識別或語音合成方面應用程序。SAPI 應用程序編程接口(API)明顯的減少了構建一個使用語音識別和文本語音轉換的應用程序所需要的高層代碼,使語音技術更加容易使用并且更加擴大了應用的范圍。雖然現在SAPI不是業(yè)界標準,但是應用非常廣泛。

  SAPI包括以下組件對象(接口):

  (1)Voice Commands API。對應用程序進行控制,一般用于語音識別系統中。識別某個命令后,會調用相關接口是應用程序完成對應的功能。如果程序想實現語音控制,必須使用此組對象。

  (2)Voice Dictation API。聽寫輸入,即語音識別接口。

  (3)Voice Text API。完成從文字到語音的轉換,即語音合成。

  (4)Voice Telephone API。語音識別和語音合成綜合運用到電話系統之上,利用此接口可以建立一個電話應答系統,甚至可以通過電話控制計算機。

  (5)Audio Objects API。封裝了計算機發(fā)音系統。

  其中Voice Text API,就是微軟TTS引擎的接口,通過它我們可以很容易地建立功能強大的文本語音程序,金山詞霸的單詞朗讀功能就用到了這些API,而目前幾乎所有的文本朗讀工具都是用SAPI開發(fā)的。在這里,我們使用的主要就是Voice Text API。

  安裝SAPI SDK

  要使用SAPI讓我們的軟件能說會道,我們首先需要下載并安裝SAPI SDK。首先從微軟的網站上下載開發(fā)包: http://www.microsoft.com/speech/download/sdk51

  下載完畢后,首先安裝SpeechSDK51.exe,然后安裝中文語言補丁包SpeechSDK51LangPack,If 如果我們想將SAPI作為我們軟件的一部分,隨著我們的軟件重新發(fā)布,我們還需要安裝SpeechSDK51MSM.exe。

  安裝好SAPI SDK后,即可開始在VS2010中使用SAPI讓我們的軟件能說會道了。

  創(chuàng)建項目,添加SAPI的引用

  這里,我們將創(chuàng)建一個普通的WinForm程序,它可以利用TTS朗讀文本,也可以將文本文件通過TTS轉換為聲音文件,真正是一個“能說會道”的軟件。首先,我們在VS2010中創(chuàng)建一個WinForm程序,并且將窗體設計如下:

  Text Box用于顯示我們要閱讀的文本,而Combo Box控件用于顯示系統中已經安裝的所有語音,用戶可以從中選擇當前TTS使用的語音。

  要在我們的項目中使用SAPI,我們還需要給項目添加SAPI的引用。用VS2010提供的添加引用功能,在添加引用對話框的COM標簽頁面中找到Microsoft Speech Object Library,將其添加到項目中。

  SAPI所提供的各個類都在名字空間SpeechLib之下,所以在代碼中我們還需要使用using SpeechLib,表示我們將使用這個名字空間。這樣我們就可以使用SAPI所提供的各種類來實現語音合成或者是語音識別了。

  創(chuàng)建SpVoice對象,初始化SAPI

  SAPI的TTS都是通過SpVoice對象來完成的。SpVoice類是支持語音合成(TTS)的核心類。通過SpVoice對象調用TTS引擎,從而實現朗讀功能。 SpVoice類有以下主要屬性:      SpVoice有以下主要方法:      所以我們在窗體的構造函數中,首先需要完成SpVoice對象的創(chuàng)建,然后才能使用這個對象來朗讀文本。 因為系統中可能有多個語音可供選擇,所以我們在創(chuàng)建窗體的時候,同時需要用一個Combo Box控件列舉出系統中所有的語音,并且選中默認的第一個語音。當窗體創(chuàng)建后,用戶可以在這個Combo Box選擇自己喜歡的語音來朗讀文本。

  朗讀文本

  完成窗體的初始化,創(chuàng)建SpVoice對象之后,接下來我們就可以利用這個對象的Speak()方法來閱讀Text Box控件中的文本了。

  在這里我們使用了SpVoice對象的一個最重要的函數Speak(),它的第一個參數就是我們要朗讀的文本,而第二個參數則是朗讀的方式,有同步,異步,XML文件等等。 這樣,通過SpVoice對象的一個簡單函數,我們就可以朗讀Text Box控件中的文本內容了。

  朗讀文本文件

  更多時候,我們不是閱讀Text Box控件中輸入的文本,而是閱讀某些文本文件中的文字,這樣,讀取文本文件并將文字填充到Text Box控件中就成為一種必要了。

  這樣,我們就可以通過讀取文本文件中的內容,將其顯示到Text Box控件中,然后SpVoice就可以閱讀Text Box控件中的內容,也就是間接地朗讀了文本文件。

  將文本轉換成聲音文件

  除了直接朗讀文本之外,更多的時候,我們還需要將文本轉換成聲音文件。這樣我們可以將這些聲音文件隨身攜帶,想聽就聽。要將文本轉換為聲音文件,我們需要用到SpVoice的另外一個重要的函數SetOutput(),我們可以利用它將SpVoice的語音輸出某個WAV文件,從而實現將文本文件轉換為聲音文件。

  因為 將一段比較長的文本轉換成聲音文件,通常是一個比較長的過程,所以在這里我們創(chuàng)建一個專門的工作者線程來負責文本的轉換,而界面線程則負責顯示轉換的進度。

  跟直接朗讀文本相似,我們仍舊使用SpVoice的Speak()函數朗讀文本,只是我們通過指定SpVoice的AudioOutputStream屬性,將語音輸出到一個音頻文件,這樣就完成了文本文件到音頻文件的轉換。

  完成轉換工作者線程的創(chuàng)建后,我們就可以利用它來完成具體的轉換工作。在窗體的保存按鈕的單擊響應函數中,我們創(chuàng)建相應的工作者線程來進行文本的轉換。

  除了創(chuàng)建線程進行文本的轉換之外,為了讓我們的軟件更加易用,更加人性化,我們還需要響應線程事件,移動進度條的位置以反映轉換的進度,免得用戶以為軟件在比較長的轉換過程中死掉了。

  控制SpVoice的閱讀

  到這里,一個能說會道的軟件基本上已經完成了,但是,為了讓我們的軟件更加易用,我們還可以通過SpVoice提供的函數對SpVoice的行為進行控制,讓她更加符合我們的心意。例如,我們可以控制SpVoice的暫停和繼續(xù)。


  通過SpVoice提供的函數,對SpVoice的行為進行控制就是這么簡單。除了閱讀的暫停和繼續(xù)之外,我們還可以通過SetRate()函數設置聲音的語調,通過SetVolume()函數設置聲音的音量等等。這些函數就不在這里一一介紹了,留給大家自己去嘗試。

  現在,使用SAPI,即刻讓你的軟件能說會道。
共 3 頁: 1  2  3 

IT168



相關閱讀:
微軟Mediaroom平臺:實現電信級的電視服務 2010-12-29
徐工集團重構CRM提升企業(yè)客戶關系管理 2010-12-22
微軟發(fā)布新版iPhone客戶端——必應2.0 2010-12-17
微軟Lync整合統一通信 和辰信息順勢而為 2010-12-15
2011年:微軟計劃在CRM領域超越Salesforce 2010-12-14

熱點專題:  語音合成TTS 語音識別ASR