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 …
- Start the Speech Synthesis Engine
- Configure the Speech Synthesis Engine according to one’s needs
- 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 :).