?? 利用microsoft text to speech技術(shù)編程 (2000年12.txt
字號:
利用Microsoft Text To Speech技術(shù)編程 (2000年12月19日)
本站更新 分類: 作者:孟兵 推薦: 閱讀次數(shù):491
(http://www.codesky.net)
--------------------------------------------------------------------------------
利用Microsoft Text To Speech技術(shù)編程
國防科技大學(xué)
孟兵
---- 金山詞霸2000進(jìn)行查字典時,可以同時讀出相應(yīng)的英文單詞,這大大方便用戶的使用。其實(shí),我們也可以在自己的應(yīng)用程序中加入這種功能。金山詞霸2000中利用的語音發(fā)聲就是微軟的Text To Speech技術(shù),簡稱為MSTTS。在金山詞霸2000的安裝過程中,將自動安裝MSTTS,我們也可以利用金山詞霸2000安裝光盤中的MSTTS.EXE文件單獨(dú)安裝。安裝成功后,系統(tǒng)的Windows目錄下將有一個Speech子目錄,其中安裝了相應(yīng)的支持文件。其中的Vcmd.exe作為進(jìn)程外的自動化服務(wù)器,提供將文本轉(zhuǎn)換為語音的服務(wù)。Vtxtauto.tlb為相應(yīng)的類型庫,對服務(wù)器的接口給出了與語言無關(guān)的描述。在注冊表中注冊了相應(yīng)的接口和自動化對象Speech.VoiceText.1。下面給出一個使用Delphi利用相應(yīng)接口進(jìn)行開發(fā)的簡單例子,程序可以讀出一個文本編輯控件中的文本。例子主要利用Win32的COM API進(jìn)行編程,該方法同樣適用于VC等開發(fā)語言。
---- 首先,選擇Project|Import Type Library菜單項(xiàng)檢查是否注冊了相應(yīng)的類型庫文件Vtxtauto.tlb,如果沒用選擇安裝目錄下的Vtxtauto.tlb文件進(jìn)行注冊。此時,Delphi將在Import子目錄下生成該類型庫的Object Pascal"包裝"文件VtxtAuto_TLB.Pas,打開該文件可以看到該自動化對象支持的接口較為簡單,只有一個IVTxtAuto接口,下面是該接口的說明:
IVTxtAuto = interface(IDispatch)
['{FF2C7A50-78F9-11CE-B762-00AA004CD65C}']
procedure Register(const pszSite:
WideString; const pszApp: WideString); safecall;
procedure Speak(const pszBuffer:
WideString; dwFlags: Integer); safecall;
procedure StopSpeaking; safecall;
procedure AudioPause; safecall;
procedure AudioResume; safecall;
procedure AudioRewind; safecall;
procedure AudioFastForward; safecall;
procedure Set_Callback(const Param1:
WideString); safecall;
procedure Set_Speed(pdwSpeed: Integer); safecall;
function Get_Speed: Integer; safecall;
procedure Set_Enabled(pdwEnabled: Integer); safecall;
function Get_Enabled: Integer; safecall;
function Get_IsSpeaking: WordBool; safecall;
property Callback: WideString write Set_Callback;
property Speed: Integer write Set_Speed;
property Enabled: Integer write Set_Enabled;
property IsSpeaking: WordBool read Get_IsSpeaking;
end;
---- 新建一個應(yīng)用程序,在新建的工程中加入VtxtAuto_TLB.Pas,并在主窗體單元中引用該文件。在主窗體中加入一個編輯控件(TEdit)和一個按鈕(TButton),在主窗體單元中說明全局變量IVTxtAuto1:IVTxtAuto,在主窗體的創(chuàng)建過程中加入如下代碼。
IVTxtAuto1:=nill;
CoInitialize(nil);//初始化COM庫
OleCheck(CoCreateInstance
(CLASS_VTxtAuto_,nil,CLSCTX_ALL,
IID_IVTxtAuto,IVTxtAuto1));//創(chuàng)建IVTxtAuto接口
IVTxtAuto1.Register('Demo1','Project1.Exe')
;//向服務(wù)器注冊
IVTxtAuto1.Set_Enabled(1);//使能TTS功能
IVTxtAuto1.Set_Speed(150);//設(shè)置語音速度
IVTxtAuto1.Speak('Hi,I am trying
to speak to you, Do you hear me?',
vtxtsp_VERYHIGH);//發(fā)聲
在Button1的Click事件處理過程中加入如下的代碼。
if IVTxtAuto1<>nil then
IVTxtAuto1.Speak(Edit1.Text,vtxtsp_VERYHIGH)
Else
ShowMessage( '服務(wù)器沒用初始化成功');
---- 編譯運(yùn)行程序就可以聽到相應(yīng)的Edit1編輯控件中文本的發(fā)音了。
---- 對于接口的其他方法可以參照類型庫的說明進(jìn)行使用,另外,也可以利用注冊的OLE自動化對象Speech.VoiceText.1進(jìn)行更為簡潔的開發(fā)。聲明變量msttsServer:OleVariant,利用如下的語句產(chǎn)生自動化對象,msttsServer:=CreateOleObject('Speech.VoiceText.1')。接著利用msttsServer自動化對象同樣可以調(diào)用前面介紹的接口方法,這和通常利用自動化對象對MS Word等進(jìn)行編程的方法一樣。
---- 利用相應(yīng)的屏幕取詞技術(shù),我們同樣可以實(shí)現(xiàn)金山詞霸2000的功能。以上程序在Win98和Delphi5.0下調(diào)試運(yùn)行通過。
--------------------------------------------------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -