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

首頁 > 開發 > 綜合 > 正文

中英文語音合成與中文語音識別技術在c#中的應用(二)

2024-07-21 02:24:44
字體:
來源:轉載
供稿:網友

但是,這個方法本身并不知道你給的字符串是什么語言,所以需要我們它這個字符串用什么語言讀出。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就可以了,他能夠完成中英文的混合發音。

當然,對于發音的暫定、繼續、停止等操作,上面也給出了簡單的方法調用,很容易明白。



下面簡單介紹一下中文語音識別的方法:

先把該語音識別的類源代碼貼在下面,然后再做說明:

public class sprecognition

{

private static sprecognition _instance = null ;

private speechlib.ispeechrecogrammar isrg ;

private speechlib.spsharedrecocontextclass ssrcontex =null;

private system.windows.forms.control cdisplay ;

private sprecognition()

{

ssrcontex = new spsharedrecocontextclass() ;

isrg = ssrcontex.creategrammar(1) ;

speechlib._ispeechrecocontextevents_recognitioneventhandler rechandle =

new _ispeechrecocontextevents_recognitioneventhandler(contexrecognition) ;

ssrcontex.recognition += rechandle ;

}

public void beginrec(control tbresult)

{

isrg.dictationsetstate(speechrulestate.sgdsactive) ;

cdisplay = tbresult ;

}

public static sprecognition instance()

{

if (_instance == null)

_instance = new sprecognition() ;

return _instance ;

}

public void closerec()

{

isrg.dictationsetstate(speechrulestate.sgdsinactive) ;

}

private void contexrecognition(int iindex,object obj,speechlib.speechrecognitiontype type,speechlib.ispeechrecoresult result)

{

cdisplay.text += result.phraseinfo.gettext(0,-1,true) ;

}



}



我們定義了ssrcontex 和isrg為語音識別的上下文和語法,通過設置isrg的dictationsetstate方法,我們可以開始或結束識別,在上面的程序中是beginrec和closerec方法。cdisplay 是我們用來輸出識別結果的地方,為了能夠在大部分控件上都可以顯示結果,我用了一個control 類來定義它。當然,每次語音識別后都會觸發ispeechrecocontextevents_recognitioneventhandler 事件,我們定義了一個這樣的方法contexrecognition來響應事件,并且在這個方法里輸出識別結果。



這樣,中文語音處理的一些最基本的問題就有了一個簡單的解決方法,當然,這種方法還有很多不完善的地方,希望大家多提出批評意見,共同提高。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉尔市| 安平县| 巴中市| 廊坊市| 阳西县| 五寨县| 正安县| 九寨沟县| 宁国市| 西贡区| 赤城县| 淮北市| 镇宁| 长丰县| 甘谷县| 鄯善县| 中江县| 信丰县| 大冶市| 万全县| 涪陵区| 奈曼旗| 汕头市| 宁津县| 出国| 潍坊市| 蒙山县| 高平市| 虎林市| 夏津县| 泸溪县| 铅山县| 砚山县| 广河县| 平乡县| 丰原市| 铜川市| 南宫市| 资中县| 尚志市| 安龙县|