微軟TTS語音引擎編程入門_第1頁
微軟TTS語音引擎編程入門_第2頁
微軟TTS語音引擎編程入門_第3頁
微軟TTS語音引擎編程入門_第4頁
微軟TTS語音引擎編程入門_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、我們都使用過一些某某詞霸的英語學(xué)習(xí)工具軟件,它們大多都有朗讀的功能,其實(shí)這就是利用的 Windows的TT(Text To Speech)語音引擎。它包含在 WindowsSpeech SDK開發(fā)包中。我們也可以使用此開發(fā)包根據(jù)自己的需要開發(fā)程序。雞 啄米下面對(duì)TTS功能的軟件開發(fā)過程進(jìn)行詳細(xì)介紹。一. SAPI SDK的介紹SAPI ,全稱是The Microsoft Speech API 。就是微軟的語音 API。由 Win dows Speech SDK提 供。Windows Speech SDK包含語音識(shí)別SR引擎和語音合成SS引擎兩種語音引擎。語音識(shí)別引擎用于識(shí)別語音命令,調(diào)用接口完

2、成某個(gè)功能,實(shí)現(xiàn)語音控制。 語音合成引擎用于將文字轉(zhuǎn)換成語音輸出。SAPI 包括以下幾類接口: Voice CommandAPI、Voice Dictation API、 Voice Text API 、Voice Telephone API 和 Audio Objects API 。我們要實(shí)現(xiàn)語 音合成需要的是 Voice Text API。目前最常用的 Windows Speech SDK版本有三種:5.1、5.3和5.4。Windows Speech SDK 5.1版本支持xp系統(tǒng)和server 2003 系統(tǒng),需要下載安裝。XP系統(tǒng)默認(rèn)只帶了個(gè)Microsoft Sam英文男聲語音庫,

3、想要中文引 擎就需要安裝 Windows Speech SDK 5.1。Windows Speech SDK 5.3 版本支持 Vista 系統(tǒng)和 Server 2008 系統(tǒng),已 經(jīng)集成到系統(tǒng)里。Vista和Server 2003默認(rèn)帶Microsoft lili中文女聲語音庫和Microsoft Anna 英文女聲語音庫。Windows Speech SDK 5.4版本支持 Windows7系統(tǒng),也已經(jīng)集成到系統(tǒng)里,不需要下載安裝。 Win7系統(tǒng)同樣帶了 Microsoft lili中文女聲語音庫和Microsoft Anna 英文女聲語音庫。Microsoft lili支持中英文混讀。二

4、. SAPI SDK的下載和安裝如果是在XP系統(tǒng)下進(jìn)行開發(fā)則需要下載 Microsoft Speech SDK 5.1,下載地址為:c根據(jù)微軟下載說明,有幾點(diǎn)需要注意:1. 如果你想下載例子程序、文檔、SAPI和用于開發(fā)的美國英文語音引擎, 請(qǐng)下載 SpeechSDK51.exe2. 如果你想使用日文和簡體中文引擎用于開發(fā),請(qǐng)下載SpeechSDK51.exe和 SpeechSDK51LangPach.exe3. 如果你想將語音引擎集成到你的產(chǎn)品跟產(chǎn)品一起發(fā)布,就下載SpeechSDK51MSM.exe4. 如果你僅想獲得XP系統(tǒng)下的Mike和Mary語音,就下載Sp5TTIntXP.exe。

5、5. 如果你只想要文檔請(qǐng)下載sapi.chm。下載完成后可先安裝引擎SpeechSDK51.exe再安裝中文語言補(bǔ)丁包 SpeechSDK51La ngPach.exe這樣就可以使用其中的中 文男聲語音庫了。如果想 要在 Vista 或 Win7 系統(tǒng)下使用 Mike、Mary 和 Microsoft Simplified Chinese 中文男聲語音庫也可以下載相應(yīng)的文件安裝。三. VC+環(huán)境配置如果是在XP系統(tǒng)下開發(fā),先安裝 SpeechSDK51.exe再安裝 SpeechSDK51LangPach.exe 假設(shè)安裝路徑為默認(rèn)的 C:Program Files'Microsoft

6、 Speech SDK5.1,則接下來需要配置 VC+ 以 VS2010為 例, 在Solution Exporer中的工程名上點(diǎn)右鍵,在右鍵菜單中選擇properties,彈出Property Pages對(duì)話框,然后在左側(cè)樹中選擇節(jié)點(diǎn)”VC+Directories “,在右側(cè)列表的 Include Directories處輸入” C:Program FilesMicrosoft SpeechInclude “,Library Directories 處輸入” C :Programi386 “。VS2005 VS2008和 VC6.0 可以 按照各自的方法設(shè)置。最后,在程序中使用語音引擎以前包

7、含頭文件和lib庫:#in clude "sapi.h"#in clude "sphelper.h"#pragma comme nt(lib, "sapi.lib")如果是在Vista或者Win7系統(tǒng)中開發(fā)的話,因?yàn)轭^文件和lib庫所在路 徑已默認(rèn)附加到編譯器了,所以不需手動(dòng)添加,直接在程序中包含頭文件和lib庫即可。四. SAPI接口的使用說明1. 基本朗讀過程的實(shí)現(xiàn)在使用語音引擎之前進(jìn)行初始化:ISpVoice *pSpVoice; /重要 COM接 口:CoI ni tialize(NULL);/ COM初始化/ 獲取 ISpV

8、oice 接口CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void*)&pSpVoice);獲取到 ISpVoice 接口以后,我們就可以通過 pSpVoice 指針調(diào)用 SAPI 接口了。我們可以設(shè)置音量: pSpVoice->SetVolume(80); 。 SetVolume 的參數(shù)即 音量的范圍在 0 到 100 之間??梢赃@樣朗讀字符串內(nèi)容: pSpVoice->Speak(string, SPF_DEFAULT, NULL);。這樣string 里的內(nèi)容就會(huì)

9、被朗讀出來了,第二個(gè)參數(shù) SPF_DEFAUL表 示使用默認(rèn)設(shè)置,包括同步朗讀的設(shè)置。異步朗讀可以設(shè)置成SPF_ASYNC同步 朗讀表示讀完 string 中的內(nèi)容, speak 函數(shù)才會(huì)返回,而異步朗讀則將字符串 送進(jìn)去就返回,不會(huì)阻塞。使用完語音引擎后應(yīng)執(zhí)行:pSpVoice->Release();:CoUninitialize();這樣資源被釋放,語音朗讀過程結(jié)束。以上就完成了一個(gè)簡單的語音合成朗讀的功能。2.ISpVoice 的成員函數(shù)雞啄米再簡單說明幾個(gè) ISpVoice 接口的成員函數(shù):HRESULT Speak(LPCWSTR *pwcs, DWORD dwFlags, U

10、LONG *pulStreamNumber);用于讀取字符串pwcs里的內(nèi)容。參數(shù)pwcs為要朗讀的字符串。dwFlags 是用于控制朗讀方式的標(biāo)志,具體意義可以查看文檔中的枚舉SPEAKFLAGSpulStreamNumber為輸出參數(shù),它指向本次朗讀請(qǐng)求對(duì)應(yīng)的當(dāng)前輸入流編號(hào),每次朗讀一個(gè)字符串時(shí)都會(huì)有一個(gè)流編號(hào)返回,異步朗讀時(shí)使用。HRESULT SetRate( long RateAdjust);/設(shè)置朗讀速度,取值范圍: -10 到 10HRESULT GetRate(long *pRateAdjust);/獲取朗讀速度HRESULT SetVoice(ISpObjectToken *

11、pToken); /設(shè)置使用的語音庫HRESULT GetVoice(ISpObjectToken*ppToken); /獲取語音庫HRESULT Pause ( void );/暫停朗讀HRESULT Resume ( void ); / 恢復(fù)朗讀/ 在當(dāng)前朗讀文本中根據(jù) lNumItems 的符號(hào)向前或者向后跳過指定數(shù) 量( lNumItems 的絕對(duì)值)的句子。HRESULT Skip(LPCWSTR *pItemType, long lNumItems, ULONG *pulNumSkipped);/播放WAV文件HRESULT SpeakStream(IStream *pStream

12、, DWORD dwFlags, ULONG *pulStreamNumber);/將聲音輸出到WAX文件HRESULT SetOutput(IUnknown *pUnkOutput,BOOL fAllowFormatChanges);HRESULT SetVolume(USHORT usVolume); / 設(shè)置音量,范圍: 0 到 100HRESULT GetVolume(USHORT *pusVolume); / 獲取音量HRESULT SetSyncSpeakTimeout(ULONG msTimeout); / 設(shè)置同步 朗讀超時(shí)時(shí)間,單位為毫秒HRESULT GetSyncSpea

13、kTimeout(ULONG *pmsTimeout); /獲取同步朗讀超時(shí)時(shí)間因?yàn)樵谕嚼首x時(shí), speak 函數(shù)是阻塞的,如果語音輸出設(shè)備被其他程 序占用, 則 speak 則會(huì)一直等待, 所以最好設(shè)置好超時(shí)時(shí)間, 超時(shí)后 speak 函數(shù) 自行返回。3.使用XML朗讀在進(jìn)行TTS開發(fā)時(shí)可以使用XML SAPI可以分析XML標(biāo)簽,通過XML能 夠?qū)崿F(xiàn)一些 ISpVoice 的成員函數(shù)的功能。比如設(shè)置語音庫、音量、語速等。此 時(shí)speak函數(shù)的dwFlags參數(shù)要設(shè)置為包含 SPF_IS_XM。如:/ 選擇語音庫 Microsoft Sam pSpVoice->speak(L"

14、;<VOICE REQUIRED='NAME=Microsoft Sam'/> 雞啄米 ", SPF_DEFAULT | SPF_IS_XML, NULL);/設(shè)置音量vVOLUME LEVEL='90'> 雞啄米 v/VOLUME>/設(shè)置語言<lang langid='804'>雞啄米 </lang>804 代表中文,409代表英文。如果用函數(shù) SpGetLanguageFromToker獲 取語言時(shí), 0x804 表示中文, 0x409 表示英文。五. Microsofot Speec

15、h SDK開發(fā)程序舉例:CoInitialize(NULL); / COM初始化CLSID CLSID_SpVoice;CLSIDFromProgID(_T("SAPI.SpVoice"), &CLSID_SpVoice);ISpVoice *pSpVoice = NULL;IEnumSpObjectTokens *pSpEnumTokens = NULL;/ 獲取 ISpVoice 接口if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL,CLSCTX_INPROC_SERVER, IID_ISpVoice, (void*

16、)&pSpVoice)return -1;/列舉所有的語音token,可以通過pSpEnumToken指向的接口得到if (SUCCEEDED(SpEnumTokens(SPCAT_VOICES, NULL, NULL, &pSpEnumTokens)ISpObjectToken *pSpToken = NULL;/依次獲取每個(gè) token 并朗讀字符串while (SUCCEEDED(pSpEnumTokens->Next(1, &pSpToken,NULL) && pSpToken != NULL) pSpVoice->SetVoice(

17、pSpToken); /設(shè)置當(dāng)前語音 token 為 pSpTokenpSpVoice->Speak(L"Hello Word世界你好 ",SPF_DEFAULT, NULL); / 朗讀中文和英文的混合字符串 pSpToken->Release(); /釋放 tokenpSpEnumTokens->Release(); /釋放pSpE nu mToke n接口pSpVoice->Release();:CoUninitialize();雞啄米通過調(diào)試和朗讀效果得出結(jié)論,Vista和Win7上的MicrosoftLili 語音庫可以中英文混讀, Mic

18、rosoft Speech SDK 5.1 中的中文男聲 Microsoft Simplified Chinese 語音庫朗讀英文的時(shí)候只能一個(gè)字母一個(gè)字母 的讀,Anna Mike、Sam只能讀英文,中文略過。那么 Microsoft Simplified Chinese 、Anna Mike、Sam怎樣實(shí)現(xiàn)中英 文混讀呢?雞啄米告訴大家,可以修改字符串,加入XMLS記,將中文和英文分 別處理,上面程序中 的字符串可以修改為: L"<lang langid='409'>Hello Word</lang> <lang langid=

19、9;804'> 世界你好 </lang>" 。這樣當(dāng)前語音庫不能讀 的語言會(huì)自動(dòng)選擇同性別的其他語音來讀。六. 如何制作SAPI組件安裝包SAPI 開發(fā)的程序想要正常運(yùn)行,必須保證計(jì)算機(jī)上安裝了 SAPI 組件, 所以我們的軟件發(fā)布時(shí)最好同時(shí)發(fā)布 SAPI核心組件的安裝程序,如果需要安裝 新的語言,還要有語言模塊。這就需要用到講 SDK下載時(shí)提到的SpeechSDK51MSM.exeSpeechSDK51MSM.exe 安裝完以后會(huì)生成三個(gè)文件夾: 1033、 1041和2052。 其中,1033下主要是用于英文的TTS和SR的.msm文件,1041下主要是用于日 文SR的.msm文件,2052下是用于中文TTS和SR的msm文件。我們要開發(fā)的是TTS程序,所以不需要SR的相關(guān)文件。英文TTS需要 包含 1033 下的這些文件:Sp5.msmSp5Intl.msm、Sp5itn.msm、Sp5TTInt.msm、 SpCommon.msm如果需要 Mike和Mary的語音還需Sp5TTIntXP.msm文件。如果 還要支持中文 TTS 則需再包含 2052下的文件: Sp5Intl.msm 、 Sp5itn.msm、 SP5TT

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論