Testing System.Speech.Synthesis


Before testing SWI-Speech, I thought I pay the System.Speech (SAPI .NET managed code) a little visit. What I wanted to achieve is really simple. Use System.Speech to say “Hello World” or any other user-defined string.

In order to achieve this highly ambitious goal, one needs to …

  1. Start the Speech Synthesis Engine
  2. Configure the Speech Synthesis Engine according to one’s needs
  3. Say what one wants to say

With this in mind, I wrote a little C# command line app, which may not be the “nicest”, however, does the job. Please note that the actual System.Speech code is quite little and the majority of code is boilerplate.

Before coding starts, add the “System.Speech” assembly to the referenced assemblies. The following C# code with inline comments will achieve what mentioned above.

 
   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Collections.ObjectModel;
   4:  using System.Speech.Synthesis;
   5:   
   6:  namespace Speech1
   7:  {
   8:      class Program
   9:      {
  10:          static void Main(string[] args)
  11:          {
  12:              Console.WriteLine("Speech Synthesis 1");
  13:              /*
  14:               * create the speech synthesizer, which will later say something 
  15:               * to the interested audience
  16:              */
  17:              using (SpeechSynthesizer sSynth = new SpeechSynthesizer())
  18:              {
  19:                  /*
  20:                   * which are installed voices (male, female) and what are their 
  21:                   * characteristics
  22:                  */
  23:                  ReadOnlyCollection<InstalledVoice> installedVoices = sSynth.GetInstalledVoices();
  24:   
  25:                  if (installedVoices == null ||
  26:                      installedVoices.Count < 1)
  27:                  {
  28:                      Console.WriteLine("no installed voices ... ");
  29:                      return;
  30:                  }
  31:   
  32:                  List<string> vVoiceNames = new List<string>(installedVoices.Count);
  33:                  
  34:                  /*
  35:                   * allow the user to choose an arbitrary voice, 
  36:                   * which has to be in the list of installed voices
  37:                  */
  38:                  Console.WriteLine("installed voices:");
  39:                  foreach (InstalledVoice installedVoice in installedVoices)
  40:                  {
  41:                      Console.WriteLine("==> " + installedVoice.VoiceInfo.Name);
  42:   
  43:                      vVoiceNames.Add(installedVoice.VoiceInfo.Name);
  44:                  }
  45:   
  46:                  Console.WriteLine("which voice do you want to use: ");
  47:                  string useVoice = Console.ReadLine();
  48:   
  49:                  /*
  50:                   * if user did not choose a voice or the chosen one is some bogus, 
  51:                   * then choose the first voice 
  52:                   * from the list of installed vocies
  53:                   */
  54:                  if (string.IsNullOrEmpty(useVoice) ||
  55:                      vVoiceNames.Contains(useVoice) == false)
  56:                  {
  57:                      Console.WriteLine("voice must not be null, empty and have a valid name");
  58:   
  59:                      useVoice = installedVoices[0].VoiceInfo.Name;
  60:                  }
  61:   
  62:                  Console.WriteLine("using ... " + useVoice);
  63:   
  64:                  /*
  65:                   * allow user to choose what to say
  66:                   */
  67:                  Console.WriteLine("Enter your text: ");
  68:                  string textToSpeak = Console.ReadLine();
  69:   
  70:                  if (string.IsNullOrEmpty(textToSpeak))
  71:                      textToSpeak = "Hello World";
  72:   
  73:                  /*
  74:                   * prepare saying something
  75:                   * 
  76:                   * select the chosen voice
  77:                   * set the output device to the default one
  78:                   * set volume up
  79:                   */
  80:                  sSynth.SelectVoice(useVoice);
  81:                  sSynth.SetOutputToDefaultAudioDevice();
  82:                  sSynth.Volume = 100;
  83:                  
  84:                  Console.WriteLine("saying ... " + textToSpeak);
  85:   
  86:                  /*
  87:                   * say what we want to say
  88:                   */
  89:                  sSynth.Speak(textToSpeak);
  90:              }
  91:   
  92:              Console.WriteLine("Press <key> to exit");
  93:              Console.ReadLine();
  94:          }
  95:      }
  96:  }

Happy talking gibberish :).

Skip to main content