资源描述:
《tts语音朗读tts中英文混合朗读的完全设计new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、tts语音朗读:TTS中英文混合朗读的完全设计实现疯狂代码http://CrazyCoder.cn/ĵ:http:/CrazyCoder.cn/BlogDigest/Article76012.html===========转载请注明出处:南才北往=================本文由所有代码全由南才北往开发的转载请注明原作者名称==============转载请注明出处:南才北往==============中英文混合朗读一直是个难点,即在一段文本中要将中文和英文分离出来进行分别朗读,又不能打乱朗读的次序,所以
2、我们设计如下的两种方法,每种方法都有各自的优点和缺点。;①采用同步朗读方式进行混合朗读:;将朗读文本进行提取分析,提取本文本中的中文和英文,在编程中,我们设定两个标志:const;int;IsEnglish;=;0;;//;英文标志const;int;IsChinese;=;3;;//;中文标志标点符号和数字默认和它前面的字的标志一致。当处理文本时标志发生改变时,立即调用语音合成引擎进行朗读。//循环遍历每个字for;(int;i;=;0;;i;<;length;;i++){//提取字母current;=;m_
3、strTxt.GetAt(i);//;如果是英文字母,标志设为0if((current;>=;'A';&&;current;<=;'Z');
4、
5、;(current;>=;'a';&&;current;<=;'z')){CFlag;=;IsEnglish;;//;如果是英文字母,标志设为0}else;if((current;>=0&¤t<=;64)
6、
7、(current;>=91&¤t<=;96)
8、
9、(current;>=123&¤t<=;127))//如果是数字则和它的前一个字
10、母的标志一样{if(PFlag==IsEnglish)CFlag=IsEnglish;//英文标志elseCFlag=IsChinese;//中文标志}else{CFlag;=;IsChinese;//中文标志}if;(CFlag;==;PFlag);//若当前标志与前一个字母标志相同则个数增一iCount++;else;{;if;(iCount!=0);//字符类型变化,读出前面的文本;{;if(PFlag==IsEnglish)SetVoice(szwEnglish);//将引擎设置成英文引擎else;Se
11、tVoice(szwChinese);//将引擎设置成中文引擎str;=;m_strTxt.Mid(first,iCount);//提取出标志相同的文字//设置成同步朗读方式,将文本同步朗读出来hr;=;m_IpVoice->Speak(str.AllocSysString(),;0,;0;);}PFlag;=;CFlag;//改变当前标志first;=;i;//设置当前位置iCount;=;1;//个数还原为1};}//读出最后一段文本if(PFlag==IsEnglish)SetVoice(szwEngli
12、sh);//将引擎设置成英文引擎else;SetVoice(szwChinese);//将引擎设置成中文引擎str;=;m_strTxt.Mid(first,length);//设置成同步朗读方式,将文本同步朗读出来hr;=;m_IpVoice->Speak(str.AllocSysString(),;0,;0;);===========转载请注明出处:南才北往=================本文由所有代码全由南才北往开发的转载请注明原作者名称==============转载请注明出处:南才北往=======
13、=======;②采用异步XML格式进行混合朗读:;将第二种方式与第一中方式相似,区别只是在于它是将文本进一步进行处理,最后生成符合XML朗读格式的文本后对文本进行朗读,而不是调用当标志发生改变时立即调用语音合成引擎进行朗读://设置XML起始标志strEngine.printf("",m_strZHEngine.c_str());strWord+=strEngine;for;(int;i;=;
14、1;;i;<=;nLength;;i++){......;if;(iCount!=0);//字符类型变化,进行文本处理{if(PFlag==IsChinese)//中文标志{//将中文朗读文本XML格式插入文本中strWord+="";strEngine.printf("",m_strZHEngine.c_st