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

首頁 > 編程 > C# > 正文

在C#中實(shí)現(xiàn)語音合成與識(shí)別技術(shù)

2023-05-14 16:26:30
字體:
供稿:網(wǎng)友

如果我們自己能編寫一個(gè)中文發(fā)音和中文語音識(shí)別的軟件,那該有多酷!本文就介紹了在C#中借助于微軟公司開發(fā)的一個(gè)SASDK軟件來實(shí)現(xiàn)這個(gè)功能。

首先,我們需要安裝微軟的Speech Application SDK(SASDK),它的最新版本是 SAPI 5.1, 他能夠識(shí)別中、日、英三種語言,你可以在這里下載:

http://www.microsoft.com/speech/download/sdk51/

需要安裝這兩個(gè)文件Speech SDK 5.1和5.1 Language Pack,其中5.1 Language Pack可以選擇安裝支持的語言。  安裝好以后,我們就可以開始進(jìn)行語音程序的開發(fā)了。

下面我們?cè)O(shè)計(jì)一個(gè)能夠朗讀中英文混合語言的類:

我們將用單例模式實(shí)現(xiàn)該類,類的代碼如下,我們將詳細(xì)解釋:

 

public class Speach

{

  private static Speach _Instance = null ;

  private SpeechLib.SpVoiceClass voice =null;

  private Speach()

  {

BuildSpeach() ;

  }

public static Speach instance()

{

  if (_Instance == null)

_Instance = new Speach() ;

return _Instance ;

}

private void SetChinaVoice()

{

  voice.Voice = voice.GetVoices(string.Empty,string.Empty).Item(0) ;

}

private void SetEnglishVoice()

{

  voice.Voice = voice.GetVoices(string.Empty,string.Empty).Item(1) ;

}

private void SpeakChina(string strSpeak)

{

  SetChinaVoice() ;

  Speak(strSpeak) ;

}

private void SpeakEnglishi(string strSpeak)

{

  SetEnglishVoice() ;

  Speak(strSpeak) ;

}

public void AnalyseSpeak(string strSpeak)

{

  int iCbeg = 0 ;

  int iEbeg = 0 ;

  bool IsChina = true ;

  for(int i=0;i<strSpeak.Length;i++)

  {

char chr = strSpeak[i] ;

if (IsChina)

{

  if (chr<=122&&chr>=65)

  {

int iLen = i - iCbeg ;

string strValue = strSpeak.Substring(iCbeg,iLen) ;

SpeakChina(strValue) ;

iEbeg = i ;

IsChina = false ;

  }

}

else

{

  if (chr>122||chr<65)

  {

int iLen = i - iEbeg ;

string strValue = strSpeak.Substring(iEbeg,iLen) ;

this.SpeakEnglishi(strValue) ;

iCbeg = i ;

IsChina = true ;

  }

}

  }//end for

  if (IsChina)

  {

              int iLen = strSpeak.Length - iCbeg ; 

              string strValue = strSpeak.Substring(iCbeg,iLen) ; 

              SpeakChina(strValue) ;

  }

  else

  { 

              int iLen = strSpeak.Length - iEbeg ; 

              string strValue = strSpeak.Substring(iEbeg,iLen) ;

              SpeakEnglishi(strValue) ;

  }

}

private void BuildSpeach()

{

  if (voice == null)

voice = new SpVoiceClass() ;

}

public int Volume

{

  get

  {

return voice.Volume ;

  }

  set

  {

voice.SetVolume((ushort)(value)) ;

  }

}

public int Rate

{

  get

  {

return voice.Rate ;

  }

  set

  {

voice.SetRate(value) ;

  }

}

private void Speak(string strSpeack)

{

  try

  {

voice.Speak(strSpeack,SpeechVoiceSpeakFlags.SVSFlagsAsync) ;

  }

  catch(Exception err)

  {

throw(new Exception("發(fā)生一個(gè)錯(cuò)誤:"+err.Message)) ;

  }

}

public void Stop()

{

  voice.Speak(string.Empty,SpeechLib.SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak) ;

}

public void Pause()

{

  voice.Pause() ;

}

public void Continue()

{

  voice.Resume() ;

}

}//end class

 

在 private SpeechLib.SpVoiceClass voice =null;這里,我們定義個(gè)一個(gè)用來發(fā)音的類,并且在第一次調(diào)用該類時(shí),對(duì)它用BuildSpeach方法進(jìn)行了初始化。 

我們還定義了兩個(gè)屬性Volume和Rate,能夠設(shè)置音量和語速。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宝兴县| 东港市| 许昌市| 揭西县| 藁城市| 彩票| 桃江县| 禹州市| 盈江县| 黑龙江省| 商洛市| 巢湖市| 天台县| 汨罗市| 定南县| 遂昌县| 城步| 济南市| 长治县| 大理市| 石楼县| 新宾| 莆田市| 肇州县| 亳州市| 商丘市| 日土县| 武乡县| 宁夏| 怀柔区| 井陉县| 隆昌县| 凤山县| 志丹县| 杂多县| 长丰县| 奉化市| 进贤县| 天等县| 榆中县| 天等县|