技术开发 频道

微软SAPI:让你的软件能说会道

  中的Text Box用于显示我们要阅读的文本,而Combo Box控件用于显示系统中已经安装的所有语音,用户可以从中选择当前TTS使用的语音。

  要在我们的项目中使用SAPI,我们还需要给项目添加SAPI的引用。用VS2010提供的添加引用功能,在添加引用对话框的COM标签页面中找到Microsoft Speech Object Library,将其添加到项目中。

  SAPI所提供的各个类都在名字空间SpeechLib之下,所以在代码中我们还需要使用using SpeechLib,表示我们将使用这个名字空间。这样我们就可以使用SAPI所提供的各种类来实现语音合成或者是语音识别了。

  创建SpVoice对象,初始化SAPI

  SAPI的TTS都是通过SpVoice对象来完成的。SpVoice类是支持语音合成(TTS)的核心类。通过SpVoice对象调用TTS引擎,从而实现朗读功能。 SpVoice类有以下主要属性:

  • Voice:表示发音类型,相当于进行朗读的人,通常我们可以通过安装相应的语音引擎来增加相应的语音。

  • Rate:语音朗读速度,取值范围为-10到+10。数值越大,速度越快。

  • Volume:音量,取值范围为0到100。数值越大,音量越大。

  SpVoice有以下主要方法:

  • Speak():完成将文本信息转换为语音并按照指定的参数进行朗读,该方法有Text和Flags两个参数,分别指定要朗读的文本和朗读方式(同步或异步等)。

  • GetVoices():获取系统中的语音,用于指定SpVoice的Voice属性。

  • Pause():暂停使用该对象的所有朗读进程。该方法没有参数。

  • Resume():恢复该对象所对应的被暂停的朗读进程。该方法没有参数。

  所以我们在窗体的构造函数中,首先需要完成SpVoice对象的创建,然后才能使用这个对象来朗读文本。 因为系统中可能有多个语音可供选择,所以我们在创建窗体的时候,同时需要用一个Combo Box控件列举出系统中所有的语音,并且选中默认的第一个语音。当窗体创建后,用户可以在这个Combo Box选择自己喜欢的语音来朗读文本。

// SpVoice对象,我们将使用这个对象来朗读文本
private SpVoice m_spVoice;

        
private void Init()
        {
        
// 创建SpVoice对象    
            m_spVoice
= new SpVoice();
            
// 枚举出系统中已经安装的语音,并将其填充到Combo Box控件中
     foreach (ISpeechObjectToken Token in m_spVoice.GetVoices(
string.Empty, string.Empty))
            {
                this.cmbVoices.Items.Add(Token.GetDescription(
49));
            }
        
// 默认选中第一个语音
            cmbVoices.SelectedIndex
= 0;
        }
0
相关文章