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

微軟SAPI讓你的軟件能說會(huì)道

2011/01/06

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

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

  什么是SAPI?

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

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

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

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

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

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

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

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

  安裝SAPI SDK

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

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

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

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

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

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

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

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

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

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

  朗讀文本

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

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

  朗讀文本文件

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

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

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

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

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

  跟直接朗讀文本相似,我們?nèi)耘f使用SpVoice的Speak()函數(shù)朗讀文本,只是我們通過指定SpVoice的AudioOutputStream屬性,將語(yǔ)音輸出到一個(gè)音頻文件,這樣就完成了文本文件到音頻文件的轉(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)線程事件,移動(dòng)進(jìn)度條的位置以反映轉(zhuǎn)換的進(jìn)度,免得用戶以為軟件在比較長(zhǎng)的轉(zhuǎn)換過程中死掉了。

  控制SpVoice的閱讀

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


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

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

IT168



相關(guān)閱讀:
微軟Mediaroom平臺(tái):實(shí)現(xiàn)電信級(jí)的電視服務(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)一通信 和辰信息順勢(shì)而為 2010-12-15
2011年:微軟計(jì)劃在CRM領(lǐng)域超越Salesforce 2010-12-14

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