首頁(yè)>>廠(chǎng)商>>軟件開(kāi)發(fā)商>>Microsoft

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

2011/01/06

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

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

  什么是SAPI?

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

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

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

  (2)Voice Dictation API。聽(tīng)寫(xiě)輸入,即語(yǔ)音識別接口。

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

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

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

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

  安裝SAPI SDK

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

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

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

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

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

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

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

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

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

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

  朗讀文本

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

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

  朗讀文本文件

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

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

  將文本轉換成聲音文件

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

  因為 將一段比較長(cháng)的文本轉換成聲音文件,通常是一個(gè)比較長(cháng)的過(guò)程,所以在這里我們創(chuàng )建一個(gè)專(zhuān)門(mén)的工作者線(xiàn)程來(lái)負責文本的轉換,而界面線(xiàn)程則負責顯示轉換的進(jìn)度。

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

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

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

  控制SpVoice的閱讀

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


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

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

IT168



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

熱點(diǎn)專(zhuān)題:  語(yǔ)音合成TTS 語(yǔ)音識別ASR  
亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 定结县| 镇沅| 平罗县| 图木舒克市| 泰顺县| 乌拉特中旗| 天柱县| 麦盖提县| 郸城县| 奈曼旗| 屯留县| 丰都县| 木兰县| 澜沧| 衢州市| 霍林郭勒市| 舒兰市| 和硕县| 沅陵县| 远安县| 红桥区| 贺兰县| 天全县| 巴马| 上犹县| 茌平县| 吉木乃县| 襄汾县| 苗栗县| 临沂市| 巴彦淖尔市| 崇左市| 阜平县| 凤庆县| 德庆县| 花莲市| 龙里县| 古浪县| 津南区| 建平县| 武安市| http://444 http://444 http://444 http://444 http://444 http://444