翻译源: Speech Synthesis & Speech Recognition Using SAPI 5.1 By Brian Long (http://www.blong.com/)
翻译说明:并不全文翻译,只翻译些对本人有用的部分,原版代码为Delphi,译文用C# .NET Framework 2.0
实现,有些有关Delphi的解释略去,另添加一些C#使用SAPI的个人理解注释,不定期更新

[1]语音合成
在简单层面上实现语音合成,只需要创建SpVoiceClass对象并调用其中的Speak方法,最简单的实现如下[读出文本框中的文字]
        private void button1_Click(object sender, EventArgs e)
        
{
            SpVoiceClass svc 
= new SpVoiceClass();   
            svc.Speak(textBox1.Text,SpeechVoiceSpeakFlags.SVSFDefault);
        }
[Tachikoma注:此处并未提到编程时添加对SAPI的引用,对COM组件的引用较简单,请自行处理]

对Speak方法的参数作如下说明:
0]对Speak方法的调用默认情况下将会是同步的,也就是说在朗读完指定文字之前不会返回值[同步/异步状态可用第二参数调整]
0]Speak方法返回一个流标号,当存在多个异步声音流时可通过标号识别,标号可作为参数提供给某些函数
1]第一个参数为要阅读的文字
2]第二参数为可调节的一些参数[Flags],可用"或"运算符将其连接同时使用

# SVSFDefault  [该方法将同步阅读][具体见说明0]]
# SVSFlagAsync [该方法将异步阅读,调用后将立即返回,可通过事件监视朗读结束时间,或调用
WaitUntilDone 方法,或通过 SpeakCompleteEvent 得到一个事件句柄并提供给 WaitForSingleObject]
# SVSFPurgeBeforeSpeak  所有朗读中的和待朗读的字符都将被取消
# SVSFNLPSpeakPunc 标点将被阅读出来

# SVSFIsFilename 标明第一个参数为要朗读文本所在的文件名
# SVSFIsXML  标明文本中含有XML标签,用于控制朗读的音量/频率等参数,示例
< EMPH > Hello </ EMPH >
< PRON  SYM ="d eh l f y" > Delphi </ PRON >  developers!
< VOLUME  LEVEL ="70" >
I can speak 
< PITCH  MIDDLE ="+10" > high </ PITCH >  and  < PITCH  MIDDLE ="-10" > low </ PITCH > .
I can speak 
< RATE  SPEED ="+10" > very quickly </ RATE >  and  < RATE  SPEED ="-10" > very slowly </ RATE > .
I can speak 
< VOLUME  LEVEL ="40" > quietly </ VOLUME >  and  < VOLUME  LEVEL ="100" > loudly </ VOLUME > .
</ VOLUME >
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐