Returns the number of child SemanticValue objects under the current SemanticValue instance.
Namespace:
Microsoft.Speech.Recognition
Assembly:
Microsoft.Speech (in Microsoft.Speech.dll)
Syntax
Visual Basic (Declaration) |
---|
Public ReadOnly Property Count As Integer Get |
Visual Basic (Usage) |
---|
Dim instance As SemanticValue Dim value As Integer value = instance.Count |
C# |
---|
public int Count { get; } |
Property Value
Type: System..::..Int32The number of child SemanticValue objects under the current SemanticValue.
Implements
ICollection<(Of <(<'T>)>)>..::..CountRemarks
Recognition results which do not make use of semantic parsing always have a Count property of zero, as well as a Value of nullNothingnullptrunita null reference (Nothing in Visual Basic).
Examples
The following example shows a handler for a SpeechRecognized event designed to handle commands to change foreground and background color.
The handler identifies recognized phrases that have no underlying semantic structure by detecting a Count of zero and a Value of nullNothingnullptrunita null reference (Nothing in Visual Basic). This recognition output is then processed directly by parsing the raw text.
In other cases, the handler uses keys to obtain the RGB components of a color name, to determine whether the command will change the foreground or background, or to indicate that no valid key was found.
Copy Code | |
---|---|
newGrammar.SpeechRecognized += delegate(object sender, SpeechRecognizedEventArgs eventArgs) { // Retrieve the value of the semantic property. bool changeBackGround = true; string errorString = ""; SemanticValue semantics = eventArgs.Result.Semantics; Color newColor = Color.Empty; try { if (semantics.Count == 0 && semantics.Value==null) { // Signifies recognition by a grammar with no semantics. // Parse the string, assuming that the last word is color, // searching for background or foreground in input. if (eventArgs.Result.Text.Contains("foreground")) { changeBackGround = false; } string cName = eventArgs.Result.Words[eventArgs.Result.Words.Count - 1].Text; newColor = Color.FromName(cName); } else if (semantics.ContainsKey("colorStringList") ^ semantics.ContainsKey("colorRGBValueList")) { // Determine whether to change background or foreground. if (semantics.ContainsKey("applyChgToBackground")) { changeBackGround = semantics["applyChgToBackground"].Value is bool; } // Get the RGB color value. if (semantics.ContainsKey("colorStringList")) { newColor = Color.FromName((string)semantics["colorStringList"].Value); } if (semantics.ContainsKey("colorRGBValueList")) { newColor = System.Drawing.Color.FromArgb((int)semantics["colorRGBValueList"].Value); } } else { // Throw an exception if the semantics do not contain the keys we // support. throw(new Exception("Unsupported semantics keys found.")); } } catch (Exception exp) { MessageBox.Show(String.Format("Unable to process color semantics.:\n{0}\n", exp.Message)); return; } // Change colors, either foreground or background. if (changeBackGround) { BackColor = newColor; float Bright = BackColor.GetBrightness(); float Hue = BackColor.GetHue(); float Sat = BackColor.GetSaturation(); // Make sure that text is readable regardless of background. if (BackColor.GetBrightness() <= .50) { ForeColor = Color.White; } else { ForeColor = Color.Black; } } else { ForeColor = newColor; float Bright = ForeColor.GetBrightness(); float Hue = ForeColor.GetHue(); float Sat = ForeColor.GetSaturation(); // Make sure that text is readable regardless of Foreground. if (ForeColor.GetBrightness() <= .50) { BackColor = Color.White; } else { BackColor = Color.Black; } } return; }; |
};