技术开发 频道

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

  朗读文本

  完成窗体的初始化,创建SpVoice对象之后,接下来我们就可以利用这个对象的Speak()方法来阅读Text Box控件中的文本了。

private void btnSpeak_Click(object sender, EventArgs e)
        {
        
// 获取用户在Combo Box中选择的语音索引
            
int nVoiceIndex = this.cmbVoices.SelectedIndex;
          
// 根据语音索引指定SpVoice的Voice属性,也就是指定使用何种语音
    m_spVoice.Voice
= m_spVoice.GetVoices(string.Empty, string.Empty).Item(nVoiceIndex);
          
// 使用SpVoice的Speak()方法阅读Text Box中文本
            m_spVoice.Speak(this.textPreview.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
        }

  在这里我们使用了SpVoice对象的一个最重要的函数Speak(),它的第一个参数就是我们要朗读的文本,而第二个参数则是朗读的方式,有同步,异步,XML文件等等。 这样,通过SpVoice对象的一个简单函数,我们就可以朗读Text Box控件中的文本内容了。

  朗读文本文件

  更多时候,我们不是阅读Text Box控件中输入的文本,而是阅读某些文本文件中的文字,这样,读取文本文件并将文字填充到Text Box控件中就成为一种必要了。

private void btnFileSelect_Click(object sender, EventArgs e)
        {
            
// 使用打开文件对话框选择文本文件
            OpenFileDialog openFileDialog1
= new OpenFileDialog();

            openFileDialog1.InitialDirectory
= "e:\\";
            openFileDialog1.Filter
= "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex
= 2;
            openFileDialog1.RestoreDirectory
= true;

            
if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
            
// 读取文本文件并将其填充到Text Box控件
                StreamReader objReader
= new StreamReader( openFileDialog1.FileName);
                
string sLine = "";
                
string sPreview = "";

                
while (sLine != null)
                {
                    sLine
= objReader.ReadLine();
                    
if (sLine != null)
                    {
            
// 这里需要添加Environment.NewLine表示换行
                        sPreview
+= sLine + Environment.NewLine;
                    }
                }
                
// 将文本文件中的内容显示到Text Box控件
                this.textPreview.Text
= sPreview;
                
// 关闭文件读取器
         objReader.Close();
            }
        }

  这样,我们就可以通过读取文本文件中的内容,将其显示到Text Box控件中,然后SpVoice就可以阅读Text Box控件中的内容,也就是间接地朗读了文本文件。

  将文本转换成声音文件

  除了直接朗读文本之外,更多的时候,我们还需要将文本转换成声音文件。这样我们可以将这些声音文件随身携带,想听就听。要将文本转换为声音文件,我们需要用到SpVoice的另外一个重要的函数SetOutput(),我们可以利用它将SpVoice的语音输出某个WAV文件,从而实现将文本文件转换为声音文件。

0
相关文章