c# 語音功能入門

來源:互聯網
上載者:User


   但是,這個方法本身並不知道你給的字串是什麼語言,所以需要我們它這個字串用什麼語言讀出。
SpVoiceClass 類的Voice 屬性就是用來設定語種的,我們可以通過SpVoiceClass 的GetVoices方法得到所有的語種列表,
然後在根據參數選擇相應的語種,比如設定語種為漢語如下所示:

private void SetChinaVoice()
{
  voice.Voice = voice.GetVoices(string.Empty,string.Empty).Item(0) ;
}    0表示是漢用,1234都表示英語,就是口音不同。    這樣,我們就設定了語種,如果結合發音方法,我們就可以設計出一個只發漢語語音的方法 private void SpeakChina(string strSpeak)
{
  SetChinaVoice() ;
  Speak(strSpeak) ;
}
   只發英語語音的方法也是類似的,上面程式裡有。    對於一段中英文混合的語言,我們讓程式讀出混合語音的方法就是:編程把這段語言的中英文分開,對於
中文調用SpeakChina方法,英文調用SpeakEnglishi方法;至於怎樣判斷一個字元是英文還是中文,我採用的是判斷
asc碼的方法,具體的類方法是通過AnalyseSpeak實現的。    這樣,對於一段中英文混合文字,我們只需把它作為參數傳遞給AnalyseSpeak就可以了,他能夠完成中英文
的混合發音。    當然,對於發音的暫訂、繼續、停止等操作,上面也給出了簡單的方法調用,很容易明白。    下面簡單介紹一下中文語音辨識的方法:

   先把該語音辨識的類原始碼貼在下面,然後再做說明: 隨 著.net技術深入人心,越來越多的程式員開始轉到.net平台上進行開發。然而,在新發布的.net speech SDK裡面並沒有對中文語音進行支援,目前支援中文的Speech SDK最高版本為Windows平台下的SAPI 5.1(),本文介紹如何在.net平台下利用SAPI5.1開發中文語音應用程式。
--------------------------------------------------------------------------------
目錄:
1. SAPI.51 SDK淺析以及安裝
2. 匯入COM對象到.Net
3. 用C#開發中文TTS應用程式樣本
4. 結論
5. 參考文獻
--------------------------------------------------------------------------------
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對象:
D:\Program Files\Common Files\Microsoft Shared\Speech>Tlbimp sapi.dll /out: DotNetSpeech.dll

在 安轉SDK以後,可以在D:\Program Files\Common Files\Microsoft Shared\Speech\目錄下面找到SAPI.dll,這裡面定義了SAPI的COM對象,用Tlbimp.exe工具將該dll轉換成.net平 台下的Assembly---DotNetSpeech.dll,轉換的過程會提示不少的警告(warning),但這部影響我們的開發,可以忽略。最 後,我們可以用ildasm查看DotnetSpeech.dll裡面的對象。
--------------------------------------------------------------------------------
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"(添加參考),在彈出的檔案選擇對話方塊中找到剛才產生的DotNetSpeech.dll。

圖(2)
開啟Form1.cs代碼檔案,在代碼開頭添加名字空間(注意大小寫)。
using DotNetSpeech;
這樣就實現了SAPI SDK的匯入,下面我們就可以開始編寫應用代碼了。本樣本示範如何把文本通過喇叭朗讀出來以及把文本轉化成語音訊號(Wave音效檔),程式介面(3):

以下為引用的內容:

//朗讀
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引擎當前所處理語言。開啟"控制台",開啟"語音"設定項目,可以看到在這裡我們可以指定當前可以對何種語言進行識別或者合成,還可以配置相關的硬體裝置以及控制語速。

在"文字-語音轉換"的"語音選擇"組合框中選擇簡體中文(Microsoft Simplified Chinese)。這樣就可以合成漢語文字了。

回到VS.Net,F5編譯運行剛才的應用程式,在文字框裡輸入漢字,戴上耳機,點擊"朗讀"按鈕,開始體驗新一代的智能人機介面吧,呵呵

轉自 http://blog.csdn.net/rmb147/archive/2009/02/05/3864108.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.