【问题标题】:C# Speech VoiceC# 语音语音
【发布时间】:2017-05-17 05:41:12
【问题描述】:

我在 C# 中创建了将文本转换为语音的程序,但是无论我选择什么性别,它都会发出相同的声音!!!性别总是相同的?我去了语音属性,它说我只有 Microsoft Anna 的声音。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Speech.Synthesis;
using System.Speech.Recognition;
using System.IO;
using System.Diagnostics;

namespace Speech_Recognition___Text_to_Speech
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    SpeechSynthesizer voice = new SpeechSynthesizer();
            private void Form1_Load(object sender, EventArgs e)
            {
                comboBox1.Text = "NotSet";
                button2.Enabled = false;
                button3.Enabled = false;
            }

            private void button1_Click(object sender, EventArgs e)
            {
                //Read (button_click)
                voice.Rate = SpeedTrackBar.Value; //sets speed
                voice.Volume = VolumeTrackBar.Value; //sets volume
                try
                {
                    switch (comboBox1.SelectedIndex)
                    {
                        case 0:
                            voice.SelectVoiceByHints(VoiceGender.NotSet);
                            break;
                        case 1:
                            voice.SelectVoiceByHints(VoiceGender.Male);
                            break;
                        case 2:
                            voice.SelectVoiceByHints(VoiceGender.Female);
                            break;
                        case 3:
                            voice.SelectVoiceByHints(VoiceGender.Neutral);
                            break;
                        default:
                            break;
                    }
                    voice.SpeakAsync(textBox1.Text);
                    button2.Enabled = true;
                    button3.Enabled = true;
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message, "Mevoiceage", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            private void button2_Click(object sender, EventArgs e)
            {
                //Pause (button_click)
                voice.Pause();
            }

            private void button3_Click(object sender, EventArgs e)
            {
                //Continue (button_click)
                voice.Resume();
            }

            private void button4_Click(object sender, EventArgs e)
            {
                //Record (button_click)
                //SpeechSynthesizer voice = new SpeechSynthesizer();
                voice.Rate = SpeedTrackBar.Value;
                voice.Volume = VolumeTrackBar.Value;
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "Wave Files| *.wav";
                sfd.ShowDialog();
                voice.SetOutputToWaveFile(sfd.FileName);
                voice.Speak(textBox1.Text);
                voice.SetOutputToDefaultAudioDevice();
                MessageBox.Show("Recording Completed..", "T2S");
            }

            private void button6_Click(object sender, EventArgs e)
            {
                try
                {

                    OpenFileDialog ofd = new OpenFileDialog();

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

                        StreamReader sr = new StreamReader(ofd.OpenFile());
                        textBox1.Text = sr.ReadToEnd();
                    }

                }
                catch (Exception)
                {
                    MessageBox.Show("can not open the file", "Text to Speak", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            private void button7_Click(object sender, EventArgs e)
            {
                voice.SpeakAsyncCancelAll();
            }

            private void button8_Click(object sender, EventArgs e)
            {
                textBox1.Text = "";
            }

            private void button5_Click(object sender, EventArgs e)
            {
                Process.Start("https://www.google.com/#q=" + textBox1.Text);
            }

【问题讨论】:

  • 如果您只安装了一个语音播放语音,那么将其作为唯一的语音播放是有意义的。
  • 其他声音如何安装?

标签: c# voice


【解决方案1】:

来自 SpeechSynthesizer.SelectVoiceByHints 方法的 MSDN 页面:

使用 GetInstalledVoices 方法和 VoiceInfo 类来获取您可以选择的已安装文本转语音 (TTS) 语音的名称。 SpeechSynthesizer 对象选择 Gender 属性与性别参数匹配的第一个已安装语音。

因此,如果您选择女性,那么它将选择 Microsoft Anne。如果您选择男性,它将寻找男性声音,但由于您没有安装任何声音,因此可能默认为 any 性别的第一个声音......这将是 Microsoft Anne ,因为这是您安装的唯一一个。

安装声音的过程与 SO 无关,因为它与编程无关。 Here's a solution on SuperUser that covers it, though.

【讨论】:

  • 我已按照您给我的站点的步骤进行操作。现在属性中还有两个可用的声音,但是当我想从 Microsoft Anna 切换到已安装的声音时,它给了我错误:无法播放声音。请尝试选择其他声音或选择其他音频输出设备。
  • @Pavle_nis 就像我说的,这是一个超级用户问题。去那边问会好运的。
猜你喜欢
  • 2018-02-23
  • 2010-10-10
  • 2013-11-14
  • 2011-11-01
  • 1970-01-01
  • 2013-12-23
  • 2023-03-03
  • 1970-01-01
  • 2015-03-11
相关资源
最近更新 更多