您所在的位置: 首页>>开发>>.Net>>c#>>

语音合成与识别技术在C#中的应用(1)

http://developer.51cto.com  2005-09-30 09:49    51cto.com整理  我要评论(0)
  • 摘要:本文讲解了语音合成与识别技术在C#中的应用
  • 标签:技术  C#

我们要想实现中文发音或中文语音识别,必需先安装微软的Speech Application SDK(SASDK),它的最新版本是 SAPI 5.1 他能够识别中、日、英三种语言,你可以在这里下载:http://www.microsoft.com/speech/download/sdk51/,需要安装这两个文件Speech SDK 5.1和5.1 Language Pack,其中5.1 Language Pack可以选择安装支持的语言。  安装好以后,我们就可以开始进行语音程序的开发了。

下面我们设计一个能够朗读中英文混合语言的类:
我们将用单例模式实现该类,类的代码如下,我们将详细解释:

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("发生一个错误:"+err.Message)) ;
  }
}
public void Stop()
{
  voice.Speak(string.Empty,SpeechLib.SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak) ;
}
public void Pause()
{
  voice.Pause() ;
}
public void Continue()
{
  voice.Resume() ;
}
}//end class

共2页: 1 [2] 下一页
【内容导航】
Hyper-V 虚拟化技术专题
重复数据删除技术
2008年上半年IT技术图书阅读排行大盘点
汶川大地震 IT技术人在行动
解析35岁技术人的价值与出路
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual Basic完全自学宝典

  • 作者:强锋科技,杨章伟
  • Visual Basic是用户最多的开发技术之一。本书由浅入深,循序渐进地教授读者如何使用Visual Basic开发应用系统,是Visual Basic..
Copyright©2005-2008 51CTO.COM 版权所有