700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > .net中语音识别和语音合成(二)语音合成提高篇

.net中语音识别和语音合成(二)语音合成提高篇

时间:2020-02-16 00:07:48

相关推荐

.net中语音识别和语音合成(二)语音合成提高篇

在.net中语音识别和语音合成(一)入门篇中介绍了关于语音合成的一些基础知识,就是先j建立一个SpVoiceClass类的对象,然后调用对象的GetVoices方法取的一个发音的对象,但是通过设置该方法的参数只能建立中文发音或是英文发音的对象,而对于中英文混合的文本却没有办法。为解决这个问题,可以对字符串中的每的字符的ASC码进行判断,进而分辨传入的字符串是中文还是英文。以下是判断的代码。

1publicboolAnalyse(stringstrSpeak)

2{

3intiCbeg=0;

4intiEbeg=0;

5boolIsChina=true;

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

7{

8charchr=strSpeak[i];

9if(IsChina)

10{

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

12{

13intiLen=i-iCbeg;

14stringstrValue=

15strSpeak.Substring(iCbeg,iLen);

16SpeakChina(strValue);

17iEbeg=i;

18IsChina=false;

19}

20}

21else

22{

23if(chr>122||chr<65)

24{

25intiLen=i-iEbeg;

26stringstrValue=

27strSpeak.Substring(iEbeg,iLen);

28this.SpeakEnglishi(strValue);

29iCbeg=i;

30IsChina=true;

31}

32}

33}

34returnIsChina;

35}

对于Speak方法的参数,第一个是一个字符串类型,第二个是一个SpeechVoiceSpeakFlags类型的枚举。当将其设置为SVSFDefault时,则第一个就是要读的文本,若将其设置为SVSFIsFilename时,第一个参数就是所要读的文本的文件名,而不是要读的内容。

下面介绍这个类的SpeakStream方法,这个方法有2个参数,第一个是SpeechBaseStream,第二和Speak一样,是一个SpeechVoiceSpeakFlags类型的枚举。SpeechBaseStream是一个接口,继承它的有3个对象,这3个都很相似,先介绍其中之一SpFileStream。SpFileStream有3个比较常用的方法:Read,Seek,Write。其中Read方法可以创建一个*.wav文件,以下代码演示了创建文件的步骤:

SpFileStreamClassfs1=newSpFileStreamClass();

SpVoiceClassv=newSpVoiceClass();

fs1.Open(textBox1.Text,SpeechStreamFileMode.SSFMCreateForWrite,false);

//textBox1.text是要创建的文件的路径。

v.AudioOutputStream=fs1;

string[]ss=newstring[4]{"this","is","a","demo"};

foreach(stringsinss)

{

v.Speak(s,SpeechVoiceSpeakFlags.SVSFlagsAsync);

}

fs1.Close();

下面的代码将用于展示Speak与SpeakStream:

SpFileStreamClassfs1=newSpFileStreamClass();

SpFileStreamClassfs2=newSpFileStreamClass();

SpVoiceClassv=newSpVoiceClass();

fs1.Open(textBox1.Text,SpeechStreamFileMode.SSFMOpenForRead,false);

fs2.Open(textBox2.Text,SpeechStreamFileMode.SSFMOpenForRead,false);

v.Speak("Thisisthefirstsoundfile",SpeechVoiceSpeakFlags.SVSFlagsAsync);

v.SpeakStream(fs1,SpeechVoiceSpeakFlags.SVSFlagsAsync);

v.Speak("Thisisthesecondsoundfile",SpeechVoiceSpeakFlags.SVSFlagsAsync);

v.SpeakStream(fs2,SpeechVoiceSpeakFlags.SVSFlagsAsync);

fs1.Close();

fs2.Close();

(这一篇是上一篇的补充,对合成的方法做了进一步的说明)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。