SAPI 5.1 语音合成 和 语音识别 [C#][1]

翻译源: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>

posted @ 2007-11-01 19:33  Tachikoma  阅读(3008)  评论(0编辑  收藏  举报