I found Eric’s answer really helpful, I just wanted to add some more details that I found.
System.Speech.Recognition can be used to program the desktop recognizers. SAPI and Desktop recognizers have shipped in the products:
- Windows XP: SAPI v5.1 and no recognizer
- Windows XP Tablet Edition: SAPI v5.1 and Recognizer v6.1
- Windows Vista: SAPI v5.3 and Recognizer v8.0
- Windows 7: SAPI v5.4 and Recognizer v8.0?
Servers come with SAPI, but no recognizer:
- Windows Server 2003: SAPI v5.1 and no recognizer
- Windows Server 2008 and 2008 R2: SAPI v5.3? and no recognizer
Desktop recognizers have also shipped in products like office.
- Microsoft Office 2003: Recognizer v6.1
Microsoft.Speech.Recognition can be used to program the server recognizers. Server recognizers have shipped in the products:
- Speech Server (various versions)
- Office Communications Server (OCS) (various versions)
- UCMA – which is a managed API for OCS that (I believe) included a redistributable recognizer
- Microsoft Server Speech Platform – recognizer v10.2
The complete SDK for the Microsoft Server Speech Platform 10.2 version is available at http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4. The speech engine is a free download. Version 11 is now available at http://www.microsoft.com/download/en/details.aspx?id=27226.
For Microsoft Speech Platform SDK 11 info and downloads, see:
Desktop recognizers are designed to run inproc or shared. Shared recognizers are useful on the desktop where voice commands are used to control any open applications. Server recognizers can only run inproc. Inproc recognizers are used when a single application uses the recognizer or when wav files or audio streams need to be recognized (shared recognizers can’t process audio files, just audio from input devices).
Only Desktop speech recognizers include a dictation grammar (system provided grammar used for free text dictation). The class System.Speech.Recognition.DictationGrammar has no complement in the Microsoft.Speech namespace.
You can use use the APIs to query determine your installed recongizers
- Desktop: System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers()
- Server: Microsoft.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers()
I found that I can also see what recognizers are installed by looking at the registry keys:
- Desktop recognizers: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Recognizers\Tokens
- Server recognizers: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server\v10.0\Recognizers\Tokens
--- Update ---
As discussed in Microsoft Speech Recognition - what reference do I have to add?, Microsoft.Speech is also the API used for the Kinect recognizer. This is documented in the MSDN article http://msdn.microsoft.com/en-us/library/hh855387.aspx