|
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(); |
|
} |
|
} |
|
} |
|
} |