/// <summary>Handles the SpeechRecognized event of the engine control.</summary> void engine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { if (e.Result.Text == "regarde a gauche") { TrySetTarget("00074672", 0, 1000 * 4); TrySetTarget("00074672", 1, 1000 * 4); Synth.SpeakAsync("Je regarde a gauche"); } if (e.Result.Text == "regarde a droite") { TrySetTarget("00074672", 0, 1600 * 4); TrySetTarget("00074672", 1, 1600 * 4); Synth.SpeakAsync("Je regarde a droite"); } if (e.Result.Text == "regarde en fasse") { TrySetTarget("00074672", 0, 1300 * 4); TrySetTarget("00074672", 1, 1300 * 4); Synth.SpeakAsync("Je regarde en fasse"); } if (e.Result.Text == "louche comme un homme") { TrySetTarget("00074672", 0, 1000 * 4); TrySetTarget("00074672", 1, 1600 * 4); Synth.SpeakAsync("Je louche comme un homme"); } if (e.Result.Text == "louche comme un extraterrestre") { TrySetTarget("00074672", 0, 1600 * 4); TrySetTarget("00074672", 1, 1000 * 4); Synth.SpeakAsync("Je louche comme un extraterrestre"); } } /// <summary> /// Handles the AudioLevelUpdated event of the engine control. /// </summary> void engine_AudioLevelUpdated(object sender, AudioLevelUpdatedEventArgs e) { prgLevel.Value = e.AudioLevel; } /// <summary> /// Loads the grammar and commands. /// </summary> private void loadGrammarAndCommands() { try { Choices texts = new Choices(); string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\example.txt"); foreach (string line in lines) { // skip commentblocks and empty lines.. if (line.StartsWith("--") || line == String.Empty) continue; // split the line var parts = line.Split(new char[] { '|' }); // add commandItem to the list for later lookup or execution words.Add(new Word() { Text = parts[0], AttachedText = parts[1], IsShellCommand = (parts[2] == "true") }); // add the text to the known choices of speechengine texts.Add(parts[0]); } Grammar wordsList = new Grammar(new GrammarBuilder(texts)); speechRecognitionEngine.LoadGrammar(wordsList); } catch (Exception ex) { throw ex; } } /// <summary>Attempts to set the target of a channel.</summary> /// <param name="channel">Channel number from 0 to 23.<param> /// <param name="target"> /// Target, in units of quarter microseconds. For typical servos, /// 6000 is neutral and the acceptable range is 4000-8000. /// </param> void TrySetTarget(string DeviceId, Byte channel, UInt16 target) { try { // Find a device and temporarily connect. using (Usc device = connectToDevice(DeviceId)) { device.setTarget(channel, target); // device.Dispose() is called automatically // when the "using" block ends, allowing //other functions and processes to use the device. } } // Handle exceptions by displaying them to the user. catch (Exception exception) { displayException(exception); } } void TrySetSpeedAndTarget(string DeviceId, Byte channel, UInt16 speed, UInt16 target) { try { using (Usc device = connectToDevice(DeviceId)) { device.setSpeed(channel, speed); device.setTarget(channel, target); } } // Handle exceptions by displaying them to the user. catch (Exception exception) { displayException(exception); } } /// <summary> /// Connects to a Maestro using native USB and returns the Usc object /// representing that connection. When you are done with the /// connection, you should close it using the Dispose() method so that /// other processes or functions can connect to the device later. The /// "using" statement can do this automatically for you. /// </summary> Usc connectToDevice(string DeviceId) { // Get a list of all connected devices of this type. List<DeviceListItem> connectedDevices = Usc.getConnectedDevices(); foreach (DeviceListItem dli in connectedDevices) { // If you have multiple devices connected and want to select a particular // device by serial number, you could simply add a line like this: if (dli.serialNumber == DeviceId) { Usc device = new Usc(dli); // Connect to the device. return device; // Return the device. } if (dli.serialNumber == DeviceId) { Usc device = new Usc(dli); // Connect to the device. return device; // Return the device. } } throw new Exception("Could not find device. " + "Make sure it is plugged in to USB " + "and check your Device Manager (Windows) " + "or run lsusb (Linux)."); } /// <summary> /// Displays an exception to the user by popping up a message box. /// </summary> void displayException(Exception exception) { StringBuilder stringBuilder = new StringBuilder(); do { stringBuilder.Append(exception.Message + " "); if (exception is Win32Exception) { stringBuilder.Append("Error code 0x" + ((Win32Exception)exception).NativeErrorCode.ToString("x") + ". "); } exception = exception.InnerException; } while (exception != null); MessageBox.Show( stringBuilder.ToString(), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error ); }