Item Property

Microsoft Speech Platform SDK 11

Collapse imageExpand ImageCopy imageCopyHover image

Returns child SemanticValue instances that belong to the current SemanticValue.

Namespace:  Microsoft.Speech.Recognition
Assembly:  Microsoft.Speech (in Microsoft.Speech.dll)

Syntax

Visual Basic (Declaration)
Public Default Property Item ( _
	key As String _
) As SemanticValue
	Get
	Set
Visual Basic (Usage)
Dim instance As SemanticValue
Dim key As String
Dim value As SemanticValue

value = instance(key)

instance(key) = value
C#
public SemanticValue this[
	string key
] { get; set; }

Parameters

key
Type: System..::..String

A key for a KeyValuePair<String, SemanticValue> contained in the current instance of SemanticValue.

Property Value

Type: Microsoft.Speech.Recognition..::..SemanticValue

Returns a child of the current SemanticValue that can be indexed as part of a key value pair: KeyValuePair<String,SemanticValue>.

Implements

IDictionary<(Of <(<'TKey, TValue>)>)>..::..Item[([( TKey])])

Exceptions

ExceptionCondition
KeyNotFoundException

Thrown if no child member of the current instance of SemanticValue has the key matching the key parameter.

InvalidOperationException

Thrown if code attempts to change the SemanticValue at a given index.

Remarks

The Item is read-only and generates exceptions if members are modified.

You can only access data by key value at run-time, not at compile-time, for example to check semantic["myKey"].Value. Specifying a key that is not present generates an exception.

To detect the presence of a given key, use the ContainsKey property on an SemanticValue instance.

Examples

The following example shows a handler for a SpeechRecognized event designed to handle commands to change foreground and background color.

After handling recognized phrases that have no semantic structure, the handler checks for the presence of appropriate keys using ContainsKey (applyChgToBackground, colorRGBValueList, or colorStringList), and then uses the Item property to obtain the nodes with needed information.

The use of Item is highlighted below.

 Copy imageCopy 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 semantic 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 the foreground.
      if (ForeColor.GetBrightness() <= .50) 
      {
        BackColor = Color.White;
      }
      else 
      {
        BackColor = Color.Black;
      }
    }
    return;
  };

};

See Also