国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.Net開發中文語音應用程序

2024-07-10 13:12:58
字體:
來源:轉載
供稿:網友


收集最實用的網頁特效代碼!

隨著.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引擎當前所處理語言。打開"控制面板",打開"語音"配置項目,可以看到在這里我們可以指定當前可以對何種語言進行識別或者合成,還可以配置相關的硬件設備以及控制語速。(如圖4)

在"文字-語音轉換"的"語音選擇"組合框中選擇簡體中文(microsoft simplified chinese)。這樣就可以合成漢語文字了。
回到vs.net,f5編譯運行剛才的應用程序,在文本框里輸入漢字,戴上耳機,點擊"朗讀"按鈕,開始體驗新一代的智能人機界面吧,呵呵:)
--------------------------------------------------------------------------------
4. 結論
微軟為語音人機界面提供了強大的平臺,.net環境更使這種開發方便快捷。趕快去下載sapi5.1 sdk,讓你的應用程序"繪聲繪色",體現nature ui,let’s go!
--------------------------------------------------------------------------------
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 偏关县| 新乡县| 漳州市| 青冈县| 达日县| 永登县| 应用必备| 新建县| 九龙坡区| 合阳县| 金山区| 沂源县| 宁武县| 丰宁| 三明市| 铜梁县| 克东县| 崇礼县| 九龙城区| 剑川县| 东源县| 金华市| 宁城县| 新龙县| 连城县| 柞水县| 壶关县| 渑池县| 察隅县| 连山| 修水县| 嘉荫县| 勃利县| 宽甸| 江川县| 宁远县| 拉孜县| 汉中市| 鲁山县| 茌平县| 鲁山县|