This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Diagnostics; | |
using System.Globalization; | |
using System.Runtime.InteropServices; | |
using System.Threading; | |
using System.Windows.Forms; | |
using Microsoft.Speech.Recognition; | |
using Process = System.Diagnostics.Process; | |
using System.Diagnostics; | |
namespace VoiceAssistant | |
{ | |
class Program | |
{ | |
#region Native Stuff | |
const int Hide = 0; | |
const int Show = 1; | |
[DllImport("Kernel32.dll")] | |
private static extern IntPtr GetConsoleWindow(); | |
[DllImport("User32.dll")] | |
private static extern bool ShowWindow(IntPtr hWnd, int cmdShow); | |
[DllImport("PowrProf.dll", CharSet = CharSet.Auto, ExactSpelling = true)] | |
public static extern bool SetSuspendState(bool hiberate, bool forceCritical, bool disableWakeEvent); | |
#endregion | |
static SpeechRecognitionEngine speechRecognitionEngine; | |
static bool speechOn = true; | |
private static string clipboardText; | |
private static bool shouldLog = true; | |
private static readonly string[] commands = | |
{ | |
"assistant mute", | |
"assistant open clipboard", | |
"assistant new tab", | |
"assistant work music", | |
"assistant new github", | |
"assistant sleep computer confirmation 101", | |
"assistant shut down computer confirmation 101", | |
"assistant open story", | |
"assistant open rocket league" | |
}; | |
static void HideWindow() | |
{ | |
//Hide window | |
IntPtr hWndConsole = GetConsoleWindow(); | |
if (hWndConsole != IntPtr.Zero) | |
{ | |
ShowWindow(hWndConsole, Hide); | |
shouldLog = false; | |
//ShowWindow(hWndConsole, Show); | |
} | |
} | |
static void Main(string[] args) | |
{ | |
HideWindow(); | |
//Console.WriteLine("[ASSISTANT AI INITIALIZED]"); | |
CultureInfo cultureInfo = new CultureInfo("en-us"); | |
speechRecognitionEngine = new SpeechRecognitionEngine(cultureInfo); | |
speechRecognitionEngine.SetInputToDefaultAudioDevice(); | |
speechRecognitionEngine.SpeechRecognized += SpeechRecognition; | |
speechRecognitionEngine.SpeechDetected += SpeechDetected; | |
speechRecognitionEngine.SpeechHypothesized += SpeechHypothesized; | |
LoadCommands(); | |
while (true) | |
{ | |
Thread.Sleep(60000); | |
} | |
} | |
static void LoadCommands() | |
{ | |
/*Grammar muteCommand = new Grammar(new GrammarBuilder(commands[0])); | |
Grammar browserOpenCopiedLink = new Grammar(new GrammarBuilder(commands[1])); | |
Grammar browserCopyLink = new Grammar(new GrammarBuilder(commands[2])); | |
speechRecognitionEngine.LoadGrammar(muteCommand); | |
speechRecognitionEngine.LoadGrammar(browserOpenCopiedLink); | |
speechRecognitionEngine.LoadGrammar(browserCopyLink);*/ | |
foreach (string command in commands) | |
{ | |
speechRecognitionEngine.LoadGrammarAsync(new Grammar(new GrammarBuilder(command))); | |
} | |
speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple); | |
Console.Beep(600, 200); | |
Console.Beep(600, 200); | |
} | |
static void SpeechHypothesized(object sender, SpeechHypothesizedEventArgs e) | |
{ | |
//Log(e.Result.Text); | |
} | |
static void SpeechDetected(object sender, SpeechDetectedEventArgs e) | |
{ | |
//Log("Detected speech."); | |
} | |
static void SpeechRecognition(object sender, SpeechRecognizedEventArgs e) | |
{ | |
string resultText = e.Result.Text.ToLower(); | |
float confidence = e.Result.Confidence; | |
SemanticValue semantics = e.Result.Semantics; | |
Log("\nRecognized: " + resultText + " | Confidence:" + confidence); | |
if (confidence < 0.6) | |
{ | |
Log("Not sure what if you said that. Not proceeding.", ConsoleColor.Red); | |
return; | |
} | |
if (resultText == commands[0]) | |
{ | |
speechOn = !speechOn; | |
Log("Speech on: " + speechOn); | |
if (speechOn) | |
{ | |
Console.Beep(600, 200); | |
Console.Beep(600, 200); | |
} | |
else | |
{ | |
Console.Beep(400, 400); | |
} | |
return; | |
} | |
if (!speechOn) | |
{ | |
Log("AI is muted. Not doing any commands."); | |
Console.Beep(400, 200); | |
return; | |
} | |
if (resultText == commands[1]) //Open link on clipboard. | |
{ | |
Thread clipboardThread = new Thread(param => | |
{ | |
if (Clipboard.ContainsText(TextDataFormat.Text)) | |
{ | |
clipboardText = Clipboard.GetText(TextDataFormat.Text); | |
} | |
}); | |
clipboardThread.SetApartmentState(ApartmentState.STA); | |
clipboardThread.Start(); | |
clipboardThread.Join(); | |
Log(clipboardText); | |
Process.Start(clipboardText); | |
} | |
if (resultText == commands[2]) //Open browser | |
{ | |
Process.Start("https://google.com"); | |
} | |
if (resultText == commands[3]) //Open work music | |
{ | |
Process.Start("https://youtu.be/Qku9aoUlTXA?list=PLESPkMaANzSj91tvYnQkKwgx41vkxp6hs"); | |
} | |
if (resultText == commands[4]) //Open Github new repository | |
{ | |
Process.Start("https://github.com/new"); | |
} | |
if (resultText == commands[5]) //Sleep computer | |
{ | |
SetSuspendState(false, true, true); | |
} | |
if (resultText == commands[6]) //Shutdown computer | |
{ | |
Process.Start("shutdown", "/s /t 0"); | |
} | |
if (resultText == commands[7]) //Open story | |
{ | |
Process.Start("https://docs.new"); | |
} | |
if (resultText == commands[9]) //Open Rocket League | |
{ | |
Process.Start("C:\\Users\\USER\\Documents\\SteamLauncher\\RocketLeague.exe"); | |
} | |
} | |
static void Log(string input, ConsoleColor color = ConsoleColor.White) | |
{ | |
if (shouldLog) | |
{ | |
Console.ForegroundColor = color; | |
Console.WriteLine(input); | |
Console.ResetColor(); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment