65.9K
CodeProject 正在变化。 阅读更多。
Home

文本转语音

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.76/5 (30投票s)

2011年4月17日

CPOL

2分钟阅读

viewsIcon

169736

downloadIcon

16394

如何在我们的项目中实现语音技术。

引言

在 C# 中实现文本转语音变得非常容易。我们知道语音技术对盲人非常有用。现在,我们将学习如何在我们的项目中实现语音技术。

text to speak

步骤

  1. 从“**开始 | 所有程序 | Microsoft Visual Studio 2010 | Microsoft Visual Studio 2010**”打开 Microsoft Visual Studio 2010。
  2. 在 Microsoft Visual Studio 启动页上,单击“**新建项目**”图标。
  3. 在 Microsoft Visual Studio 启动页上,单击“新建项目”图标。
  4. 在 C# 项目模板列表中,选择“**Windows | Windows 应用程序**”。
  5. 在“名称”字段中,输入名称“**text to speak**”(文本转语音)。
  6. 在右上角,**确保已选择 .NET Framework 的 4.0 版本**。
  7. 接受默认位置和解决方案名称。单击“确定”按钮。解决方案将被创建。
  8. 右键单击“文本转语音”项目节点,然后选择“**添加引用**”。
  9. 在“添加引用”对话框的“.NET”选项卡下,选择“**System.Speech**”。
  10. 单击“确定”按钮。

选择文本文件

选择一个文本文件以转换为音频,选定的文本文件将显示在富文本框中。

private void Browse_Click(object sender, EventArgs e)
    {
        OpenFileDialog Ofg = new OpenFileDialog();

        try
        {
            Ofg.CheckFileExists = true;
            Ofg.CheckPathExists = true;
            Ofg.DefaultExt = "txt";
            Ofg.DereferenceLinks = true;
            Ofg.Filter = "Text files (*.txt)|*.txt|" +
				"RTF files (*.rtf)|*.rtf|" +
                              " +
				Works 6 and 7 (*.wps)|*.wps|" +
                              "Windows Write (*.wri)|*.wri|" +
				"WordPerfect document (*.wpd)|*.wpd";
            Ofg.Multiselect = false;
            Ofg.RestoreDirectory = true;
            Ofg.ShowHelp = true;
            Ofg.ShowReadOnly = false;
            Ofg.Title = "Select a file ";
            OpenFile.ValidateNames = true;

            if (OpenFile.ShowDialog() == DialogResult.OK)
            {
                StreamReader sr = new StreamReader(ofg.OpenFile());
                richTextBox1.Text = sr.ReadToEnd();
            }
        }
        catch
        {
            MessageBox.Show("can not open the file", "Text two speech");
        }
    }

这里,首先为 OpenFileDialog 创建对象实例,使用 stream 读取器读取文本文件。

文本转语音

SpeakAsync 方法用于朗读一个词。这里使用了两个属性:一个是 volume(音量),另一个是 Rate(语速)。voice(声音)性别也是一个属性。它用于选择 voice 性别(enum NotSet(未设置),Male(男),Female(女),Neutral(中性))。如果发生任何错误,消息框将显示错误消息。

private void speak_Click(object sender, EventArgs e)
{
    SpeechSynthesizer speak = new SpeechSynthesizer();

try
{
    switch (comboBox1.SelectedItem.ToString())
                {
                    case "NotSet":
                        voice.SelectVoiceByHints(VoiceGender.NotSet);
                            break;
                    case "Male":
                        voice.SelectVoiceByHints(VoiceGender.Male);
                             break;
                    case "Female":
                        voice.SelectVoiceByHints(VoiceGender.Female);
                             break;
                    case "Neturl":
                        voice.SelectVoiceByHints(VoiceGender.Neutral);
                             break;
                  }  

上面的代码可以更改 voice 性别。speakAsyn 是一个异步方法。这意味着它会立即返回,并将语音作为后台进程进行处理。如果发生任何错误,它将在消息框中显示。

voice.Volume = trackBar1.Value;
voice.Rate = trackBar2.Value;
voice.SpeakAsync(richTextBox1.Text);  

保存音频文件

将文本转换为音频流 .audio 流可以保存为 wav 文件格式。以下步骤用于保存 wav 文件。

  1. 为“保存文件”对话框创建对象实例。
  2. 将音频流设置为选择文件。
SaveFileDialog sfd = new SaveFileDialog();

sfd.Filter = ""wav files (*.wav)|*.wav";
sfd.Title = "Save to a wave file";
sfd.FilterIndex = 2;
sfd.RestoreDirectory = true;

if (sfd.ShowDialog() == DialogResult.OK)
{
     FileStream fs = new FileStream(sfd.FileName,FileMode.Create,FileAccess.Write);
     voice.SetOutputToWaveStream(fs);
     voice.Speak(richTextBox1.Text);
     fs.Close();
}

关注点

如果您想了解更多关于语音技术的信息,请单击 Microsoft 网站上的 此链接

历史

  • 2011 年 4 月 14 日:初始版本
© . All rights reserved.