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

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

2011/01/06

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

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

  什么是SAPI?

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

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

  (1)Voice Commands API。對應(yīng)用程序進(jìn)行控制,一般用于語音識別系統(tǒng)中。識別某個命令后,會調(diào)用相關(guān)接口是應(yīng)用程序完成對應(yīng)的功能。如果程序想實(shí)現(xiàn)語音控制,必須使用此組對象。

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

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

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

  (5)Audio Objects API。封裝了計(jì)算機(jī)發(fā)音系統(tǒng)。

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

  安裝SAPI SDK

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

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

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

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

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

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

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

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

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

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

  朗讀文本

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

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

  朗讀文本文件

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

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

  將文本轉(zhuǎn)換成聲音文件

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

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

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

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

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

  控制SpVoice的閱讀

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


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

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

IT168



相關(guān)閱讀:
微軟Mediaroom平臺:實(shí)現(xiàn)電信級的電視服務(wù) 2010-12-29
徐工集團(tuán)重構(gòu)CRM提升企業(yè)客戶關(guān)系管理 2010-12-22
微軟發(fā)布新版iPhone客戶端——必應(yīng)2.0 2010-12-17
微軟Lync整合統(tǒng)一通信 和辰信息順勢而為 2010-12-15
2011年:微軟計(jì)劃在CRM領(lǐng)域超越Salesforce 2010-12-14

熱點(diǎn)專題:  語音合成TTS 語音識別ASR