Friday Speech Recognition
The Friday AI is a project that I am working on for myself to help with things on my computer. I started this project to see what I can do with coding and console based applications and having them control different parts of my computer by just saying something. The commands are limited to preset commands that I type out and if these commands are not said or pronounced correctly it won't be recognized. I am working on making it recognize any speech.
# hey
class FridaySpeech
{
static SpeechRecognitionEngine recognitionEngine = new SpeechRecognitionEngine();
static SpeechSynthesizer synth = new SpeechSynthesizer();
public static Choices commands = new Choices();
public static Choices words = new Choices();
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
string GetActiveWindowTitle()
{
const int nChars = 256;
StringBuilder Buff = new StringBuilder(nChars);
IntPtr handle = GetForegroundWindow();
if (GetWindowText(handle, Buff, nChars) > 0)
{
return Buff.ToString();
}
return null;
}
public static void Start()
{
try
{
commands.Add(new string[] { "hello", "add one", "my name","search for", "your name", "time", "close","thank you","friday","help","quit","stop","end","exit" });
commands.Add(new string[] { "what", "what's", "the", "is", "up", "it", "they're", "they", "this", "that", "well", "with", "search", "how", "where", "when", "how","how's", "who" ,"hey","because","drawing","draw","chrome","google","tell","discord"});
//foreach(string thing in Program)
//{
//}
synth.SetOutputToDefaultAudioDevice();
GrammarBuilder gBuilder = new GrammarBuilder();
gBuilder.Append(commands);
gBuilder.AppendWildcard();
//gBuilder.Append(words);
gBuilder.AppendDictation();
Grammar grammar = new Grammar(gBuilder);
recognitionEngine.LoadGrammarAsync(grammar);
recognitionEngine.SetInputToDefaultAudioDevice();
recognitionEngine.SpeechRecognized += recognitionEngine_SpeechRecognition;
Console.Write("Voice Status: ");
Program.TypeWriter("Operational", ConsoleColor.Green);
Console.WriteLine();
return;
}
catch (Exception e)
{
Console.Write("Voice Status: ");
Program.TypeWriter(e.Message, ConsoleColor.Red);
Console.WriteLine();
return;
}
}
public static void Stop()
{
recognitionEngine.RecognizeAsyncStop();
Program.Messages();
}
///<summary>
///<para>line1</para>
///<para>line2</para>
///</summary>
public static void Begin()
{
try
{
Discord.MainAsync().GetAwaiter().GetResult();
string m = Program.Uppercasefirst(Variables.Bot_Greetings[Program.PickIndex(Variables.Bot_Greetings)]);
Program.SendMessage(m + " Brett" ,"");
synth.SpeakAsync(m + " Brett");
//Program.SendMessage(,"");
recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
//there are two voices for windows
//Program.SendMessage(" Name: " + synth.Voice.Name,"");
//Program.SendMessage(" Culture: " + synth.Voice.Culture, "");
//Program.SendMessage(" Age: " + synth.Voice.Age, "");
//Program.SendMessage(" Gender: " + synth.Voice.Gender, "");
//Program.SendMessage(" Description: " + synth.Voice.Description, "");
//Program.SendMessage(" ID: " + synth.Voice.Id, "");
//Program.SendMessage(" Others: " + synth.GetInstalledVoices(),"");
Program.SendMessage("I can hear you now.", "");
synth.SpeakAsync("I can hear you now");
Program.Messages();
}catch(Exception e)
{
Program.TypeWriter("Error: ", ConsoleColor.Red);
Console.Write(e.Message);
Console.WriteLine();
Program.SendMessage("I am not able to hear you. Check your input and output devices.", "");
Program.Messages();
}
}
static void recognitionEngine_SpeechRecognition(object sender, SpeechRecognizedEventArgs e)
{
Console.Write("Confidence: " + e.Result.Confidence.ToString() + ", Predicted: " + e.Result.Text);
Console.WriteLine();
if(e.Result.Confidence >= 0.50)
{
//if (e.Result.Text.Contains("friday"))
//{
if (e.Result.Text.Contains("thank you"))
{
Program.SendMessage("You are welcome, Brett.", "thank you friday");
}else
if(e.Result.Text == "friday")
{
Program.SendMessage("Yes Brett?", "friday");
}else
if(e.Result.Text.Contains("close") || e.Result.Text.Contains("quit") || e.Result.Text.Contains("stop") || e.Result.Text.Contains("exit"))
{
synth.Speak("Closing");
Program.TypeWriter("Closing....", ConsoleColor.Yellow, ConsoleColor.White, 10);
synth.Dispose();
Discord.discord.ClearPresence();
Discord.discord.Dispose();
recognitionEngine.RecognizeAsyncStop();
Environment.Exit(0);
}else
if(e.Result.Text.Contains("what is the date"))
{
synth.SpeakAsync("Today's date is " + string.Format("{0:dddd, dd MMMM yyyy}",DateTime.Now));
Program.SendMessage("Today's date is " + string.Format("{0:dddd, dd MMMM yyyy}", DateTime.Now),"what is the date");
}else
if(e.Result.Text.Contains("open chrome"))
{
synth.SpeakAsync("opening google chrome");
Process.Start("Chrome.exe", "google.ca");
Program.SendMessage("Opening Google Chrome","open chrome");
}
/*else
{
string m = Program.Uppercasefirst(Variables.Bot_TryAgain[Program.PickIndex(Variables.Bot_TryAgain)]);
synth.SpeakAsync(m);
Program.TypeWriter(m);
Console.WriteLine();
}*/
bool found = false;
foreach (string time in Variables.Synonyms.WhatTime)
{
if (e.Result.Text.Contains(time.ToLower()))
{
synth.SpeakAsync("The time is " + string.Format("{0:h:mm:ss tt}", DateTime.Now));
Program.SendMessage("The time is " + string.Format("{0:h:mm:ss tt}", DateTime.Now), time);
found = true;
break;
}
}
foreach(string trigger in Variables.Synonyms.Triggers)
{
if (e.Result.Text.Contains(trigger.ToLower()))
{
string message = Program.Uppercasefirst(Variables.Bot_Greetings[Program.PickIndex(Variables.Bot_Greetings)]);
Program.SendMessage(message, trigger);
synth.SpeakAsync(message);
found = true;
break;
}
}
if (!found)
{
string m = Program.Uppercasefirst(Variables.Bot_TryAgain[Program.PickIndex(Variables.Bot_TryAgain)]);
synth.SpeakAsync(m);
Program.TypeWriter(m);
Console.WriteLine();
}
//}
/*switch (e.Result.Text)
{
case "help":
Program.TypeWriter(commands.ToString());
Console.WriteLine();
break;
case "search for":
Process.Start("Chrome.exe", "www.brettanda.ca");
break;
case "what's my name":
Program.SendMessage("Your name is Brett", "what's my name");
break;
case "what's your name":
Program.SendMessage("My name is Friday", "what's your name");
break;
case "what time is it":
Program.SendMessage("The time is " + string.Format("{0:h:mm:ss tt}", DateTime.Now), "what time is it");
break;
}*/
}
else
{
Program.TypeWriter(Program.Uppercasefirst(Variables.Bot_TryAgain[Program.PickIndex(Variables.Bot_TryAgain)]));
synth.SpeakAsync( Program.Uppercasefirst(Variables.Bot_TryAgain[Program.PickIndex(Variables.Bot_TryAgain)]));
}
}
public static void Loops()
{
}
public static Boolean isCommand(string message)
{
string prefix = "friday";
if (message.ToLower().Contains(prefix) && Program.IsOwnWord(prefix,message)){
return true;
}
else
{
return false;
}
}
}