-
Notifications
You must be signed in to change notification settings - Fork 0
/
Program.cs
101 lines (89 loc) · 3.08 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Collections.Generic;
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.Threading;
using System.Threading.Tasks;
namespace SpeechTest
{
class Program
{
private static readonly ManualResetEvent WaitEvent = new ManualResetEvent(false);
static void Main()
{
PrintInstalledVoices();
SpeechSynthesis();
SpeechRecognition();
}
private static void PrintInstalledVoices()
{
using (var synth = new SpeechSynthesizer())
{
Console.WriteLine("Stimmen:");
foreach (var voice in synth.GetInstalledVoices())
{
var voiceInfo = voice.VoiceInfo;
Console.WriteLine(" * {0} ({1})", voiceInfo.Name, voiceInfo.Culture);
}
}
}
private static void SpeechSynthesis()
{
using (var synth = new SpeechSynthesizer())
{
synth.SetOutputToDefaultAudioDevice();
foreach (var phrase in GetThingsToSay())
{
synth.Speak(phrase);
}
}
}
static IEnumerable<string> GetThingsToSay()
{
while (true)
{
Console.WriteLine("Was soll ich sagen? (Enter zum Beenden)");
var line = Console.ReadLine();
if (string.IsNullOrWhiteSpace(line))
{
yield break;
}
yield return line;
}
}
private static void SpeechRecognition()
{
using (var engine = new SpeechRecognitionEngine())
{
var phrases = new[] {"Apfel", "Käse", "Wurst", "Ende"};
var choices = new Choices(phrases);
var builder = new GrammarBuilder(choices);
var grammar = new Grammar(builder);
engine.LoadGrammar(grammar);
engine.SetInputToDefaultAudioDevice();
engine.SpeechRecognized += EngineOnSpeechRecognized;
engine.RecognizeAsync(RecognizeMode.Multiple);
Console.WriteLine("Spracherkennung läuft. Erkannt werden: {0}.", string.Join(", ", phrases));
Console.WriteLine("Zum Beenden Enter-Taste drücken oder 'Ende' sagen.");
WaitForExit();
}
}
private static void EngineOnSpeechRecognized(object sender, SpeechRecognizedEventArgs speechRecognizedEventArgs)
{
Console.WriteLine("Erkannt: {0}", speechRecognizedEventArgs.Result.Text);
if (speechRecognizedEventArgs.Result.Text == "Ende")
{
WaitEvent.Set();
}
}
private static void WaitForExit()
{
Task.Run(() =>
{
Console.ReadLine();
WaitEvent.Set();
});
WaitEvent.WaitOne();
}
}
}