国产探花免费观看_亚洲丰满少妇自慰呻吟_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來響應事件,并且在這個方法里輸出識別結果。



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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石阡县| 锡林浩特市| 安图县| 禹州市| 大田县| 蓝山县| 盈江县| 海伦市| 视频| 枣庄市| 察雅县| 万载县| 永安市| 海兴县| 横山县| 兴海县| 和田市| 亚东县| 南漳县| 涞水县| 邵东县| 襄城县| 梁河县| 临泉县| 兴义市| 香格里拉县| 丰顺县| 湖口县| 民权县| 自治县| 库尔勒市| 邓州市| 吴江市| 内黄县| 乡城县| 兰考县| 荃湾区| 清流县| 五河县| 咸阳市| 肥东县|