2017-01-03 112 views
0

我已经在C#中创建了将文本转换为语音的程序,但是我选择它的性别会说同一个语音!!!性别总是相同的我去了语音属性,它说我只有微软安娜的声音。C#语音语音

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); 
      } 
+0

如果您只安装了一个语音播放语音,则该语音播放是唯一有意义的。 – Abion47

+0

如何安装其他声音? –

回答

0

从为SpeechSynthesizer.SelectVoiceByHints方法MSDN页:

Use the GetInstalledVoices method and VoiceInfo class to obtain the names of installed text-to-speech (TTS) voices that you can select. The SpeechSynthesizer object selects the first installed voice whose Gender property matches the gender parameter.

所以,如果你选择女性,那么它会选择微软安妮。如果您选择男性,它会寻找男性的声音,但由于您没有安装任何设备,因此很可能是第一个声音任何性别...这将是微软安妮,因为这是唯一的你已经安装了一个。

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

+0

我已经按照你给我的网站的步骤。现在属性可以提供两个更多的声音,但是当我想从微软安娜转换到安装的声音,它给了我错误:语音无法播放。请尝试选择另一个语音或选择一个不同的音频输出设备。 –

+0

@Pavle_nis就像我说的,这是一个超级用户问题。在那边你会得到更好的运气。 – Abion47