c# 實現初級的語音識別

iDotNetSpace發表於2009-07-01

目前支援中文的Speech SDK最高版本為Windows平臺下的SAPI 5.1(),本文介紹如何在.net平臺下利用SAPI5.1開發中文語音應用程式。 
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)。 
3. 用C#開發中文TTS應用程式示例 
下面通過一個例項來介紹如何利用C# 進行開發語音應用程式,開發環境為: 
作業系統: Windows 2000 中文版+ SP3 
.Net Framework: 1.0.3705(英文版) 
Visual Studio.Net 7.0.9466(英文版) 
首先,新建一個C#的Windows Application工程SpeechApp,在開發環境的右邊的解決方案管理器(Solution Explorer)中,新增DotNetSpeech物件庫。右鍵點選"Reference"(參考),選擇"Add Reference"(新增參考),在彈出的檔案選擇對話方塊中找到D:\Program Files\Common Files\Microsoft Shared\Speech\目錄下面找到SAPI.dll,
以下為引用的內容: 
//朗讀 
private void buttonSynthesis_Click(object sender, System.EventArgs e) 

try 

SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync; 
SpVoice Voice = new SpVoice(); 
Voice.Speak(this.textBoxText.Text, SpFlags); 

catch(Exception er) 

MessageBox.Show("An Error Occured!","SpeechApp", MessageBoxButtons.OK, MessageBoxIcon.Error); 


//生成聲音檔案(Wav) 
private void buttonTTStoWave_Click(object sender, System.EventArgs e) 

try 

SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync; 
SpVoice Voice = new SpVoice(); 
SaveFileDialog sfd = new SaveFileDialog(); 
sfd.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav"; 
sfd.Title = "Save to a wave file"; 
sfd.FilterIndex = 2; 
sfd.RestoreDirectory = true; 
if (sfd.ShowDialog()== DialogResult.OK) 

SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite; 
SpFileStream SpFileStream = new SpFileStream(); 
SpFileStream.Open(sfd.FileName, SpFileMode, false); 
Voice.AudioOutputStream = SpFileStream; 
Voice.Speak(txtSpeakText.Text, SpFlags); 
Voice.WaitUntilDone(Timeout.Infinite); 
SpFileStream.Close(); 


catch(Exception er) 

MessageBox.Show("An Error Occured!","SpeechApp", MessageBoxButtons.OK, MessageBoxIcon.Error); 


 

接下來,還要去控制皮膚配置Speech SDK引擎當前所處理語言。開啟"控制皮膚",開啟"語音"配置專案,可以看到在這裡我們可以指定當前可以對何種語言進行識別或者合成,還可以配置相關的硬體裝置以及控制語速。(如圖4)

在"文字-語音轉換"的"語音選擇"組合框中選擇簡體中文(Microsoft Simplified Chinese)。這樣就可以合成漢語文字了。 
回到VS.Net,F5編譯執行剛才的應用程式,在文字框裡輸入漢字,戴上耳機,點選"朗讀"按鈕,開始體驗新一代的智慧人機介面吧,呵呵:)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-608077/,如需轉載,請註明出處,否則將追究法律責任。

相關文章