1. SAPI.51 SDK淺析以及安裝
SAPI SDK是微軟公司免費提供的語音應用開發套件,這個SDK中包含了語音應用設計介面(SAPI)、微軟的連續語音辨識引擎(MCSR)以及微軟的語音合成(TTS)引擎等等。目前的5.1版本一共可以支援3種語言的識別 (英語,漢語和日語)以及2種語言的合成(英語和漢語)。SAPI中還包括對於低層控制和高度適應性的直接語音管理、訓練嚮導、事件、文法編譯、資源、語音辨識(SR)管理以及TTS管理等強大的設計介面。其結構(1):
圖(1)
語音引擎則通過DDI層(裝置驅動介面)和SAPI(SpeechAPI)進行互動,應用程式通過API層和SAPI通訊。通過使用這些API,使用者可以快速開發在語音辨識或語音合成方面應用程式。
SAPI5.1 SDK可以從微軟網站下載:http://www.microsoft.com/speech/download/sdk51/ 需要安裝程式的有Speech SDK 5.1(68M)和5.1 Language Pack (81.5M)
2. 匯入COM對象到.Net
SAPI5.1的基於Windows平台的,通過COM介面進行調用。在.Net平台下要應用SAPI5.1,我們可以利用.Net Framework內建的強大工具TlbImp.exe來把SAPI SDK的COM對象匯入到.Net中。TlbImp.exe產生一個管制的封裝類,管理用戶端可以使用它。封裝類管理實際的COM對象的參考數。當封裝類當作收集的垃圾時,封裝類釋放掉它封裝的COM對象。當然,你也可以在VS.NET環境中通過從項目參考對話方塊選擇COM對象,實現COM對象的匯入,這個過程也是通過TlbImp.exe來完成的。
下面示範如何匯入SAPI的COM對象:
SAPI.dll的目錄在c:/Program Files/Common Files/Microsoft Shared/Speech
Tlbimp的目錄在C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin
在DOS下面運行命令:Tlbimp sapi.dll /out: DotNetSpeech.dll
在安轉SDK以後,可以在C:/Program Files/Common Files/Microsoft Shared/Speech/目錄下面找到SAPI.dll,這裡面定義了SAPI的COM對象,用Tlbimp.exe工具將該dll轉換成.net平台下的Assembly---DotNetSpeech.dll,轉換的過程會提示不少的警告(warning),但這部影響我們的開發,可以忽略。最後,我們可以用ildasm查看DotnetSpeech.dll裡面的對象。
3.添加引用並using DotNetSpeech;
4.進行編程
測試環境:VS.NET2005(C#)
注意:
語音辨識時,識別中英文要根據“語音特性”中你所選擇的語言而定。
進入“語音特性”可以通過C:/Program Files/Common Files/Microsoft Shared/Speech/sapi.cpl
也可以通過編程
按鈕事件://using System.Diagnostics;
ProcessStartInfo info = new ProcessStartInfo();
try
{
/*未註明的在system32檔案下,可以直接調用,註明地址的要寫上絕對路徑
選項 檔案名稱
---------------------------------------------------
Internet選項: inetcpl.cpl
ODBC資料來源管理: odbccp32.cpl
電話和數據機選項: telephon.cpl
電源選項: powercfg.cpl
協助工具功能選項: access.cpl
地區和語言選項: intl.cpl
日期和時間: timedate.cpl
聲音和音訊裝置: mmsys.cpl
滑鼠: main.cpl
添加或刪除程式: appwiz.cpl
添加硬體: hdwwiz.cpl
網路連接: ncpa.cpl
系統: sysdm.cpl
顯示: desk.cpl
使用者帳戶: nusrmgr.cpl
遊戲控制器: joy.cpl
語音: sapi.cpl(C:/Program files/Common files/Microsoft Shared/Speech)
Gateway Services for NetWare Nwc.cpl
紅外線 Irprops.cpl(在您安裝紅外線裝置之前,位於 C:/Windows/Driver cache/I386/Driver.cab )
-----------------------------------------------------
字型: Fonts
------------------------------------------------------
這些是常用的控制台中的選項。
*/
info.FileName = @"C:/Program files/Common files/Microsoft Shared/Speech/sapi.cpl";
Process.Start(info);
}
catch(Win32Exception win)
{
MessageBox.Show("出錯原因:" + win.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
try
{
SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice voice = new SpVoice();
voice.Speak(textBox1.Text, spFlags);
}
catch (Exception ee)
{
MessageBox.Show("Error", "SpeechApp", MessageBoxButtons.OK, MessageBoxIcon.Error);
}