/**
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */

#ifndef _SAPI_BLD_
#define _SAPI_BLD_ 0x54
#endif

import "oaidl.idl";
import "ocidl.idl";

cpp_quote("#ifndef _SAPI_VER")
cpp_quote("#error \"you have to include <sapi.h> header before this.\"")
cpp_quote("#endif")

#ifndef LANGID
#define LANGID WORD
#endif

cpp_quote("#if 0")
typedef [restricted, hidden] struct WAVEFORMATEX {
  WORD wFormatTag;
  WORD nChannels;
  DWORD nSamplesPerSec;
  DWORD nAvgBytesPerSec;
  WORD nBlockAlign;
  WORD wBitsPerSample;
  WORD cbSize;
} WAVEFORMATEX;
cpp_quote("#endif")

interface ISpNotifySource;
interface ISpNotifySink;
interface ISpNotifyTranslator;
interface ISpDataKey;
interface ISpObjectTokenCategory;
interface ISpObjectToken;
interface IEnumSpObjectTokens;
interface ISpObjectWithToken;
interface ISpResourceManager;
interface ISpEventSource;
interface ISpEventSink;
interface ISpStreamFormat;
interface ISpStream;
interface ISpStreamFormatConverter;
interface ISpAudio;
interface ISpMMSysAudio;
interface ISpTranscript;
interface ISpVoice;
interface ISpRecoResult;
interface ISpRecoContext;
interface ISpRecognizer;
interface ISpProperties;
interface ISpLexicon;
interface ISpPhoneConverter;
interface ISpPhrase;
#if _SAPI_BLD_ >= 0x53
interface ISpRecoContext2;
interface ISpRecognizer2;
interface ISpShortcut;
interface ISpPhoneticAlphabetConverter;
interface ISpPhoneticAlphabetSelection;
interface ISpRecoGrammar2;
interface ISpeechResourceLoader;
#endif
#if _SAPI_BLD_ >= 0x54
interface ISpRecognizer3;
#endif

typedef [hidden] enum SPDATAKEYLOCATION {
  SPDKL_DefaultLocation = 0,
  SPDKL_CurrentUser = 1,
  SPDKL_LocalMachine = 2,
  SPDKL_CurrentConfig = 5
} SPDATAKEYLOCATION;

typedef [hidden] enum SPSTREAMFORMAT {
  SPSF_Default = -1,
  SPSF_NoAssignedFormat = 0,
  SPSF_Text,
  SPSF_NonStandardFormat,
  SPSF_ExtendedAudioFormat,
  SPSF_8kHz8BitMono,
  SPSF_8kHz8BitStereo,
  SPSF_8kHz16BitMono,
  SPSF_8kHz16BitStereo,
  SPSF_11kHz8BitMono,
  SPSF_11kHz8BitStereo,
  SPSF_11kHz16BitMono,
  SPSF_11kHz16BitStereo,
  SPSF_12kHz8BitMono,
  SPSF_12kHz8BitStereo,
  SPSF_12kHz16BitMono,
  SPSF_12kHz16BitStereo,
  SPSF_16kHz8BitMono,
  SPSF_16kHz8BitStereo,
  SPSF_16kHz16BitMono,
  SPSF_16kHz16BitStereo,
  SPSF_22kHz8BitMono,
  SPSF_22kHz8BitStereo,
  SPSF_22kHz16BitMono,
  SPSF_22kHz16BitStereo,
  SPSF_24kHz8BitMono,
  SPSF_24kHz8BitStereo,
  SPSF_24kHz16BitMono,
  SPSF_24kHz16BitStereo,
  SPSF_32kHz8BitMono,
  SPSF_32kHz8BitStereo,
  SPSF_32kHz16BitMono,
  SPSF_32kHz16BitStereo,
  SPSF_44kHz8BitMono,
  SPSF_44kHz8BitStereo,
  SPSF_44kHz16BitMono,
  SPSF_44kHz16BitStereo,
  SPSF_48kHz8BitMono,
  SPSF_48kHz8BitStereo,
  SPSF_48kHz16BitMono,
  SPSF_48kHz16BitStereo,
  SPSF_TrueSpeech_8kHz1BitMono,
  SPSF_CCITT_ALaw_8kHzMono,
  SPSF_CCITT_ALaw_8kHzStereo,
  SPSF_CCITT_ALaw_11kHzMono,
  SPSF_CCITT_ALaw_11kHzStereo,
  SPSF_CCITT_ALaw_22kHzMono,
  SPSF_CCITT_ALaw_22kHzStereo,
  SPSF_CCITT_ALaw_44kHzMono,
  SPSF_CCITT_ALaw_44kHzStereo,
  SPSF_CCITT_uLaw_8kHzMono,
  SPSF_CCITT_uLaw_8kHzStereo,
  SPSF_CCITT_uLaw_11kHzMono,
  SPSF_CCITT_uLaw_11kHzStereo,
  SPSF_CCITT_uLaw_22kHzMono,
  SPSF_CCITT_uLaw_22kHzStereo,
  SPSF_CCITT_uLaw_44kHzMono,
  SPSF_CCITT_uLaw_44kHzStereo,
  SPSF_ADPCM_8kHzMono,
  SPSF_ADPCM_8kHzStereo,
  SPSF_ADPCM_11kHzMono,
  SPSF_ADPCM_11kHzStereo,
  SPSF_ADPCM_22kHzMono,
  SPSF_ADPCM_22kHzStereo,
  SPSF_ADPCM_44kHzMono,
  SPSF_ADPCM_44kHzStereo,
  SPSF_GSM610_8kHzMono,
  SPSF_GSM610_11kHzMono,
  SPSF_GSM610_22kHzMono,
  SPSF_GSM610_44kHzMono,
  SPSF_NUM_FORMATS
} SPSTREAMFORMAT;

typedef [hidden] enum SPEVENTLPARAMTYPE {
  SPET_LPARAM_IS_UNDEFINED = 0,
  SPET_LPARAM_IS_TOKEN,
  SPET_LPARAM_IS_OBJECT,
  SPET_LPARAM_IS_POINTER,
  SPET_LPARAM_IS_STRING
} SPEVENTLPARAMTYPE;

typedef [hidden] enum SPEVENTENUM {
  SPEI_UNDEFINED = 0,
  SPEI_START_INPUT_STREAM = 1,
  SPEI_END_INPUT_STREAM = 2,
  SPEI_VOICE_CHANGE = 3,
  SPEI_TTS_BOOKMARK = 4,
  SPEI_WORD_BOUNDARY = 5,
  SPEI_PHONEME = 6,
  SPEI_SENTENCE_BOUNDARY = 7,
  SPEI_VISEME = 8,
  SPEI_TTS_AUDIO_LEVEL = 9,
  SPEI_TTS_PRIVATE = 15,
  SPEI_MIN_TTS = 1,
  SPEI_MAX_TTS = 15,
  SPEI_END_SR_STREAM = 34,
  SPEI_SOUND_START = 35,
  SPEI_SOUND_END = 36,
  SPEI_PHRASE_START = 37,
  SPEI_RECOGNITION = 38,
  SPEI_HYPOTHESIS = 39,
  SPEI_SR_BOOKMARK = 40,
  SPEI_PROPERTY_NUM_CHANGE = 41,
  SPEI_PROPERTY_STRING_CHANGE= 42,
  SPEI_FALSE_RECOGNITION = 43,
  SPEI_INTERFERENCE = 44,
  SPEI_REQUEST_UI = 45,
  SPEI_RECO_STATE_CHANGE = 46,
  SPEI_ADAPTATION = 47,
  SPEI_START_SR_STREAM = 48,
  SPEI_RECO_OTHER_CONTEXT = 49,
  SPEI_SR_AUDIO_LEVEL = 50,
#if _SAPI_BLD_ >= 0x53
  SPEI_SR_RETAINEDAUDIO = 51,
#endif
  SPEI_SR_PRIVATE = 52,
#if _SAPI_BLD_ >= 0x53
#if _SAPI_BLD_ >= 0x54
  SPEI_ACTIVE_CATEGORY_CHANGED = 53,
#else
  SPEI_RESERVED4 = 53,
#endif
  SPEI_RESERVED5 = 54,
  SPEI_RESERVED6 = 55,
#endif
  SPEI_MIN_SR = 34,
#if _SAPI_BLD_ >= 0x53
  SPEI_MAX_SR = 55,
#else
  SPEI_MAX_SR = 52,
#endif
  SPEI_RESERVED1 = 30,
  SPEI_RESERVED2 = 33,
  SPEI_RESERVED3 = 63
} SPEVENTENUM;

typedef [hidden] enum SPINTERFERENCE {
  SPINTERFERENCE_NONE = 0,
  SPINTERFERENCE_NOISE,
  SPINTERFERENCE_NOSIGNAL,
  SPINTERFERENCE_TOOLOUD,
  SPINTERFERENCE_TOOQUIET,
  SPINTERFERENCE_TOOFAST,
  SPINTERFERENCE_TOOSLOW,
  SPINTERFERENCE_LATENCY_WARNING,
  SPINTERFERENCE_LATENCY_TRUNCATE_BEGIN,
  SPINTERFERENCE_LATENCY_TRUNCATE_END
} SPINTERFERENCE;

typedef [hidden] enum SPENDSRSTREAMFLAGS {
  SPESF_NONE = 0,
  SPESF_STREAM_RELEASED = 1
#if _SAPI_BLD_ >= 0x53
  , SPESF_EMULATED = 2
#endif
} SPENDSRSTREAMFLAGS;

typedef [hidden] enum SPVFEATURE {
  SPVFEATURE_STRESSED = 1,
  SPVFEATURE_EMPHASIS = 2
} SPVFEATURE;

typedef [hidden] enum SPVISEMES {
  SP_VISEME_0 = 0,
  SP_VISEME_1,
  SP_VISEME_2,
  SP_VISEME_3,
  SP_VISEME_4,
  SP_VISEME_5,
  SP_VISEME_6,
  SP_VISEME_7,
  SP_VISEME_8,
  SP_VISEME_9,
  SP_VISEME_10,
  SP_VISEME_11,
  SP_VISEME_12,
  SP_VISEME_13,
  SP_VISEME_14,
  SP_VISEME_15,
  SP_VISEME_16,
  SP_VISEME_17,
  SP_VISEME_18,
  SP_VISEME_19,
  SP_VISEME_20,
  SP_VISEME_21,
} SPVISEMES;

typedef [hidden] enum SPFILEMODE {
  SPFM_OPEN_READONLY,
  SPFM_OPEN_READWRITE,
  SPFM_CREATE,
  SPFM_CREATE_ALWAYS,
  SPFM_NUM_MODES
} SPFILEMODE;

typedef [hidden] enum _SPAUDIOSTATE {
  SPAS_CLOSED,
  SPAS_STOP,
  SPAS_PAUSE,
  SPAS_RUN
} SPAUDIOSTATE;

typedef [hidden] enum SPDISPLYATTRIBUTES {
  SPAF_ONE_TRAILING_SPACE = 0x2,
  SPAF_TWO_TRAILING_SPACES = 0x4,
  SPAF_CONSUME_LEADING_SPACES = 0x8,
#if _SAPI_BLD_ >= 0x53
  SPAF_BUFFER_POSITION = 0x10,
  SPAF_ALL = 0x1f,
  SPAF_USER_SPECIFIED = 0x80
#else
  SPAF_ALL = 0x0f
#endif
} SPDISPLAYATTRIBUTES;

typedef [hidden] enum SPPHRASEPROPERTYUNIONTYPE {
  SPPPUT_UNUSED = 0,
  SPPPUT_ARRAY_INDEX
} SPPHRASEPROPERTYUNIONTYPE;

#if _SAPI_BLD_ >= 0x53
typedef enum SPSEMANTICFORMAT {
  SPSMF_SAPI_PROPERTIES = 0,
  SPSMF_SRGS_SEMANTICINTERPRETATION_MS = 1,
  SPSMF_SRGS_SAPIPROPERTIES = 2,
  SPSMF_UPS = 4,
  SPSMF_SRGS_SEMANTICINTERPRETATION_W3C = 8
} SPSEMANTICFORMAT;
#endif

typedef [hidden] enum SPRECOEVENTFLAGS {
  SPREF_AutoPause = 0x1,
  SPREF_Emulated = 0x2
#if _SAPI_BLD_ >= 0x53
  , SPREF_SMLTimeout = 0x4,
  SPREF_ExtendableParse = 0x8,
  SPREF_ReSent = 0x10,
  SPREF_Hypothesis = 0x20,
  SPREF_FalseRecognition = 0x40
#endif
} SPRECOEVENTFLAGS;

typedef [hidden] enum SPPARTOFSPEECH {
  SPPS_NotOverriden = -1,
  SPPS_Unknown = 0,
  SPPS_Noun = 0x1000,
  SPPS_Verb = 0x2000,
  SPPS_Modifier = 0x3000,
  SPPS_Function = 0x4000,
  SPPS_Interjection = 0x5000
#if _SAPI_BLD_ >= 0x53
  , SPPS_Noncontent = 0x6000,
  SPPS_LMA = 0x7000,
  SPPS_SuppressWord = 0xf000
#endif
} SPPARTOFSPEECH;

typedef [hidden] enum SPLEXICONTYPE {
  eLEXTYPE_USER = 0x1,
  eLEXTYPE_APP = 0x2,
  eLEXTYPE_VENDORLEXICON = 0x4,
  eLEXTYPE_LETTERTOSOUND = 0x8,
  eLEXTYPE_MORPHOLOGY = 0x10,
  eLEXTYPE_RESERVED4 = 0x20,
  eLEXTYPE_USER_SHORTCUT = 0x40,
  eLEXTYPE_RESERVED6 = 0x80,
  eLEXTYPE_RESERVED7 = 0x100,
  eLEXTYPE_RESERVED8 = 0x200,
  eLEXTYPE_RESERVED9 = 0x400,
  eLEXTYPE_RESERVED10 = 0x800,
  eLEXTYPE_PRIVATE1 = 0x1000,
  eLEXTYPE_PRIVATE2 = 0x2000,
  eLEXTYPE_PRIVATE3 = 0x4000,
  eLEXTYPE_PRIVATE4 = 0x8000,
  eLEXTYPE_PRIVATE5 = 0x10000,
  eLEXTYPE_PRIVATE6 = 0x20000,
  eLEXTYPE_PRIVATE7 = 0x40000,
  eLEXTYPE_PRIVATE8 = 0x80000,
  eLEXTYPE_PRIVATE9 = 0x100000,
  eLEXTYPE_PRIVATE10 = 0x200000,
  eLEXTYPE_PRIVATE11 = 0x400000,
  eLEXTYPE_PRIVATE12 = 0x800000,
  eLEXTYPE_PRIVATE13 = 0x1000000,
  eLEXTYPE_PRIVATE14 = 0x2000000,
  eLEXTYPE_PRIVATE15 = 0x4000000,
  eLEXTYPE_PRIVATE16 = 0x8000000,
  eLEXTYPE_PRIVATE17 = 0x10000000,
  eLEXTYPE_PRIVATE18 = 0x20000000,
  eLEXTYPE_PRIVATE19 = 0x40000000,
  eLEXTYPE_PRIVATE20 = 0x80000000u
} SPLEXICONTYPE;

typedef [hidden] enum SPWORDTYPE {
  eWORDTYPE_ADDED = 1,
  eWORDTYPE_DELETED = 2
} SPWORDTYPE;

#if _SAPI_BLD_ >= 0x53
typedef [hidden] enum SPPRONUNCIATIONFLAGS {
  ePRONFLAG_USED = 1
} SPPRONUNCIATIONFLAGS;

typedef [hidden] enum SPSHORTCUTTYPE {
  SPSHT_NotOverriden = -1,
  SPSHT_Unknown = 0,
  SPSHT_EMAIL = 0x1000,
  SPSHT_OTHER = 0x2000,
  SPPS_RESERVED1 = 0x3000,
  SPPS_RESERVED2 = 0x4000,
  SPPS_RESERVED3 = 0x5000,
  SPPS_RESERVED4 = 0xf000
} SPSHORTCUTTYPE;
#endif

typedef [hidden] enum SPVALUETYPE {
  SPDF_PROPERTY = 0x1,
  SPDF_REPLACEMENT = 0x2,
  SPDF_RULE = 0x4,
  SPDF_DISPLAYTEXT = 0x8,
  SPDF_LEXICALFORM = 0x10,
  SPDF_PRONUNCIATION = 0x20,
  SPDF_AUDIO = 0x40,
  SPDF_ALTERNATES = 0x80,
  SPDF_ALL = 0xff
} SPVALUETYPE;

typedef [hidden] enum SPPHRASERNG {
  SPPR_ALL_ELEMENTS = -1
} SPPHRASERNG;

typedef [hidden] enum SPVACTIONS {
  SPVA_Speak = 0,
  SPVA_Silence,
  SPVA_Pronounce,
  SPVA_Bookmark,
  SPVA_SpellOut,
  SPVA_Section,
  SPVA_ParseUnknownTag
} SPVACTIONS;

typedef [hidden] enum SPRUNSTATE {
  SPRS_DONE = 1,
  SPRS_IS_SPEAKING = 2
} SPRUNSTATE;

typedef [hidden] enum SPVLIMITS {
  SPMIN_VOLUME = 0,
  SPMAX_VOLUME = 100,
  SPMIN_RATE = -10,
  SPMAX_RATE = 10
} SPVLIMITS;

typedef [hidden] enum SPVPRIORITY {
  SPVPRI_NORMAL = 0,
  SPVPRI_ALERT = 1,
  SPVPRI_OVER = 2
} SPVPRIORITY;

cpp_quote("EXTERN_C const GUID SPDFID_Text;")
cpp_quote("EXTERN_C const GUID SPDFID_WaveFormatEx;")

cpp_quote("")
const signed char SP_LOW_CONFIDENCE = -1;
const signed char SP_NORMAL_CONFIDENCE = 0;
const signed char SP_HIGH_CONFIDENCE = +1;
const float DEFAULT_WEIGHT = 1;
const ULONG SP_MAX_WORD_LENGTH = 128;
const ULONG SP_MAX_PRON_LENGTH = 384;
#if _SAPI_BLD_ >= 0x53
const ULONG SP_EMULATE_RESULT = 0x40000000;
#endif

cpp_quote("")
cpp_quote("#ifdef __cplusplus")
cpp_quote("interface ISpNotifyCallback {")
cpp_quote("  virtual HRESULT STDMETHODCALLTYPE NotifyCallback(WPARAM wParam, LPARAM lParam) = 0;")
cpp_quote("};")
cpp_quote("#else")
typedef void *ISpNotifyCallback;
cpp_quote("#endif")

cpp_quote("#if 0")
typedef void *SPNOTIFYCALLBACK;
cpp_quote("#else")
cpp_quote("typedef void __stdcall SPNOTIFYCALLBACK(WPARAM wParam, LPARAM lParam);")
cpp_quote("#endif")

[object, uuid (5eff4aef-8487-11d2-961c-00c04f8ee628), pointer_default (unique), restricted]
interface ISpNotifySource : IUnknown {
  HRESULT SetNotifySink ([in] ISpNotifySink *pNotifySink);
  [local] HRESULT SetNotifyWindowMessage ([in] HWND hWnd,[in] UINT Msg,[in] WPARAM wParam,[in] LPARAM lParam);
  [local] HRESULT SetNotifyCallbackFunction ([in] SPNOTIFYCALLBACK *pfnCallback,[in] WPARAM wParam,[in] LPARAM lParam);
  [local] HRESULT SetNotifyCallbackInterface ([in] ISpNotifyCallback *pSpCallback,[in] WPARAM wParam,[in] LPARAM lParam);
  [local] HRESULT SetNotifyWin32Event (void);
  [local] HRESULT WaitForNotifyEvent ([in] DWORD dwMilliseconds);
  [local] HANDLE GetNotifyEventHandle ();
}

[object, uuid (259684dc-37c3-11d2-9603-00c04f8ee628), pointer_default (unique), restricted]
interface ISpNotifySink : IUnknown {
  HRESULT Notify (void);
}

[object, local, uuid (ACA16614-5d3d-11d2-960e-00c04f8ee628), pointer_default (unique), restricted]
interface ISpNotifyTranslator : ISpNotifySink {
  HRESULT InitWindowMessage ([in] HWND hWnd,[in] UINT Msg,[in] WPARAM wParam,[in] LPARAM lParam);
  HRESULT InitCallback ([in] SPNOTIFYCALLBACK *pfnCallback,[in] WPARAM wParam,[in] LPARAM lParam);
  HRESULT InitSpNotifyCallback ([in] ISpNotifyCallback *pSpCallback,[in] WPARAM wParam,[in] LPARAM lParam);
  HRESULT InitWin32Event ([in] HANDLE hEvent,[in] WINBOOL fCloseHandleOnRelease);
  HRESULT Wait ([in] DWORD dwMilliseconds);
  HANDLE GetEventHandle ();
}

[object, local, uuid (14056581-E16C-11d2-BB90-00c04f8ee6c0), pointer_default (unique), restricted]
interface ISpDataKey : IUnknown {
  HRESULT SetData ([in] LPCWSTR pszValueName,[in] ULONG cbData,[in] const BYTE *pData);
  HRESULT GetData ([in] LPCWSTR pszValueName,[in] ULONG *pcbData,[out] BYTE *pData);
  HRESULT SetStringValue ([in] LPCWSTR pszValueName,[in] LPCWSTR pszValue);
  HRESULT GetStringValue ([in] LPCWSTR pszValueName,[out] LPWSTR *ppszValue);
  HRESULT SetDWORD ([in] LPCWSTR pszValueName,[in] DWORD dwValue);
  HRESULT GetDWORD ([in] LPCWSTR pszValueName,[out] DWORD *pdwValue);
  HRESULT OpenKey ([in] LPCWSTR pszSubKeyName,[out] ISpDataKey **ppSubKey);
  HRESULT CreateKey ([in] LPCWSTR pszSubKey,[out] ISpDataKey **ppSubKey);
  HRESULT DeleteKey ([in] LPCWSTR pszSubKey);
  HRESULT DeleteValue ([in] LPCWSTR pszValueName);
  HRESULT EnumKeys ([in] ULONG Index,[out] LPWSTR *ppszSubKeyName);
  HRESULT EnumValues ([in] ULONG Index,[out] LPWSTR *ppszValueName);
};

[object, uuid (5b559f40-E952-11d2-BB91-00c04f8ee6c0), pointer_default (unique), restricted]
interface ISpObjectWithToken : IUnknown {
  HRESULT SetObjectToken ([in] ISpObjectToken *pToken);
  HRESULT GetObjectToken ([out] ISpObjectToken **ppToken);
};

[object, local, uuid (06b64f9e-7fda-11d2-B4F2-00c04f797396), pointer_default (unique), restricted]
interface IEnumSpObjectTokens : IUnknown {
  HRESULT Next ([in] ULONG celt,[out, size_is (celt), length_is (*pceltFetched)] ISpObjectToken **pelt,[out] ULONG *pceltFetched);
  HRESULT Skip ([in] ULONG celt);
  HRESULT Reset (void);
  HRESULT Clone ([out] IEnumSpObjectTokens **ppEnum);
  HRESULT Item ([in] ULONG Index,[out] ISpObjectToken **ppToken);
  HRESULT GetCount ([out] ULONG *pCount);
};

[object, uuid (92a66e2b-C830-4149-83df-6fc2ba1e7a5b), pointer_default (unique), restricted]
interface ISpRegDataKey : ISpDataKey {
  [local] HRESULT SetKey ([in] HKEY hkey,[in] WINBOOL fReadOnly);
}

[object, local, uuid (2d3d3845-39af-4850-BBF9-40b49780011d), pointer_default (unique), restricted]
interface ISpObjectTokenCategory : ISpDataKey {
  HRESULT SetId ([in] LPCWSTR pszCategoryId,[in] WINBOOL fCreateIfNotExist);
  HRESULT GetId ([out] LPWSTR *ppszCoMemCategoryId);
  HRESULT GetDataKey ([in] SPDATAKEYLOCATION spdkl,[out] ISpDataKey **ppDataKey);
  HRESULT EnumTokens ([in, string] LPCWSTR pzsReqAttribs,[in, string] LPCWSTR pszOptAttribs,[out] IEnumSpObjectTokens **ppEnum);
  HRESULT SetDefaultTokenId ([in] LPCWSTR pszTokenId);
  HRESULT GetDefaultTokenId ([out] LPWSTR *ppszCoMemTokenId);
};

[object, local, uuid (14056589-E16C-11d2-BB90-00c04f8ee6c0), pointer_default (unique), restricted]
interface ISpObjectToken : ISpDataKey {
  HRESULT SetId (LPCWSTR pszCategoryId,[in] LPCWSTR pszTokenId,[in] WINBOOL fCreateIfNotExist);
  HRESULT GetId ([out] LPWSTR *ppszCoMemTokenId);
  HRESULT GetCategory ([out] ISpObjectTokenCategory **ppTokenCategory);
  HRESULT CreateInstance ([in] IUnknown *pUnkOuter,[in] DWORD dwClsContext,[in] REFIID riid,[out, iid_is (riid)] void **ppvObject);
  HRESULT GetStorageFileName ([in] REFCLSID clsidCaller,[in] LPCWSTR pszValueName,[in, string] LPCWSTR pszFileNameSpecifier,[in] ULONG nFolder,[out] LPWSTR *ppszFilePath);
  HRESULT RemoveStorageFileName ([in] REFCLSID clsidCaller,[in] LPCWSTR pszKeyName,[in] WINBOOL fDeleteFile);
  HRESULT Remove (const CLSID *pclsidCaller);
  [local] HRESULT IsUISupported ([in] LPCWSTR pszTypeOfUI,[in] void *pvExtraData,[in] ULONG cbExtraData,[in] IUnknown *punkObject,[out] WINBOOL *pfSupported);
  [local] HRESULT DisplayUI ([in] HWND hwndParent,[in] LPCWSTR pszTitle,[in] LPCWSTR pszTypeOfUI,[in] void *pvExtraData,[in] ULONG cbExtraData,[in] IUnknown *punkObject);
  HRESULT MatchesAttributes ([in] LPCWSTR pszAttributes,[out] WINBOOL *pfMatches);
};

[object, uuid (B8AAB0CF-346f-49d8-9499-C8B03F161D51), pointer_default (unique), restricted]
interface ISpObjectTokenInit : ISpObjectToken {
  HRESULT InitFromDataKey ([in] LPCWSTR pszCategoryId,[in] LPCWSTR pszTokenId,[in] ISpDataKey *pDataKey);
};

[object, uuid (93384e18-5014-43d5-ADBB-A78E055926BD), pointer_default (unique), restricted]
interface ISpResourceManager : IServiceProvider
{
  HRESULT SetObject ([in] REFGUID guidServiceId,[in] IUnknown *pUnkObject);
  HRESULT GetObject ([in] REFGUID guidServiceId,[in] REFCLSID ObjectCLSID,[in] REFIID ObjectIID,[in] WINBOOL fReleaseWhenLastExternalRefReleased,[out, iid_is (ObjectIID)] void **ppObject);
};

cpp_quote("#if 0")
typedef [restricted, hidden] struct SPEVENT {
  WORD eEventId;
  WORD elParamType;
  ULONG ulStreamNum;
  ULONGLONG ullAudioStreamOffset;
  WPARAM wParam;
  LPARAM lParam;
} SPEVENT;

typedef [restricted, hidden] struct SPSERIALIZEDEVENT {
  WORD eEventId;
  WORD elParamType;
  ULONG ulStreamNum;
  ULONGLONG ullAudioStreamOffset;
  ULONG SerializedwParam;
  LONG SerializedlParam;
} SPSERIALIZEDEVENT;

typedef [restricted, hidden] struct SPSERIALIZEDEVENT64 {
  WORD eEventId;
  WORD elParamType;
  ULONG ulStreamNum;
  ULONGLONG ullAudioStreamOffset;
  ULONGLONG SerializedwParam;
  LONGLONG SerializedlParam;
} SPSERIALIZEDEVENT64;
cpp_quote("#else")
cpp_quote("typedef struct SPEVENT {")
cpp_quote("  SPEVENTENUM eEventId : 16;")
cpp_quote("  SPEVENTLPARAMTYPE elParamType : 16;")
cpp_quote("  ULONG ulStreamNum;")
cpp_quote("  ULONGLONG ullAudioStreamOffset;")
cpp_quote("  WPARAM      wParam;")
cpp_quote("  LPARAM      lParam;")
cpp_quote("} SPEVENT;")
cpp_quote("")
cpp_quote("typedef struct SPSERIALIZEDEVENT {")
cpp_quote("  SPEVENTENUM eEventId : 16;")
cpp_quote("  SPEVENTLPARAMTYPE elParamType : 16;")
cpp_quote("  ULONG ulStreamNum;")
cpp_quote("  ULONGLONG ullAudioStreamOffset;")
cpp_quote("  ULONG SerializedwParam;")
cpp_quote("  LONG SerializedlParam;")
cpp_quote("} SPSERIALIZEDEVENT;")
cpp_quote("")
cpp_quote("typedef struct SPSERIALIZEDEVENT64 {")
cpp_quote("  SPEVENTENUM eEventId : 16;")
cpp_quote("  SPEVENTLPARAMTYPE elParamType : 16;")
cpp_quote("  ULONG ulStreamNum;")
cpp_quote("  ULONGLONG ullAudioStreamOffset;")
cpp_quote("  ULONGLONG SerializedwParam;")
cpp_quote("  LONGLONG SerializedlParam;")
cpp_quote("} SPSERIALIZEDEVENT64;")
cpp_quote("#endif")

#if _SAPI_BLD_ >= 0x53
cpp_quote("#if 0")
typedef [restricted, hidden] struct SPEVENTEX {
  WORD eEventId;
  WORD elParamType;
  ULONG ulStreamNum;
  ULONGLONG ullAudioStreamOffset;
  WPARAM wParam;
  LPARAM lParam;
  ULONGLONG ullAudioTimeOffset;
} SPEVENTEX;
cpp_quote("#else")
cpp_quote("typedef struct SPEVENTEX {")
cpp_quote("  SPEVENTENUM eEventId : 16;")
cpp_quote("  SPEVENTLPARAMTYPE elParamType : 16;")
cpp_quote("  ULONG ulStreamNum;")
cpp_quote("  ULONGLONG ullAudioStreamOffset;")
cpp_quote("  WPARAM wParam;")
cpp_quote("  LPARAM lParam;")
cpp_quote("  ULONGLONG ullAudioTimeOffset;")
cpp_quote("} SPEVENTEX;")
cpp_quote("#endif")
#endif

typedef [restricted, hidden] struct SPEVENTSOURCEINFO {
  ULONGLONG ullEventInterest;
  ULONGLONG ullQueuedInterest;
  ULONG ulCount;
} SPEVENTSOURCEINFO;

[object, local, uuid (BE7A9CCE-5f9e-11d2-960f-00c04f8ee628), pointer_default (unique), restricted]
interface ISpEventSource : ISpNotifySource {
  HRESULT SetInterest ([in] ULONGLONG ullEventInterest,[in] ULONGLONG ullQueuedInterest);
  HRESULT GetEvents ([in] ULONG ulCount,[out, size_is (ulCount)] SPEVENT *pEventArray,[out] ULONG *pulFetched);
  HRESULT GetInfo ([out] SPEVENTSOURCEINFO *pInfo);
};

#if _SAPI_BLD_ >= 0x53
[object, local, uuid (2373a435-6a4b-429e-A6AC-D4231A61975B), pointer_default (unique), restricted]
interface ISpEventSource2 : ISpEventSource {
  HRESULT GetEventsEx ([in] ULONG ulCount,[out, size_is (ulCount)] SPEVENTEX *pEventArray,[out] ULONG *pulFetched);
};
#endif

[object, local, uuid (BE7A9CC9-5f9e-11d2-960f-00c04f8ee628), pointer_default (unique), restricted]
interface ISpEventSink : IUnknown {
  HRESULT AddEvents ([in] const SPEVENT *pEventArray,[in] ULONG ulCount);
  HRESULT GetEventInterest ([out] ULONGLONG *pullEventInterest);
};

[object, uuid (BED530BE-2606-4f4d-A1C0-54c5cda5566f), pointer_default (unique), restricted]
interface ISpStreamFormat : IStream {
  HRESULT GetFormat ([in] GUID *pguidFormatId,[out] WAVEFORMATEX **ppCoMemWaveFormatEx);
}

[object, local, uuid (12e3cca9-7518-44c5-A5E7-BA5A79CB929E), pointer_default (unique), restricted]
interface ISpStream : ISpStreamFormat {
  HRESULT SetBaseStream ([in] IStream *pStream,[in] REFGUID rguidFormat,[in] const WAVEFORMATEX *pWaveFormatEx);
  HRESULT GetBaseStream ([out] IStream **ppStream);
  HRESULT BindToFile ([in] LPCWSTR pszFileName,[in] SPFILEMODE eMode,[in] const GUID *pFormatId, const WAVEFORMATEX *pWaveFormatEx,[in] ULONGLONG ullEventInterest);
  HRESULT Close ();
}

[object, uuid (678a932c-EA71-4446-9b41-78fda6280a29), pointer_default (unique), restricted]
interface ISpStreamFormatConverter : ISpStreamFormat {
  HRESULT SetBaseStream ([in] ISpStreamFormat *pStream,[in] WINBOOL fSetFormatToBaseStreamFormat,[in] WINBOOL fWriteToBaseStream);
  HRESULT GetBaseStream ([out] ISpStreamFormat **ppStream);
  HRESULT SetFormat ([in] REFGUID rguidFormatIdOfConvertedStream,[in] const WAVEFORMATEX *pWaveFormatExOfConvertedStream);
  HRESULT ResetSeekPosition ();
  HRESULT ScaleConvertedToBaseOffset ([in] ULONGLONG ullOffsetConvertedStream,[out] ULONGLONG *pullOffsetBaseStream);
  HRESULT ScaleBaseToConvertedOffset ([in] ULONGLONG ullOffsetBaseStream,[out] ULONGLONG *pullOffsetConvertedStream);
};

typedef [restricted, hidden] struct SPAUDIOSTATUS {
  long cbFreeBuffSpace;
  ULONG cbNonBlockingIO;
  SPAUDIOSTATE State;
  ULONGLONG CurSeekPos;
  ULONGLONG CurDevicePos;
  DWORD dwAudioLevel;
  DWORD dwReserved2;
} SPAUDIOSTATUS;

typedef [restricted, hidden] struct SPAUDIOBUFFERINFO {
  ULONG ulMsMinNotification;
  ULONG ulMsBufferSize;
  ULONG ulMsEventBias;
} SPAUDIOBUFFERINFO;

[object, local, uuid (C05C768F-FAE8-4ec2-8e07-338321c12452), pointer_default (unique), restricted]
interface ISpAudio : ISpStreamFormat {
  HRESULT SetState ([in] SPAUDIOSTATE NewState,[in] ULONGLONG ullReserved);
  HRESULT SetFormat ([in] REFGUID rguidFmtId,[in] const WAVEFORMATEX *pWaveFormatEx);
  HRESULT GetStatus ([out] SPAUDIOSTATUS *pStatus);
  HRESULT SetBufferInfo ([in] const SPAUDIOBUFFERINFO *pBuffInfo);
  HRESULT GetBufferInfo ([out] SPAUDIOBUFFERINFO *pBuffInfo);
  HRESULT GetDefaultFormat ([out] GUID *pFormatId,[out] WAVEFORMATEX **ppCoMemWaveFormatEx);
  HANDLE EventHandle ();
  HRESULT GetVolumeLevel ([out] ULONG *pLevel);
  HRESULT SetVolumeLevel ([in] ULONG Level);
  HRESULT GetBufferNotifySize ([out] ULONG *pcbSize);
  HRESULT SetBufferNotifySize ([in] ULONG cbSize);
};

[object, local, uuid (15806f6e-1d70-4b48-98e6-3b1a007509ab), pointer_default (unique), restricted]
interface ISpMMSysAudio : ISpAudio {
  HRESULT GetDeviceId ([out] UINT *puDeviceId);
  HRESULT SetDeviceId ([in] UINT uDeviceId);
  HRESULT GetMMHandle ([out] void **pHandle);
  HRESULT GetLineId ([out] UINT *puLineId);
  HRESULT SetLineId ([in] UINT uLineId);
};

[object, uuid (10f63bce-201a-11d3-AC70-00c04f8ee6c0), pointer_default (unique), restricted]
interface ISpTranscript : IUnknown {
  HRESULT GetTranscript ([out, string] LPWSTR *ppszTranscript);
  HRESULT AppendTranscript ([in, string] LPCWSTR pszTranscript);
};

typedef WCHAR SPPHONEID;
typedef LPWSTR PSPPHONEID;
typedef LPCWSTR PCSPPHONEID;

typedef [restricted, hidden] struct SPPHRASEELEMENT {
  ULONG ulAudioTimeOffset;
  ULONG ulAudioSizeTime;
  ULONG ulAudioStreamOffset;
  ULONG ulAudioSizeBytes;
  ULONG ulRetainedStreamOffset;
  ULONG ulRetainedSizeBytes;
  LPCWSTR pszDisplayText;
  LPCWSTR pszLexicalForm;
  const SPPHONEID *pszPronunciation;
  BYTE bDisplayAttributes;
  signed char RequiredConfidence;
  signed char ActualConfidence;
  BYTE Reserved;
  float SREngineConfidence;
} SPPHRASEELEMENT;

typedef [restricted, hidden] struct SPPHRASERULE SPPHRASERULE;
typedef [restricted, hidden] struct SPPHRASEPROPERTY SPPHRASEPROPERTY;

struct SPPHRASERULE {
  LPCWSTR pszName;
  ULONG ulId;
  ULONG ulFirstElement;
  ULONG ulCountOfElements;
  const SPPHRASERULE *pNextSibling;
  const SPPHRASERULE *pFirstChild;
  float SREngineConfidence;
  signed char Confidence;
};

struct SPPHRASEPROPERTY {
  LPCWSTR pszName;
  union {
    ULONG ulId;
    struct {
      byte bType;
      byte bReserved;
      unsigned short usArrayIndex;
    };
  };
  LPCWSTR pszValue;
  VARIANT vValue;
  ULONG ulFirstElement;
  ULONG ulCountOfElements;
  const SPPHRASEPROPERTY *pNextSibling;
  const SPPHRASEPROPERTY *pFirstChild;
  float SREngineConfidence;
  signed char Confidence;
};

typedef [restricted, hidden] struct SPPHRASEREPLACEMENT {
  BYTE bDisplayAttributes;
  LPCWSTR pszReplacementText;
  ULONG ulFirstElement;
  ULONG ulCountOfElements;
} SPPHRASEREPLACEMENT;

#if _SAPI_BLD_ >= 0x53
typedef [restricted, hidden] struct SPSEMANTICERRORINFO {
  ULONG ulLineNumber;
  LPWSTR pszScriptLine;
  LPWSTR pszSource;
  LPWSTR pszDescription;
  HRESULT hrResultCode;
} SPSEMANTICERRORINFO;
#endif

#if _SAPI_BLD_ >= 0x53
typedef [restricted, hidden] struct SPPHRASE_50
#else
typedef [restricted, hidden] struct SPPHRASE
#endif
{
  ULONG cbSize;
  LANGID LangID;
  WORD wHomophoneGroupId;
  ULONGLONG ullGrammarID;
  ULONGLONG ftStartTime;
  ULONGLONG ullAudioStreamPosition;
  ULONG ulAudioSizeBytes;
  ULONG ulRetainedSizeBytes;
  ULONG ulAudioSizeTime;
  SPPHRASERULE Rule;
  const SPPHRASEPROPERTY *pProperties;
  const SPPHRASEELEMENT *pElements;
  ULONG cReplacements;
  const SPPHRASEREPLACEMENT *pReplacements;
  GUID SREngineID;
  ULONG ulSREnginePrivateDataSize;
  const BYTE *pSREnginePrivateData;
}
#if _SAPI_BLD_ >= 0x53
SPPHRASE_50;
#else
SPPHRASE;
#endif

#if _SAPI_BLD_ >= 0x53
cpp_quote("#define SP_SPPHRASESIZE_500 sizeof (SPPHRASE_50)")

cpp_quote("#ifdef __cplusplus")
#if _SAPI_BLD_ > 0x53
cpp_quote("typedef struct SPPHRASE_53 : public SPPHRASE_50 {")
#else
cpp_quote("typedef struct SPPHRASE : public SPPHRASE_50 {")
#endif
cpp_quote("  LPWSTR pSML;")
cpp_quote("  SPSEMANTICERRORINFO* pSemanticErrorInfo;")
#if _SAPI_BLD_ > 0x53
cpp_quote("} SPPHRASE_53;")
#else
cpp_quote("} SPPHRASE;")
#endif
cpp_quote("#else")
#if _SAPI_BLD_ > 0x53
typedef [restricted, hidden] struct SPPHRASE_53
#else
typedef [restricted, hidden] struct SPPHRASE
#endif
{
  ULONG cbSize;
  LANGID LangID;
  WORD wHomophoneGroupId;
  ULONGLONG ullGrammarID;
  ULONGLONG ftStartTime;
  ULONGLONG ullAudioStreamPosition;
  ULONG ulAudioSizeBytes;
  ULONG ulRetainedSizeBytes;
  ULONG ulAudioSizeTime;
  SPPHRASERULE Rule;
  const SPPHRASEPROPERTY *pProperties;
  const SPPHRASEELEMENT *pElements;
  ULONG cReplacements;
  const SPPHRASEREPLACEMENT *pReplacements;
  GUID SREngineID;
  ULONG ulSREnginePrivateDataSize;
  const BYTE *pSREnginePrivateData;
  LPWSTR pSML;
  SPSEMANTICERRORINFO *pSemanticErrorInfo;
}
#if _SAPI_BLD_ > 0x53
SPPHRASE_53;
#else
SPPHRASE;
#endif
cpp_quote("#endif")
#endif

#if _SAPI_BLD_ >= 0x54
cpp_quote("#define SP_SPPHRASESIZE_530 sizeof (SPPHRASE_53)")

cpp_quote("#ifdef __cplusplus")
cpp_quote("typedef struct SPPHRASE : public SPPHRASE_53 {")
cpp_quote("  SPSEMANTICFORMAT SemanticTagFormat;")
cpp_quote("} SPPHRASE;")
cpp_quote("#else")
typedef [restricted, hidden] struct SPPHRASE {
  ULONG cbSize;
  LANGID LangID;
  WORD wHomophoneGroupId;
  ULONGLONG ullGrammarID;
  ULONGLONG ftStartTime;
  ULONGLONG ullAudioStreamPosition;
  ULONG ulAudioSizeBytes;
  ULONG ulRetainedSizeBytes;
  ULONG ulAudioSizeTime;
  SPPHRASERULE Rule;
  const SPPHRASEPROPERTY *pProperties;
  const SPPHRASEELEMENT *pElements;
  ULONG cReplacements;
  const SPPHRASEREPLACEMENT *pReplacements;
  GUID SREngineID;
  ULONG ulSREnginePrivateDataSize;
  const BYTE *pSREnginePrivateData;
  LPWSTR pSML;
  SPSEMANTICERRORINFO *pSemanticErrorInfo;
  SPSEMANTICFORMAT SemanticTagFormat;
} SPPHRASE;
cpp_quote("#endif")
#endif

typedef [restricted, hidden] struct SPSERIALIZEDPHRASE {
  ULONG ulSerializedSize;
} SPSERIALIZEDPHRASE;

#if _SAPI_BLD_ >= 0x53
typedef [restricted, hidden] struct SPRULE {
  LPCWSTR pszRuleName;
  ULONG ulRuleId;
  DWORD dwAttributes;
} SPRULE;
#endif

typedef [hidden] struct SPBINARYGRAMMAR {
  ULONG ulTotalSerializedSize;
} SPBINARYGRAMMAR;

cpp_quote("#if 0")
typedef void *SPSTATEHANDLE;
cpp_quote("#else")
cpp_quote("DECLARE_HANDLE(SPSTATEHANDLE);")
cpp_quote("#endif")

typedef [restricted, hidden] struct SPWORDPRONUNCIATION {
  struct SPWORDPRONUNCIATION *pNextWordPronunciation;
  SPLEXICONTYPE eLexiconType;
  LANGID LangID;
  WORD wPronunciationFlags;
  SPPARTOFSPEECH ePartOfSpeech;
  SPPHONEID szPronunciation[1];
} SPWORDPRONUNCIATION;

typedef [restricted, hidden] struct SPWORDPRONUNCIATIONLIST {
  ULONG ulSize;
  BYTE *pvBuffer;
  SPWORDPRONUNCIATION *pFirstWordPronunciation;
} SPWORDPRONUNCIATIONLIST;

typedef [restricted, hidden] struct SPWORD {
  struct SPWORD *pNextWord;
  LANGID LangID;
  WORD wReserved;
  SPWORDTYPE eWordType;
  LPWSTR pszWord;
  SPWORDPRONUNCIATION *pFirstWordPronunciation;
} SPWORD;

typedef [restricted, hidden] struct SPWORDLIST {
  ULONG ulSize;
  BYTE *pvBuffer;
  SPWORD *pFirstWord;
} SPWORDLIST;

[object, local, uuid (DA41A7C2-5383-4db2-916b-6c1719e3db58), pointer_default (unique), restricted]
interface ISpLexicon : IUnknown {
  HRESULT GetPronunciations ([in] LPCWSTR pszWord,[in] LANGID LangID,[in] DWORD dwFlags,[in, out] SPWORDPRONUNCIATIONLIST *pWordPronunciationList);
  HRESULT AddPronunciation ([in] LPCWSTR pszWord,[in] LANGID LangID,[in] SPPARTOFSPEECH ePartOfSpeech,[in] PCSPPHONEID pszPronunciation);
  HRESULT RemovePronunciation ([in] LPCWSTR pszWord,[in] LANGID LangID,[in] SPPARTOFSPEECH ePartOfSpeech,[in] PCSPPHONEID pszPronunciation);
  HRESULT GetGeneration ([out] DWORD *pdwGeneration);
  HRESULT GetGenerationChange ([in] DWORD dwFlags,[in, out] DWORD *pdwGeneration,[in, out] SPWORDLIST *pWordList);
  HRESULT GetWords ([in] DWORD dwFlags,[in, out] DWORD *pdwGeneration,[in, out] DWORD *pdwCookie,[in, out] SPWORDLIST *pWordList);
};

[object, uuid (8565572f-C094-41cc-B56E-10bd9c3ff044), pointer_default (unique), restricted]
interface ISpContainerLexicon : ISpLexicon {
  HRESULT AddLexicon ([in] ISpLexicon *pAddLexicon,[in] DWORD dwFlags);
};

#if _SAPI_BLD_ >= 0x53
typedef [restricted, hidden] struct SPSHORTCUTPAIR {
  struct SPSHORTCUTPAIR *pNextSHORTCUTPAIR;
  LANGID LangID;
  SPSHORTCUTTYPE shType;
  LPWSTR pszDisplay;
  LPWSTR pszSpoken;
} SPSHORTCUTPAIR;

typedef [restricted, hidden] struct SPSHORTCUTPAIRLIST {
  ULONG ulSize;
  BYTE *pvBuffer;
  SPSHORTCUTPAIR *pFirstShortcutPair;
} SPSHORTCUTPAIRLIST;
#endif

#if _SAPI_BLD_ >= 0x53
[object, uuid (3df681e2-EA56-11d9-8bde-F66BAD1E3F3A), pointer_default (unique), restricted]
interface ISpShortcut : IUnknown {
  HRESULT AddShortcut ([in] LPCWSTR pszDisplay,[in] LANGID LangID,[in] LPCWSTR pszSpoken,[in] SPSHORTCUTTYPE shType);
  HRESULT RemoveShortcut ([in] LPCWSTR pszDisplay,[in] LANGID LangID,[in] LPCWSTR pszSpoken,[in] SPSHORTCUTTYPE shType);
  HRESULT GetShortcuts ([in] LANGID LangID,[in, out] SPSHORTCUTPAIRLIST *pShortcutpairList);
  HRESULT GetGeneration ([out] DWORD *pdwGeneration);
  HRESULT GetWordsFromGenerationChange ([in, out] DWORD *pdwGeneration,[in, out] SPWORDLIST *pWordList);
  HRESULT GetWords ([in, out] DWORD *pdwGeneration,[in, out] DWORD *pdwCookie,[in, out] SPWORDLIST *pWordList);
  HRESULT GetShortcutsForGeneration ([in, out] DWORD *pdwGeneration,[in, out] DWORD *pdwCookie,[in, out] SPSHORTCUTPAIRLIST *pShortcutpairList);
  HRESULT GetGenerationChange ([in, out] DWORD *pdwGeneration,[in, out] SPSHORTCUTPAIRLIST *pShortcutpairList);
};
#endif

[object, uuid (8445c581-0cac-4a38-ABFE-9b2ce2826455), pointer_default (unique), restricted]
interface ISpPhoneConverter : ISpObjectWithToken {
  HRESULT PhoneToId ([in] LPCWSTR pszPhone,[out] SPPHONEID *pId);
  HRESULT IdToPhone ([in] PCSPPHONEID pId,[out] WCHAR *pszPhone);
};

#if _SAPI_BLD_ >= 0x53
[object, local, uuid (133adcd4-19b4-4020-9fdc-842e78253b17), pointer_default (unique), restricted]
interface ISpPhoneticAlphabetConverter : IUnknown {
  HRESULT GetLangId ([out] LANGID *pLangID);
  HRESULT SetLangId ([in] LANGID LangID);
  HRESULT SAPI2UPS ([in] const SPPHONEID *pszSAPIId,[out] SPPHONEID *pszUPSId,[in] DWORD cMaxLength);
  HRESULT UPS2SAPI ([in] const SPPHONEID *pszUPSId,[out] SPPHONEID *pszSAPIId,[in] DWORD cMaxLength);
  HRESULT GetMaxConvertLength ([in] DWORD cSrcLength,[in] WINBOOL bSAPI2UPS,[out] DWORD *pcMaxDestLength);
};

[object, uuid (B2745EFD-42ce-48ca-81f1-A96E02538A90), pointer_default (unique), restricted]
interface ISpPhoneticAlphabetSelection : IUnknown {
  HRESULT IsAlphabetUPS ([out] WINBOOL *pfIsUPS);
  HRESULT SetAlphabetToUPS ([in] WINBOOL fForceUPS);
};
#endif

typedef [restricted, hidden] struct SPVPITCH {
  long MiddleAdj;
  long RangeAdj;
} SPVPITCH;

typedef [restricted, hidden] struct SPVCONTEXT {
  LPCWSTR pCategory;
  LPCWSTR pBefore;
  LPCWSTR pAfter;
} SPVCONTEXT;

typedef [restricted, hidden] struct SPVSTATE {
  SPVACTIONS eAction;
  LANGID LangID;
  WORD wReserved;
  long EmphAdj;
  long RateAdj;
  ULONG Volume;
  SPVPITCH PitchAdj;
  ULONG SilenceMSecs;
  SPPHONEID *pPhoneIds;
  SPPARTOFSPEECH ePartOfSpeech;
  SPVCONTEXT Context;
} SPVSTATE;

typedef [restricted, hidden] struct SPVOICESTATUS {
  ULONG ulCurrentStream;
  ULONG ulLastStreamQueued;
  HRESULT hrLastResult;
  DWORD dwRunningState;
  ULONG ulInputWordPos;
  ULONG ulInputWordLen;
  ULONG ulInputSentPos;
  ULONG ulInputSentLen;
  LONG lBookmarkId;
  SPPHONEID PhonemeId;
  SPVISEMES VisemeId;
  DWORD dwReserved1;
  DWORD dwReserved2;
} SPVOICESTATUS;

typedef [hidden] enum SPEAKFLAGS {
  SPF_DEFAULT = 0,
  SPF_ASYNC = 1,
  SPF_PURGEBEFORESPEAK = 2,
  SPF_IS_FILENAME = 4,
  SPF_IS_XML = 8,
  SPF_IS_NOT_XML = 0x10,
  SPF_PERSIST_XML = 0x20,
  SPF_NLP_SPEAK_PUNC = 0x40,
#if _SAPI_BLD_ >= 0x53
  SPF_PARSE_SAPI = 0x80,
  SPF_PARSE_SSML = 0x100,
  SPF_PARSE_AUTODETECT = 0,
#endif
  SPF_NLP_MASK = (SPF_NLP_SPEAK_PUNC),
#if _SAPI_BLD_ >= 0x53
  SPF_PARSE_MASK = (SPF_PARSE_SAPI | SPF_PARSE_SSML),
  SPF_VOICE_MASK = (SPF_ASYNC | SPF_PURGEBEFORESPEAK | SPF_IS_FILENAME | SPF_IS_XML | SPF_IS_NOT_XML | SPF_NLP_MASK | SPF_PERSIST_XML | SPF_PARSE_MASK),
#else
  SPF_VOICE_MASK = (SPF_ASYNC | SPF_PURGEBEFORESPEAK | SPF_IS_FILENAME | SPF_IS_XML | SPF_IS_NOT_XML | SPF_NLP_MASK | SPF_PERSIST_XML),
#endif
  SPF_UNUSED_FLAGS = ~ (SPF_VOICE_MASK)
} SPEAKFLAGS;

[object, local, uuid (6c44df74-72b9-4992-A1EC-EF996E0422D4), pointer_default (unique), restricted]
interface ISpVoice : ISpEventSource {
  HRESULT SetOutput ([in] IUnknown *pUnkOutput,[in] WINBOOL fAllowFormatChanges);
  HRESULT GetOutputObjectToken ([out] ISpObjectToken **ppObjectToken);
  HRESULT GetOutputStream ([out] ISpStreamFormat **ppStream);
  HRESULT Pause (void);
  HRESULT Resume (void);
  HRESULT SetVoice ([in] ISpObjectToken *pToken);
  HRESULT GetVoice ([out] ISpObjectToken **ppToken);
  HRESULT Speak ([in, string] LPCWSTR pwcs,[in] DWORD dwFlags,[out] ULONG *pulStreamNumber);
  HRESULT SpeakStream ([in] IStream *pStream,[in] DWORD dwFlags,[out] ULONG *pulStreamNumber);
  HRESULT GetStatus ([out] SPVOICESTATUS *pStatus,[out] LPWSTR *ppszLastBookmark);
  HRESULT Skip ([in, string] LPCWSTR pItemType,[in] long lNumItems,[out] ULONG *pulNumSkipped);
  HRESULT SetPriority ([in] SPVPRIORITY ePriority);
  HRESULT GetPriority ([out] SPVPRIORITY *pePriority);
  HRESULT SetAlertBoundary ([in] SPEVENTENUM eBoundary);
  HRESULT GetAlertBoundary ([out] SPEVENTENUM *peBoundary);
  HRESULT SetRate ([in] long RateAdjust);
  HRESULT GetRate ([out] long *pRateAdjust);
  HRESULT SetVolume ([in] USHORT usVolume);
  HRESULT GetVolume ([out] USHORT *pusVolume);
  HRESULT WaitUntilDone ([in] ULONG msTimeout);
  HRESULT SetSyncSpeakTimeout ([in] ULONG msTimeout);
  HRESULT GetSyncSpeakTimeout ([out] ULONG *pmsTimeout);
  [local] HANDLE SpeakCompleteEvent ();
  [local] HRESULT IsUISupported ([in] LPCWSTR pszTypeOfUI,[in] void *pvExtraData,[in] ULONG cbExtraData,[out] WINBOOL *pfSupported);
  [local] HRESULT DisplayUI ([in] HWND hwndParent,[in] LPCWSTR pszTitle,[in] LPCWSTR pszTypeOfUI,[in] void *pvExtraData,[in] ULONG cbExtraData);
};

[object, local, uuid (1a5c0354-B621-4b5a-8791-D306ED379E53), pointer_default (unique), restricted]
interface ISpPhrase : IUnknown {
  HRESULT GetPhrase ([out] SPPHRASE **ppCoMemPhrase);
  HRESULT GetSerializedPhrase ([out] SPSERIALIZEDPHRASE **ppCoMemPhrase);
  HRESULT GetText ([in] ULONG ulStart,[in] ULONG ulCount,[in] WINBOOL fUseTextReplacements,[out] LPWSTR *ppszCoMemText,[out, optional] BYTE *pbDisplayAttributes);
  HRESULT Discard ([in] DWORD dwValueTypes);
};

[object, local, uuid (8fcebc98-4e49-4067-9c6c-D86A0E092E3D), pointer_default (unique), restricted]
interface ISpPhraseAlt : ISpPhrase {
  HRESULT GetAltInfo ([out] ISpPhrase **ppParent,[out] ULONG *pulStartElementInParent,[out] ULONG *pcElementsInParent,[out] ULONG *pcElementsInAlt);
  HRESULT Commit ();
};

#if _SAPI_BLD_ >= 0x53
typedef enum SPXMLRESULTOPTIONS {
  SPXRO_SML = 0,
  SPXRO_Alternates_SML = 1
} SPXMLRESULTOPTIONS;
#endif

#if _SAPI_BLD_ >= 0x53
[object, local, uuid (F264DA52-E457-4696-B856-A737B717AF79), pointer_default (unique), restricted]
interface ISpPhrase2 : ISpPhrase {
  HRESULT GetXMLResult ([out] LPWSTR *ppszCoMemXMLResult,[in] SPXMLRESULTOPTIONS Options);
  HRESULT GetXMLErrorInfo ([out] SPSEMANTICERRORINFO *pSemanticErrorInfo);
  HRESULT GetAudio ([in] ULONG ulStartElement,[in] ULONG cElements,[out] ISpStreamFormat **ppStream);
};
#endif

typedef [restricted, hidden] struct SPRECORESULTTIMES {
  FILETIME ftStreamTime;
  ULONGLONG ullLength;
  DWORD dwTickCount;
  ULONGLONG ullStart;
} SPRECORESULTTIMES;

typedef [hidden] struct SPSERIALIZEDRESULT {
  ULONG ulSerializedSize;
} SPSERIALIZEDRESULT;

[object, local, uuid (20b053be-E235-43cd-9a2a-8d17a48b7842), pointer_default (unique), restricted]
interface ISpRecoResult : ISpPhrase {
  HRESULT GetResultTimes ([out] SPRECORESULTTIMES *pTimes);
  HRESULT GetAlternates ([in] ULONG ulStartElement,[in] ULONG cElements,[in] ULONG ulRequestCount,[out] ISpPhraseAlt **ppPhrases,[out] ULONG *pcPhrasesReturned);
  HRESULT GetAudio ([in] ULONG ulStartElement,[in] ULONG cElements,[out] ISpStreamFormat **ppStream);
  HRESULT SpeakAudio ([in] ULONG ulStartElement,[in] ULONG cElements,[in] DWORD dwFlags,[out] ULONG *pulStreamNumber);
  HRESULT Serialize ([out] SPSERIALIZEDRESULT **ppCoMemSerializedResult);
  HRESULT ScaleAudio ([in] const GUID *pAudioFormatId,[in] const WAVEFORMATEX *pWaveFormatEx);
  HRESULT GetRecoContext ([out] ISpRecoContext **ppRecoContext);
};

#if _SAPI_BLD_ >= 0x53
typedef [hidden] enum SPCOMMITFLAGS {
  SPCF_NONE = 0,
  SPCF_ADD_TO_USER_LEXICON = (1 << 0),
  SPCF_DEFINITE_CORRECTION = (1 << 1)
} SPCOMMITFLAGS;
#endif

#if _SAPI_BLD_ >= 0x53
[object, local, uuid (27cac6c4-88f2-41f2-8817-0c95e59f1e6e), pointer_default (unique), restricted]
interface ISpRecoResult2 : ISpRecoResult {
  HRESULT CommitAlternate ([in] ISpPhraseAlt *pPhraseAlt,[out] ISpRecoResult **ppNewResult);
  HRESULT CommitText ([in] ULONG ulStartElement,[in] ULONG cElements,[in] LPCWSTR pszCorrectedData,[in] DWORD eCommitFlags);
  HRESULT SetTextFeedback ([in, string] LPCWSTR pszFeedback,[in] WINBOOL fSuccessful);
}

[object, local, uuid (AE39362B-45a8-4074-9b9e-CCF49AA2D0B6), pointer_default (unique), restricted]
interface ISpXMLRecoResult : ISpRecoResult {
  HRESULT GetXMLResult ([out] LPWSTR *ppszCoMemXMLResult,[in] SPXMLRESULTOPTIONS Options);
  HRESULT GetXMLErrorInfo ([out] SPSEMANTICERRORINFO *pSemanticErrorInfo);
};
#endif

typedef [hidden] struct tagSPTEXTSELECTIONINFO {
  ULONG ulStartActiveOffset;
  ULONG cchActiveChars;
  ULONG ulStartSelection;
  ULONG cchSelection;
} SPTEXTSELECTIONINFO;

typedef [hidden] enum SPWORDPRONOUNCEABLE {
  SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE = 0,
  SPWP_UNKNOWN_WORD_PRONOUNCEABLE = 1,
  SPWP_KNOWN_WORD_PRONOUNCEABLE = 2
} SPWORDPRONOUNCEABLE;

typedef [hidden] enum SPGRAMMARSTATE {
  SPGS_DISABLED = 0,
  SPGS_ENABLED = 1,
  SPGS_EXCLUSIVE = 3
} SPGRAMMARSTATE;

typedef [hidden] enum SPCONTEXTSTATE {
  SPCS_DISABLED = 0,
  SPCS_ENABLED = 1,
} SPCONTEXTSTATE;

typedef [hidden] enum SPRULESTATE {
  SPRS_INACTIVE = 0,
  SPRS_ACTIVE = 1,
  SPRS_ACTIVE_WITH_AUTO_PAUSE = 3
#if _SAPI_BLD_ >= 0x53
  , SPRS_ACTIVE_USER_DELIMITED = 4
#endif
} SPRULESTATE;

const ULONGLONG SP_STREAMPOS_ASAP = 0;
const ULONGLONG SP_STREAMPOS_REALTIME = -1;

cpp_quote("#define SPRULETRANS_TEXTBUFFER (SPSTATEHANDLE) (-1)")
cpp_quote("#define SPRULETRANS_WILDCARD (SPSTATEHANDLE) (-2)")
cpp_quote("#define SPRULETRANS_DICTATION (SPSTATEHANDLE) (-3)")

typedef [hidden] enum SPGRAMMARWORDTYPE {
  SPWT_DISPLAY,
  SPWT_LEXICAL,
  SPWT_PRONUNCIATION
#if _SAPI_BLD_ >= 0x53
  , SPWT_LEXICAL_NO_SPECIAL_CHARS
#endif
} SPGRAMMARWORDTYPE;

typedef [hidden] struct tagSPPROPERTYINFO {
  LPCWSTR pszName;
  ULONG ulId;
  LPCWSTR pszValue;
  VARIANT vValue;
} SPPROPERTYINFO;

typedef [hidden] enum SPCFGRULEATTRIBUTES {
  SPRAF_TopLevel = 0x1,
  SPRAF_Active = 0x2,
  SPRAF_Export = 0x4,
  SPRAF_Import = 0x8,
  SPRAF_Interpreter = 0x10,
  SPRAF_Dynamic = 0x20,
#if _SAPI_BLD_ >= 0x53
  SPRAF_Root = 0x40,
#endif
  SPRAF_AutoPause = 0x10000
#if _SAPI_BLD_ >= 0x53
  , SPRAF_UserDelimited = 0x20000
#endif
} SPCFGRULEATTRIBUTES;

[object, local, uuid (8137828f-591a-4a42-BE58-49ea7ebaac68), pointer_default (unique), restricted]
interface ISpGrammarBuilder : IUnknown {
  HRESULT ResetGrammar ([in] LANGID NewLanguage);
  HRESULT GetRule ([in] LPCWSTR pszRuleName,[in] DWORD dwRuleId,[in] DWORD dwAttributes,[in] WINBOOL fCreateIfNotExist,[out] SPSTATEHANDLE *phInitialState);
  HRESULT ClearRule ([in] SPSTATEHANDLE hState);
  HRESULT CreateNewState ([in] SPSTATEHANDLE hState,[out] SPSTATEHANDLE *phState);
  HRESULT AddWordTransition ([in] SPSTATEHANDLE hFromState,[in] SPSTATEHANDLE hToState,[in] LPCWSTR psz,[in] LPCWSTR pszSeparators,[in] SPGRAMMARWORDTYPE eWordType,[in] float Weight,[in] const SPPROPERTYINFO *pPropInfo);
  HRESULT AddRuleTransition ([in] SPSTATEHANDLE hFromState,[in] SPSTATEHANDLE hToState,[in] SPSTATEHANDLE hRule,[in] float Weight,[in] const SPPROPERTYINFO *pPropInfo);
  HRESULT AddResource ([in] SPSTATEHANDLE hRuleState,[in] LPCWSTR pszResourceName,[in] LPCWSTR pszResourceValue);
  HRESULT Commit ([in] DWORD dwReserved);
};

typedef [hidden] enum SPLOADOPTIONS {
  SPLO_STATIC = 0,
  SPLO_DYNAMIC = 1
} SPLOADOPTIONS;

[object, local, uuid (2177db29-7f45-47d0-8554-067e91c80502), pointer_default (unique), restricted]
interface ISpRecoGrammar : ISpGrammarBuilder {
  HRESULT GetGrammarId ([out] ULONGLONG *pullGrammarId);
  HRESULT GetRecoContext ([out] ISpRecoContext **ppRecoCtxt);
  HRESULT LoadCmdFromFile ([in, string] LPCWSTR pszFileName,[in] SPLOADOPTIONS Options);
  HRESULT LoadCmdFromObject ([in] REFCLSID rcid,[in, string] LPCWSTR pszGrammarName,[in] SPLOADOPTIONS Options);
  HRESULT LoadCmdFromResource ([in] HMODULE hModule,[in, string] LPCWSTR pszResourceName,[in, string] LPCWSTR pszResourceType,[in] WORD wLanguage,[in] SPLOADOPTIONS Options);
  HRESULT LoadCmdFromMemory ([in] const SPBINARYGRAMMAR *pGrammar,[in] SPLOADOPTIONS Options);
  HRESULT LoadCmdFromProprietaryGrammar ([in] REFGUID rguidParam,[in, string] LPCWSTR pszStringParam,[in] const void *pvDataPrarm,[in] ULONG cbDataSize,[in] SPLOADOPTIONS Options);
  HRESULT SetRuleState ([in, string] LPCWSTR pszName,[in] void *pReserved,[in] SPRULESTATE NewState);
  HRESULT SetRuleIdState ([in] ULONG ulRuleId,[in] SPRULESTATE NewState);
  HRESULT LoadDictation ([in, string] LPCWSTR pszTopicName,[in] SPLOADOPTIONS Options);
  HRESULT UnloadDictation ();
  HRESULT SetDictationState ([in] SPRULESTATE NewState);
  HRESULT SetWordSequenceData ([in] const WCHAR *pText,[in] ULONG cchText,[in] const SPTEXTSELECTIONINFO *pInfo);
  HRESULT SetTextSelection ([in] const SPTEXTSELECTIONINFO *pInfo);
  HRESULT IsPronounceable ([in, string] LPCWSTR pszWord,[out] SPWORDPRONOUNCEABLE *pWordPronounceable);
  HRESULT SetGrammarState ([in] SPGRAMMARSTATE eGrammarState);
  HRESULT SaveCmd ([in] IStream *pStream,[out, optional] LPWSTR *ppszCoMemErrorText);
  HRESULT GetGrammarState ([out] SPGRAMMARSTATE *peGrammarState);
};

#if _SAPI_BLD_ >= 0x53
typedef enum SPMATCHINGMODE {
  AllWords = 0,
  Subsequence = 1,
  OrderedSubset = 3,
  SubsequenceContentRequired = 5,
  OrderedSubsetContentRequired = 7
} SPMATCHINGMODE;

typedef enum PHONETICALPHABET {
  PA_Ipa = 0,
  PA_Ups = 1,
  PA_Sapi = 2,
} PHONETICALPHABET;
#endif

#if _SAPI_BLD_ >= 0x53
[object, local, uuid (8ab10026-20cc-4b20-8c22-A49C9BA78F60), pointer_default (unique), restricted]
interface ISpGrammarBuilder2 : IUnknown {
  HRESULT AddTextSubset ([in] SPSTATEHANDLE hFromState,[in] SPSTATEHANDLE hToState,[in] LPCWSTR psz,[in] SPMATCHINGMODE eMatchMode);
  HRESULT SetPhoneticAlphabet ([in] PHONETICALPHABET phoneticALphabet);
}

cpp_quote("#define SPRP_NORMAL 0")

[object, local, uuid (4b37bc9e-9ed6-44a3-93d3-18f022b79ec3), pointer_default (unique), restricted]
interface ISpRecoGrammar2 : IUnknown {
  HRESULT GetRules ([out] SPRULE **ppCoMemRules,[out] UINT *puNumRules);
  HRESULT LoadCmdFromFile2 ([in, string] LPCWSTR pszFileName,[in] SPLOADOPTIONS Options,[in, string] LPCWSTR pszSharingUri,[in, string] LPCWSTR pszBaseUri);
  HRESULT LoadCmdFromMemory2 ([in] const SPBINARYGRAMMAR *pGrammar,[in] SPLOADOPTIONS Options,[in, string] LPCWSTR pszSharingUri,[in, string] LPCWSTR pszBaseUri);
  HRESULT SetRulePriority ([in, string] LPCWSTR pszRuleName,[in] ULONG ulRuleId,[in] int nRulePriority);
  HRESULT SetRuleWeight ([in, string] LPCWSTR pszRuleName,[in] ULONG ulRuleId,[in] float flWeight);
  HRESULT SetDictationWeight ([in] float flWeight);
  HRESULT SetGrammarLoader ([in] ISpeechResourceLoader *pLoader);
  HRESULT SetSMLSecurityManager ([in] IInternetSecurityManager *pSMLSecurityManager);
}

[object, local, uuid (B9AC5783-FCD0-4b21-B119-B4F8DA8FD2C3), pointer_default (unique), dual]
interface ISpeechResourceLoader : IDispatch {
  [id (1)] HRESULT LoadResource ([in] BSTR bstrResourceUri,[in] VARIANT_BOOL fAlwaysReload,[out] IUnknown **pStream,[out] BSTR *pbstrMIMEType,[out] VARIANT_BOOL *pfModified,[out] BSTR *pbstrRedirectUrl);
  [id (2)] HRESULT GetLocalCopy ([in] BSTR bstrResourceUri,[out] BSTR *pbstrLocalPath,[out] BSTR *pbstrMIMEType,[out] BSTR *pbstrRedirectUrl);
  [id (3)] HRESULT ReleaseLocalCopy ([in] BSTR pbstrLocalPath);
}
#endif

typedef [restricted, hidden] struct SPRECOCONTEXTSTATUS {
  SPINTERFERENCE eInterference;
  WCHAR szRequestTypeOfUI[255];
  DWORD dwReserved1;
  DWORD dwReserved2;
} SPRECOCONTEXTSTATUS;

typedef [hidden] enum SPBOOKMARKOPTIONS {
  SPBO_NONE = 0,
  SPBO_PAUSE = 0x1
#if _SAPI_BLD_ >= 0x53
  , SPBO_AHEAD = 0x2,
  SPBO_TIME_UNITS = 0x4
#endif
} SPBOOKMARKOPTIONS;

typedef [hidden] enum SPAUDIOOPTIONS {
  SPAO_NONE = 0,
  SPAO_RETAIN_AUDIO = 0x1
} SPAUDIOOPTIONS;

[object, local, uuid (F740A62F-7c15-489e-8234-940a33d9272d), pointer_default (unique), restricted]
interface ISpRecoContext : ISpEventSource {
  HRESULT GetRecognizer ([out] ISpRecognizer **ppRecognizer);
  HRESULT CreateGrammar ([in] ULONGLONG ullGrammarId,[out] ISpRecoGrammar **ppGrammar);
  HRESULT GetStatus ([out] SPRECOCONTEXTSTATUS *pStatus);
  HRESULT GetMaxAlternates ([in] ULONG *pcAlternates);
  HRESULT SetMaxAlternates ([in] ULONG cAlternates);
  HRESULT SetAudioOptions ([in] SPAUDIOOPTIONS Options,[in] const GUID *pAudioFormatId,[in] const WAVEFORMATEX *pWaveFormatEx);
  HRESULT GetAudioOptions ([in] SPAUDIOOPTIONS *pOptions,[out] GUID *pAudioFormatId,[out] WAVEFORMATEX **ppCoMemWFEX);
  HRESULT DeserializeResult ([in] const SPSERIALIZEDRESULT *pSerializedResult,[out] ISpRecoResult **ppResult);
  HRESULT Bookmark ([in] SPBOOKMARKOPTIONS Options,[in] ULONGLONG ullStreamPosition,[in] LPARAM lparamEvent);
  HRESULT SetAdaptationData ([in, string] LPCWSTR pAdaptationData,[in] const ULONG cch);
  HRESULT Pause ([in] DWORD dwReserved);
  HRESULT Resume ([in] DWORD dwReserved);
  HRESULT SetVoice ([in] ISpVoice *pVoice,[in] WINBOOL fAllowFormatChanges);
  HRESULT GetVoice ([out] ISpVoice **ppVoice);
  HRESULT SetVoicePurgeEvent ([in] ULONGLONG ullEventInterest);
  HRESULT GetVoicePurgeEvent ([out] ULONGLONG *pullEventInterest);
  HRESULT SetContextState ([in] SPCONTEXTSTATE eContextState);
  HRESULT GetContextState ([out] SPCONTEXTSTATE *peContextState);
};

#if _SAPI_BLD_ >= 0x53
typedef [hidden] enum SPGRAMMAROPTIONS {
  SPGO_SAPI = 0x1,
  SPGO_SRGS = 0x2,
  SPGO_UPS = 0x4,
  SPGO_SRGS_MS_SCRIPT = 0x8,
  SPGO_FILE = 0x10,
  SPGO_HTTP = 0x20,
  SPGO_RES = 0x40,
  SPGO_OBJECT = 0x80,
  SPGO_SRGS_W3C_SCRIPT = 0x100,
  SPGO_SRGS_STG_SCRIPT = 0x200,

  SPGO_SRGS_SCRIPT = SPGO_SRGS | SPGO_SRGS_MS_SCRIPT | SPGO_SRGS_W3C_SCRIPT | SPGO_SRGS_STG_SCRIPT,
  SPGO_DEFAULT = 0x03fb,
  SPGO_ALL = 0x03ff
} SPGRAMMAROPTIONS;

typedef [hidden] enum SPADAPTATIONSETTINGS {
  SPADS_Default = 0x0,
  SPADS_CurrentRecognizer = 0x1,
  SPADS_RecoProfile = 0x2,
  SPADS_Immediate = 0x4,
  SPADS_Reset = 0x8,
  SPADS_HighVolumeDataSource = 0x10
} SPADAPTATIONSETTINGS;

typedef [hidden] enum SPADAPTATIONRELEVANCE {
  SPAR_Unknown = 0,
  SPAR_Low = 1,
  SPAR_Medium = 2,
  SPAR_High = 3
} SPADAPTATIONRELEVANCE;
#endif

#if _SAPI_BLD_ >= 0x53
[object, local, uuid (BEAD311C-52ff-437f-9464-6b21054ca73d), pointer_default (unique), restricted]
interface ISpRecoContext2 : IUnknown {
  HRESULT SetGrammarOptions ([in] DWORD eGrammarOptions);
  HRESULT GetGrammarOptions ([out] DWORD *peGrammarOptions);
  HRESULT SetAdaptationData2 ([in] LPCWSTR pAdaptationData,[in] const ULONG cch,[in] LPCWSTR pTopicName,[in] DWORD eAdaptationSettings,[in] SPADAPTATIONRELEVANCE eRelevance);
}
#endif

[object, local, uuid (5b4fb971-B115-4de1-AD97-E482E3BF6EE4), pointer_default (unique), restricted]
interface ISpProperties : IUnknown {
  HRESULT SetPropertyNum ([in] LPCWSTR pName,[in] LONG lValue);
  HRESULT GetPropertyNum ([in] LPCWSTR pName,[out] LONG *plValue);
  HRESULT SetPropertyString ([in] LPCWSTR pName,[in] LPCWSTR pValue);
  HRESULT GetPropertyString ([in] LPCWSTR pName,[out, string] LPWSTR *ppCoMemValue);
};

const ULONG SP_MAX_LANGIDS = 20;

typedef [restricted, hidden] struct SPRECOGNIZERSTATUS {
  SPAUDIOSTATUS AudioStatus;
  ULONGLONG ullRecognitionStreamPos;
  ULONG ulStreamNumber;
  ULONG ulNumActive;
  CLSID clsidEngine;
  ULONG cLangIDs;
  LANGID aLangID[SP_MAX_LANGIDS];
  ULONGLONG ullRecognitionStreamTime;
} SPRECOGNIZERSTATUS;

typedef [hidden] enum SPWAVEFORMATTYPE {
  SPWF_INPUT,
  SPWF_SRENGINE
} SPSTREAMFORMATTYPE;

typedef [hidden] enum SPRECOSTATE {
  SPRST_INACTIVE,
  SPRST_ACTIVE,
  SPRST_ACTIVE_ALWAYS,
  SPRST_INACTIVE_WITH_PURGE,
  SPRST_NUM_STATES
} SPRECOSTATE;

#if _SAPI_BLD_ >= 0x54
typedef enum SPCATEGORYTYPE {
  SPCT_COMMAND,
  SPCT_DICTATION,
  SPCT_SLEEP,
  SPCT_SUB_COMMAND,
  SPCT_SUB_DICTATION
} SPCATEGORYTYPE;
#endif

[object, local, uuid (C2B5F241-DAA0-4507-9e16-5a1eaa2b7a5c), pointer_default (unique), restricted]
interface ISpRecognizer : ISpProperties {
  HRESULT SetRecognizer ([in] ISpObjectToken *pRecognizer);
  HRESULT GetRecognizer ([out] ISpObjectToken **ppRecognizer);
  HRESULT SetInput ([in] IUnknown *pUnkInput,[in] WINBOOL fAllowFormatChanges);
  HRESULT GetInputObjectToken ([out] ISpObjectToken **ppToken);
  HRESULT GetInputStream ([out] ISpStreamFormat **ppStream);
  HRESULT CreateRecoContext ([out] ISpRecoContext **ppNewCtxt);
  HRESULT GetRecoProfile ([out] ISpObjectToken **ppToken);
  HRESULT SetRecoProfile ([in] ISpObjectToken *pToken);
  HRESULT IsSharedInstance (void);
  HRESULT GetRecoState ([out] SPRECOSTATE *pState);
  HRESULT SetRecoState ([in] SPRECOSTATE NewState);
  HRESULT GetStatus ([out] SPRECOGNIZERSTATUS *pStatus);
  HRESULT GetFormat ([in] SPSTREAMFORMATTYPE WaveFormatType,[out] GUID *pFormatId,[out] WAVEFORMATEX **ppCoMemWFEX);
  [local] HRESULT IsUISupported ([in] LPCWSTR pszTypeOfUI,[in] void *pvExtraData,[in] ULONG cbExtraData,[out] WINBOOL *pfSupported);
  [local] HRESULT DisplayUI ([in] HWND hwndParent,[in] LPCWSTR pszTitle,[in] LPCWSTR pszTypeOfUI,[in] void *pvExtraData,[in] ULONG cbExtraData);
  HRESULT EmulateRecognition ([in] ISpPhrase *pPhrase);
};

#if _SAPI_BLD_ >= 0x53
[object, uuid (21b501a0-0ec7-46c9-92c3-A2BC784C54B9), pointer_default (unique), restricted]
interface ISpSerializeState : IUnknown {
  HRESULT GetSerializedState ([out] BYTE **ppbData,[out] ULONG *pulSize,[in] DWORD dwReserved);
  HRESULT SetSerializedState ([in] BYTE *pbData,[in] ULONG ulSize,[in] DWORD dwReserved);
};

[object, local, uuid (8fc6d974-C81E-4098-93c5-0147f61ed4d3), pointer_default (unique), restricted]
interface ISpRecognizer2 : IUnknown {
  HRESULT EmulateRecognitionEx ([in] ISpPhrase *pPhrase,[in] DWORD dwCompareFlags);
  HRESULT SetTrainingState ([in] WINBOOL fDoingTraining,[in] WINBOOL fAdaptFromTrainingData);
  HRESULT ResetAcousticModelAdaptation ();
}

#if _SAPI_BLD_ >= 0x54
[object, local, uuid (DA0CD0F9-14a2-4f09-8c2a-85cc48979345), pointer_default (unique), restricted]
interface ISpRecoCategory : IUnknown {
  HRESULT GetType ([out] SPCATEGORYTYPE *peCategoryType);
}

[object, local, uuid (DF1B943C-5838-4aa2-8706-D7CD5B333499), pointer_default (unique), restricted]
interface ISpRecognizer3 : IUnknown {
  HRESULT GetCategory ([in] SPCATEGORYTYPE categoryType,[out] ISpRecoCategory **ppCategory);
  HRESULT SetActiveCategory ([in] ISpRecoCategory *pCategory);
  HRESULT GetActiveCategory ([out] ISpRecoCategory **ppCategory);
}
#endif

typedef [restricted, hidden] struct SPNORMALIZATIONLIST {
  ULONG ulSize;
  WCHAR **ppszzNormalizedList;
} SPNORMALIZATIONLIST;

[object, local, uuid (C360CE4B-76d1-4214-AD68-52657d5083da), pointer_default (unique), restricted]
interface ISpEnginePronunciation : IUnknown {
  HRESULT Normalize ([in, string] LPCWSTR pszWord,[in, string] LPCWSTR pszLeftContext,[in, string] LPCWSTR pszRightContext,[in] LANGID LangID,[out] SPNORMALIZATIONLIST *pNormalizationList);
  HRESULT GetPronunciations ([in, string] LPCWSTR pszWord,[in, string] LPCWSTR pszLeftContext,[in, string] LPCWSTR pszRightContext,[in] LANGID LangID,[in, out] SPWORDPRONUNCIATIONLIST *pEnginePronunciationList);
}

typedef [restricted, hidden] struct SPDISPLAYTOKEN {
  const WCHAR *pszLexical;
  const WCHAR *pszDisplay;
  BYTE bDisplayAttributes;
} SPDISPLAYTOKEN;

typedef [restricted, hidden] struct SPDISPLAYPHRASE {
  ULONG ulNumTokens;
  SPDISPLAYTOKEN *pTokens;
} SPDISPLAYPHRASE;

[object, local, uuid (C8D7C7E2-0dde-44b7-AFE3-B0C991FBEB5E), pointer_default (unique)]
interface ISpDisplayAlternates : IUnknown {
  HRESULT GetDisplayAlternates ([in] const SPDISPLAYPHRASE *pPhrase,[in] ULONG cRequestCount,[out] SPDISPLAYPHRASE **ppCoMemPhrases,[out] ULONG *pcPhrasesReturned);
  HRESULT SetFullStopTrailSpace ([in] ULONG ulTrailSpace);
}
#endif

[uuid (C866CA3A-32f7-11d2-9602-00c04f8ee628), version (5.4)]
library SpeechLib {
  importlib ("stdole32.tlb");
  importlib ("stdole2.tlb");

interface ISpeechDataKey;
interface ISpeechObjectToken;
interface ISpeechObjectTokens;
interface ISpeechObjectTokenCategory;
interface ISpeechAudioBufferInfo;
interface ISpeechAudioStatus;
interface ISpeechAudioFormat;
interface ISpeechWaveFormatEx;
interface ISpeechBaseStream;
interface ISpeechFileStream;
interface ISpeechMemoryStream;
interface ISpeechCustomStream;
interface ISpeechAudio;
interface ISpeechMMSysAudio;
interface ISpeechVoice;
interface ISpeechVoiceStatus;
dispinterface _ISpeechVoiceEvents;
interface ISpeechRecognizer;
interface ISpeechRecognizerStatus;
interface ISpeechRecoContext;
interface ISpeechRecoGrammar;
dispinterface _ISpeechRecoContextEvents;
interface ISpeechGrammarRule;
interface ISpeechGrammarRules;
interface ISpeechGrammarRuleState;
interface ISpeechGrammarRuleStateTransition;
interface ISpeechGrammarRuleStateTransitions;
interface ISpeechTextSelectionInformation;
interface ISpeechRecoResult;
#if _SAPI_BLD_ >= 0x53
interface ISpeechRecoResult2;
#endif
interface ISpeechRecoResultTimes;
interface ISpeechPhraseAlternate;
interface ISpeechPhraseAlternates;
interface ISpeechPhraseInfo;
interface ISpeechPhraseElement;
interface ISpeechPhraseElements;
interface ISpeechPhraseReplacement;
interface ISpeechPhraseReplacements;
interface ISpeechPhraseProperty;
interface ISpeechPhraseProperties;
interface ISpeechPhraseRule;
interface ISpeechPhraseRules;
interface ISpeechLexicon;
interface ISpeechLexiconWords;
interface ISpeechLexiconWord;
interface ISpeechLexiconPronunciations;
interface ISpeechLexiconPronunciation;

typedef long SpeechLanguageId;
cpp_quote("#define __SpeechStringConstants_MODULE_DEFINED__")
[uuid (E58442E4-0c80-402c-9559-867337a39765)] module SpeechStringConstants {
  const BSTR SpeechRegistryUserRoot = L"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech";
  const BSTR SpeechRegistryLocalMachineRoot = L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech";
  const BSTR SpeechCategoryAudioOut = L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioOutput";
  const BSTR SpeechCategoryAudioIn = L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioInput";
  const BSTR SpeechCategoryVoices = L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices";
  const BSTR SpeechCategoryRecognizers = L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Recognizers";
  const BSTR SpeechCategoryAppLexicons = L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AppLexicons";
  const BSTR SpeechCategoryPhoneConverters = L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\PhoneConverters";
  const BSTR SpeechCategoryRecoProfiles = L"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech\\RecoProfiles";
  const BSTR SpeechTokenIdUserLexicon = L"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech\\CurrentUserLexicon";
  const BSTR SpeechTokenValueCLSID = L"CLSID";
  const BSTR SpeechTokenKeyFiles = L"Files";
  const BSTR SpeechTokenKeyUI = L"UI";
  const BSTR SpeechTokenKeyAttributes = L"Attributes";
  const BSTR SpeechVoiceCategoryTTSRate = L"DefaultTTSRate";
  const BSTR SpeechPropertyResourceUsage = L"ResourceUsage";
  const BSTR SpeechPropertyHighConfidenceThreshold = L"HighConfidenceThreshold";
  const BSTR SpeechPropertyNormalConfidenceThreshold = L"NormalConfidenceThreshold";
  const BSTR SpeechPropertyLowConfidenceThreshold = L"LowConfidenceThreshold";
  const BSTR SpeechPropertyResponseSpeed = L"ResponseSpeed";
  const BSTR SpeechPropertyComplexResponseSpeed = L"ComplexResponseSpeed";
  const BSTR SpeechPropertyAdaptationOn = L"AdaptationOn";
  const BSTR SpeechDictationTopicSpelling = L"Spelling";
  const BSTR SpeechGrammarTagWildcard = L"...";
  const BSTR SpeechGrammarTagDictation = L"*";
  const BSTR SpeechGrammarTagUnlimitedDictation = L"*+";
  const BSTR SpeechEngineProperties = L"EngineProperties";
  const BSTR SpeechAddRemoveWord = L"AddRemoveWord";
  const BSTR SpeechUserTraining = L"UserTraining";
  const BSTR SpeechMicTraining = L"MicTraining";
  const BSTR SpeechRecoProfileProperties = L"RecoProfileProperties";
  const BSTR SpeechAudioProperties = L"AudioProperties";
  const BSTR SpeechAudioVolume = L"AudioVolume";
  const BSTR SpeechVoiceSkipTypeSentence = L"Sentence";
  const BSTR SpeechAudioFormatGUIDWave = L"{C31ADBAE-527F-4ff5-A230-F62BB61FF70C}";
  const BSTR SpeechAudioFormatGUIDText = L"{7CEEF9F9-3D13-11d2-9EE7-00C04F797396}";
};
[uuid (F3E092B2-6bdc-410f-BCB2-4c5ed4424180)] module SpeechConstants {
  const float Speech_Default_Weight = DEFAULT_WEIGHT;
  const LONG Speech_Max_Word_Length = SP_MAX_WORD_LENGTH;
  const LONG Speech_Max_Pron_Length = SP_MAX_PRON_LENGTH;
  const LONG Speech_StreamPos_Asap = SP_STREAMPOS_ASAP;
  const LONG Speech_StreamPos_RealTime = SP_STREAMPOS_REALTIME;
  const LONG SpeechAllElements = SPPR_ALL_ELEMENTS;
};

typedef [hidden] enum DISPID_SpeechDataKey {
  DISPID_SDKSetBinaryValue = 1,
  DISPID_SDKGetBinaryValue,
  DISPID_SDKSetStringValue,
  DISPID_SDKGetStringValue,
  DISPID_SDKSetLongValue,
  DISPID_SDKGetlongValue,
  DISPID_SDKOpenKey,
  DISPID_SDKCreateKey,
  DISPID_SDKDeleteKey,
  DISPID_SDKDeleteValue,
  DISPID_SDKEnumKeys,
  DISPID_SDKEnumValues
} DISPID_SpeechDataKey;

typedef [hidden] enum DISPID_SpeechObjectToken {
  DISPID_SOTId = 1,
  DISPID_SOTDataKey,
  DISPID_SOTCategory,
  DISPID_SOTGetDescription,
  DISPID_SOTSetId,
  DISPID_SOTGetAttribute,
  DISPID_SOTCreateInstance,
  DISPID_SOTRemove,
  DISPID_SOTGetStorageFileName,
  DISPID_SOTRemoveStorageFileName,
  DISPID_SOTIsUISupported,
  DISPID_SOTDisplayUI,
  DISPID_SOTMatchesAttributes
} DISPID_SpeechObjectToken;

typedef enum SpeechDataKeyLocation {
  SDKLDefaultLocation = SPDKL_DefaultLocation,
  SDKLCurrentUser = SPDKL_CurrentUser,
  SDKLLocalMachine = SPDKL_LocalMachine,
  SDKLCurrentConfig = SPDKL_CurrentConfig
} SpeechDataKeyLocation;

#define CLSCTXALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)

typedef enum SpeechTokenContext {
  STCInprocServer = CLSCTX_INPROC_SERVER,
  STCInprocHandler = CLSCTX_INPROC_HANDLER,
  STCLocalServer = CLSCTX_LOCAL_SERVER,
  STCRemoteServer = CLSCTX_REMOTE_SERVER,
  STCAll = CLSCTXALL
} SpeechTokenContext;

typedef enum SpeechTokenShellFolder {
  STSF_AppData = 0x001a,
  STSF_LocalAppData = 0x001c,
  STSF_CommonAppData = 0x0023,
  STSF_FlagCreate = 0x8000
} SpeechTokenShellFolder;

typedef [hidden] enum DISPID_SpeechObjectTokens {
  DISPID_SOTsCount = 1,
  DISPID_SOTsItem = DISPID_VALUE,
  DISPID_SOTs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechObjectTokens;

typedef [hidden] enum DISPID_SpeechObjectTokenCategory {
  DISPID_SOTCId = 1,
  DISPID_SOTCDefault,
  DISPID_SOTCSetId,
  DISPID_SOTCGetDataKey,
  DISPID_SOTCEnumerateTokens,
} DISPID_SpeechObjectTokenCategory;

[object, uuid (CE17C09B-4efa-44d5-A4C9-59d9585ab0cd), dual, pointer_default (unique)]
interface ISpeechDataKey : IDispatch {
  [id (DISPID_SDKSetBinaryValue)] HRESULT SetBinaryValue ([in]const BSTR ValueName,[in]VARIANT Value);
  [id (DISPID_SDKGetBinaryValue)] HRESULT GetBinaryValue ([in]const BSTR ValueName,[out, retval]VARIANT *Value);
  [id (DISPID_SDKSetStringValue)] HRESULT SetStringValue ([in]const BSTR ValueName,[in]const BSTR Value);
  [id (DISPID_SDKGetStringValue)] HRESULT GetStringValue ([in]const BSTR ValueName,[out, retval]BSTR *Value);
  [id (DISPID_SDKSetLongValue)] HRESULT SetLongValue ([in]const BSTR ValueName,[in]long Value);
  [id (DISPID_SDKGetlongValue)] HRESULT GetLongValue ([in]const BSTR ValueName,[out, retval]long *Value);
  [id (DISPID_SDKOpenKey)] HRESULT OpenKey ([in]const BSTR SubKeyName,[out, retval]ISpeechDataKey **SubKey);
  [id (DISPID_SDKCreateKey)] HRESULT CreateKey ([in]const BSTR SubKeyName,[out, retval]ISpeechDataKey **SubKey);
  [id (DISPID_SDKDeleteKey)] HRESULT DeleteKey ([in]const BSTR SubKeyName);
  [id (DISPID_SDKDeleteValue)] HRESULT DeleteValue ([in]const BSTR ValueName);
  [id (DISPID_SDKEnumKeys)] HRESULT EnumKeys ([in]long Index,[out, retval]BSTR *SubKeyName);
  [id (DISPID_SDKEnumValues)] HRESULT EnumValues ([in]long Index,[out, retval]BSTR *ValueName);
};

[object, uuid (C74A3ADC-B727-4500-A84A-B526721C8B8C), dual, pointer_default (unique)]
interface ISpeechObjectToken : IDispatch {
  [propget, id (DISPID_SOTId)] HRESULT Id ([out, retval]BSTR *ObjectId);
  [propget, id (DISPID_SOTDataKey), hidden] HRESULT DataKey ([out, retval]ISpeechDataKey **DataKey);
  [propget, id (DISPID_SOTCategory)] HRESULT Category ([out, retval]ISpeechObjectTokenCategory **Category);
  [id (DISPID_SOTGetDescription)] HRESULT GetDescription ([in, defaultvalue (0)]long Locale,[out, retval]BSTR *Description);
  [hidden, id (DISPID_SOTSetId)] HRESULT SetId ([in] BSTR Id,[in, defaultvalue ("")] BSTR CategoryID,[in, defaultvalue (0)]VARIANT_BOOL CreateIfNotExist);
  [id (DISPID_SOTGetAttribute)] HRESULT GetAttribute ([in] BSTR AttributeName,[out, retval]BSTR *AttributeValue);
  [id (DISPID_SOTCreateInstance)] HRESULT CreateInstance ([in, defaultvalue (NULL)] IUnknown *pUnkOuter,[in, defaultvalue (STCAll)] SpeechTokenContext ClsContext,[out, retval]IUnknown **Object);
  [hidden, id (DISPID_SOTRemove)] HRESULT Remove ([in]BSTR ObjectStorageCLSID);
  [hidden, id (DISPID_SOTGetStorageFileName)] HRESULT GetStorageFileName ([in]BSTR ObjectStorageCLSID,[in]BSTR KeyName,[in]BSTR FileName,[in]SpeechTokenShellFolder Folder,[out, retval]BSTR *FilePath);
  [hidden, id (DISPID_SOTRemoveStorageFileName)] HRESULT RemoveStorageFileName ([in]BSTR ObjectStorageCLSID,[in]BSTR KeyName,[in]VARIANT_BOOL DeleteFile);
  [hidden, id (DISPID_SOTIsUISupported)] HRESULT IsUISupported ([in]const BSTR TypeOfUI,[in, defaultvalue (NULL)]const VARIANT *ExtraData,[in, defaultvalue (NULL)]IUnknown *Object,[out, retval] VARIANT_BOOL *Supported);
  [hidden, id (DISPID_SOTDisplayUI)] HRESULT DisplayUI ([in]long hWnd,[in]BSTR Title,[in]const BSTR TypeOfUI,[in, defaultvalue (NULL)]const VARIANT *ExtraData,[in, defaultvalue (NULL)]IUnknown *Object);
  [id (DISPID_SOTMatchesAttributes)] HRESULT MatchesAttributes ([in]BSTR Attributes,[out, retval] VARIANT_BOOL *Matches);
};

[object, uuid (9285b776-2e7b-4bc0-B53E-580eb6fa967f), dual, pointer_default (unique)]
interface ISpeechObjectTokens : IDispatch {
  [propget, id (DISPID_SOTsCount)] HRESULT Count ([out, retval] long *Count);
  [id (DISPID_VALUE)] HRESULT Item ([in] long Index,[out, retval]ISpeechObjectToken **Token);
  [propget, restricted, id (DISPID_NEWENUM)] HRESULT _NewEnum ([out, retval] IUnknown **ppEnumVARIANT);
};

[object, uuid (CA7EAC50-2d01-4145-86d4-5ae7d70f4469), dual, pointer_default (unique)]
interface ISpeechObjectTokenCategory : IDispatch {
  [propget, id (DISPID_SOTCId)] HRESULT Id ([out, retval] BSTR *Id);
  [propput, id (DISPID_SOTCDefault)] HRESULT Default ([in] const BSTR TokenId);
  [propget, id (DISPID_SOTCDefault)] HRESULT Default ([out, retval] BSTR *TokenId);
  [id (DISPID_SOTCSetId)] HRESULT SetId ([in] const BSTR Id,[in, defaultvalue (0)]VARIANT_BOOL CreateIfNotExist);
  [hidden, id (DISPID_SOTCGetDataKey)] HRESULT GetDataKey ([in, defaultvalue (SDKLDefaultLocation)]SpeechDataKeyLocation Location,[out, retval]ISpeechDataKey **DataKey);
  [id (DISPID_SOTCEnumerateTokens)] HRESULT EnumerateTokens ([in, defaultvalue ("")]BSTR RequiredAttributes,[in, defaultvalue ("")]BSTR OptionalAttributes,[out, retval]ISpeechObjectTokens **Tokens);
};

typedef enum SpeechAudioFormatType {
  SAFTDefault = -1,
  SAFTNoAssignedFormat = 0,
  SAFTText,
  SAFTNonStandardFormat,
  SAFTExtendedAudioFormat,
  SAFT8kHz8BitMono,
  SAFT8kHz8BitStereo,
  SAFT8kHz16BitMono,
  SAFT8kHz16BitStereo,
  SAFT11kHz8BitMono,
  SAFT11kHz8BitStereo,
  SAFT11kHz16BitMono,
  SAFT11kHz16BitStereo,
  SAFT12kHz8BitMono,
  SAFT12kHz8BitStereo,
  SAFT12kHz16BitMono,
  SAFT12kHz16BitStereo,
  SAFT16kHz8BitMono,
  SAFT16kHz8BitStereo,
  SAFT16kHz16BitMono,
  SAFT16kHz16BitStereo,
  SAFT22kHz8BitMono,
  SAFT22kHz8BitStereo,
  SAFT22kHz16BitMono,
  SAFT22kHz16BitStereo,
  SAFT24kHz8BitMono,
  SAFT24kHz8BitStereo,
  SAFT24kHz16BitMono,
  SAFT24kHz16BitStereo,
  SAFT32kHz8BitMono,
  SAFT32kHz8BitStereo,
  SAFT32kHz16BitMono,
  SAFT32kHz16BitStereo,
  SAFT44kHz8BitMono,
  SAFT44kHz8BitStereo,
  SAFT44kHz16BitMono,
  SAFT44kHz16BitStereo,
  SAFT48kHz8BitMono,
  SAFT48kHz8BitStereo,
  SAFT48kHz16BitMono,
  SAFT48kHz16BitStereo,
  SAFTTrueSpeech_8kHz1BitMono,
  SAFTCCITT_ALaw_8kHzMono,
  SAFTCCITT_ALaw_8kHzStereo,
  SAFTCCITT_ALaw_11kHzMono,
  SAFTCCITT_ALaw_11kHzStereo,
  SAFTCCITT_ALaw_22kHzMono,
  SAFTCCITT_ALaw_22kHzStereo,
  SAFTCCITT_ALaw_44kHzMono,
  SAFTCCITT_ALaw_44kHzStereo,

  SAFTCCITT_uLaw_8kHzMono,
  SAFTCCITT_uLaw_8kHzStereo,
  SAFTCCITT_uLaw_11kHzMono,
  SAFTCCITT_uLaw_11kHzStereo,
  SAFTCCITT_uLaw_22kHzMono,
  SAFTCCITT_uLaw_22kHzStereo,
  SAFTCCITT_uLaw_44kHzMono,
  SAFTCCITT_uLaw_44kHzStereo,

  SAFTADPCM_8kHzMono,
  SAFTADPCM_8kHzStereo,
  SAFTADPCM_11kHzMono,
  SAFTADPCM_11kHzStereo,
  SAFTADPCM_22kHzMono,
  SAFTADPCM_22kHzStereo,
  SAFTADPCM_44kHzMono,
  SAFTADPCM_44kHzStereo,
  SAFTGSM610_8kHzMono,
  SAFTGSM610_11kHzMono,
  SAFTGSM610_22kHzMono,
  SAFTGSM610_44kHzMono,
} SpeechAudioFormatType;

typedef [hidden] enum DISPID_SpeechAudioFormat {
  DISPID_SAFType = 1,
  DISPID_SAFGuid,
  DISPID_SAFGetWaveFormatEx,
  DISPID_SAFSetWaveFormatEx
} DISPID_SpeechAudioFormat;

typedef [hidden] enum DISPID_SpeechBaseStream {
  DISPID_SBSFormat = 1,
  DISPID_SBSRead,
  DISPID_SBSWrite,
  DISPID_SBSSeek
} DISPID_SpeechBaseStream;

typedef enum SpeechStreamSeekPositionType {
  SSSPTRelativeToStart = STREAM_SEEK_SET,
  SSSPTRelativeToCurrentPosition = STREAM_SEEK_CUR,
  SSSPTRelativeToEnd = STREAM_SEEK_END
} SpeechStreamSeekPositionType;

typedef [hidden] enum DISPID_SpeechAudio {
  DISPID_SAStatus = 200,
  DISPID_SABufferInfo,
  DISPID_SADefaultFormat,
  DISPID_SAVolume,
  DISPID_SABufferNotifySize,
  DISPID_SAEventHandle,
  DISPID_SASetState
} DISPID_SpeechAudio;

typedef enum SpeechAudioState {
  SASClosed = SPAS_CLOSED,
  SASStop = SPAS_STOP,
  SASPause = SPAS_PAUSE,
  SASRun = SPAS_RUN
} SpeechAudioState;

typedef [hidden] enum DISPID_SpeechMMSysAudio {
  DISPID_SMSADeviceId = 300,
  DISPID_SMSALineId,
  DISPID_SMSAMMHandle
} DISPID_SpeechMMSysAudio;

typedef [hidden] enum DISPID_SpeechFileStream {
  DISPID_SFSOpen = 100,
  DISPID_SFSClose
} DISPID_SpeechFileStream;

typedef enum SpeechStreamFileMode {
  SSFMOpenForRead = SPFM_OPEN_READONLY,
  SSFMOpenReadWrite = SPFM_OPEN_READWRITE,
  SSFMCreate = SPFM_CREATE,
  SSFMCreateForWrite = SPFM_CREATE_ALWAYS,
} SpeechStreamFileMode;

typedef [hidden] enum DISPID_SpeechCustomStream {
  DISPID_SCSBaseStream = 100
} DISPID_SpeechCustomStream;

typedef [hidden] enum DISPID_SpeechMemoryStream {
  DISPID_SMSSetData = 100,
  DISPID_SMSGetData
} DISPID_SpeechMemoryStream;

typedef [hidden] enum DISPID_SpeechAudioStatus {
  DISPID_SASFreeBufferSpace = 1,
  DISPID_SASNonBlockingIO,
  DISPID_SASState,
  DISPID_SASCurrentSeekPosition,
  DISPID_SASCurrentDevicePosition
} DISPID_SpeechAudioStatus;

typedef [hidden] enum DISPID_SpeechAudioBufferInfo {
  DISPID_SABIMinNotification = 1,
  DISPID_SABIBufferSize,
  DISPID_SABIEventBias
} DISPID_SpeechAudioBufferInfo;

typedef [hidden] enum DISPID_SpeechWaveFormatEx {
  DISPID_SWFEFormatTag = 1,
  DISPID_SWFEChannels,
  DISPID_SWFESamplesPerSec,
  DISPID_SWFEAvgBytesPerSec,
  DISPID_SWFEBlockAlign,
  DISPID_SWFEBitsPerSample,
  DISPID_SWFEExtraData
} DISPID_SpeechWaveFormatEx;

typedef [hidden] enum DISPID_SpeechVoice {
  DISPID_SVStatus = 1,
  DISPID_SVVoice,
  DISPID_SVAudioOutput,
  DISPID_SVAudioOutputStream,
  DISPID_SVRate,
  DISPID_SVVolume,
  DISPID_SVAllowAudioOuputFormatChangesOnNextSet,
  DISPID_SVEventInterests,
  DISPID_SVPriority,
  DISPID_SVAlertBoundary,
  DISPID_SVSyncronousSpeakTimeout,
  DISPID_SVSpeak,
  DISPID_SVSpeakStream,
  DISPID_SVPause,
  DISPID_SVResume,
  DISPID_SVSkip,
  DISPID_SVGetVoices,
  DISPID_SVGetAudioOutputs,
  DISPID_SVWaitUntilDone,
  DISPID_SVSpeakCompleteEvent,
  DISPID_SVIsUISupported,
  DISPID_SVDisplayUI
} DISPID_SpeechVoice;

typedef enum SpeechVoicePriority {
  SVPNormal = SPVPRI_NORMAL,
  SVPAlert = SPVPRI_ALERT,
  SVPOver = SPVPRI_OVER
} SpeechVoicePriority;

typedef enum SpeechVoiceSpeakFlags {
  SVSFDefault = SPF_DEFAULT,
  SVSFlagsAsync = SPF_ASYNC,
  SVSFPurgeBeforeSpeak = SPF_PURGEBEFORESPEAK,
  SVSFIsFilename = SPF_IS_FILENAME,
  SVSFIsXML = SPF_IS_XML,
  SVSFIsNotXML = SPF_IS_NOT_XML,
  SVSFPersistXML = SPF_PERSIST_XML,
  SVSFNLPSpeakPunc = SPF_NLP_SPEAK_PUNC,
#if _SAPI_BLD_ >= 0x53
  SVSFParseSapi = SPF_PARSE_SAPI,
  SVSFParseSsml = SPF_PARSE_SSML,
  SVSFParseAutodetect = SPF_PARSE_AUTODETECT,
#endif
  SVSFNLPMask = SPF_NLP_MASK,
#if _SAPI_BLD_ >= 0x53
  SVSFParseMask = SPF_PARSE_MASK,
#endif
  SVSFVoiceMask = SPF_VOICE_MASK,
  SVSFUnusedFlags = SPF_UNUSED_FLAGS,
} SpeechVoiceSpeakFlags;

typedef enum SpeechVoiceEvents {
  SVEStartInputStream = 0x2,
  SVEEndInputStream = 0x4,
  SVEVoiceChange = 0x8,
  SVEBookmark = 0x10,
  SVEWordBoundary = 0x20,
  SVEPhoneme = 0x40,
  SVESentenceBoundary = 0x80,
  SVEViseme = 0x100,
  SVEAudioLevel = 0x200,
  SVEPrivate = 0x8000,
  SVEAllEvents = 0x83fe
} SpeechVoiceEvents;

typedef [hidden] enum DISPID_SpeechVoiceStatus {
  DISPID_SVSCurrentStreamNumber = 1,
  DISPID_SVSLastStreamNumberQueued,
  DISPID_SVSLastResult,
  DISPID_SVSRunningState,
  DISPID_SVSInputWordPosition,
  DISPID_SVSInputWordLength,
  DISPID_SVSInputSentencePosition,
  DISPID_SVSInputSentenceLength,
  DISPID_SVSLastBookmark,
  DISPID_SVSLastBookmarkId,
  DISPID_SVSPhonemeId,
  DISPID_SVSVisemeId
} DISPID_SpeechVoiceStatus;

typedef enum SpeechRunState {
  SRSEDone = SPRS_DONE,
  SRSEIsSpeaking = SPRS_IS_SPEAKING
} SpeechRunState;

[object, uuid (E6E9C590-3e18-40e3-8299-061f98bde7c7), dual, pointer_default (unique)]
interface ISpeechAudioFormat : IDispatch {
  [propget, id (DISPID_SAFType)] HRESULT Type ([out, retval]SpeechAudioFormatType *AudioFormat);
  [propput, id (DISPID_SAFType)] HRESULT Type ([in]SpeechAudioFormatType AudioFormat);
  [propget, hidden, id (DISPID_SAFGuid)] HRESULT Guid ([out, retval]BSTR *Guid);
  [propput, hidden, id (DISPID_SAFGuid)] HRESULT Guid ([in]BSTR Guid);
  [hidden, id (DISPID_SAFGetWaveFormatEx)] HRESULT GetWaveFormatEx ([out, retval]ISpeechWaveFormatEx **SpeechWaveFormatEx);
  [hidden, id (DISPID_SAFSetWaveFormatEx)] HRESULT SetWaveFormatEx ([in]ISpeechWaveFormatEx *SpeechWaveFormatEx);
}

[object, uuid (6450336f-7d49-4ced-8097-49d6dee37294), dual, pointer_default (unique)]
interface ISpeechBaseStream : IDispatch {
  [propget, id (DISPID_SBSFormat)] HRESULT Format ([out, retval]ISpeechAudioFormat **AudioFormat);
  [propputref, id (DISPID_SBSFormat)] HRESULT Format ([in]ISpeechAudioFormat *AudioFormat);
  [id (DISPID_SBSRead)] HRESULT Read ([out]VARIANT *Buffer,[in]long NumberOfBytes,[out, retval]long *BytesRead);
  [id (DISPID_SBSWrite)] HRESULT Write ([in]VARIANT Buffer,[out, retval]long *BytesWritten);
  [id (DISPID_SBSSeek)] HRESULT Seek ([in]VARIANT Position,[in, defaultvalue (SSSPTRelativeToStart)]SpeechStreamSeekPositionType Origin,[out, retval]VARIANT *NewPosition);
};

[object, uuid (CFF8E175-019e-11d3-A08E-00c04f8ef9b5), dual, pointer_default (unique)]
interface ISpeechAudio : ISpeechBaseStream {
  [propget, id (DISPID_SAStatus)] HRESULT Status ([out, retval]ISpeechAudioStatus **Status);
  [propget, id (DISPID_SABufferInfo)] HRESULT BufferInfo ([out, retval]ISpeechAudioBufferInfo **BufferInfo);
  [propget, id (DISPID_SADefaultFormat)] HRESULT DefaultFormat ([out, retval]ISpeechAudioFormat **StreamFormat);
  [propget, id (DISPID_SAVolume)] HRESULT Volume ([out, retval]long *Volume);
  [propput, id (DISPID_SAVolume)] HRESULT Volume ([in]long Volume);
  [propget, id (DISPID_SABufferNotifySize)] HRESULT BufferNotifySize ([out, retval]long *BufferNotifySize);
  [propput, id (DISPID_SABufferNotifySize)] HRESULT BufferNotifySize ([in]long BufferNotifySize);
  [propget, hidden, id (DISPID_SAEventHandle)] HRESULT EventHandle ([out, retval]long *EventHandle);
  [id (DISPID_SASetState), hidden] HRESULT SetState ([in] SpeechAudioState State);
};

[object, uuid (3c76af6d-1fd7-4831-81d1-3b71d5a13c44), dual, pointer_default (unique)]
interface ISpeechMMSysAudio : ISpeechAudio {
  [propget, id (DISPID_SMSADeviceId)] HRESULT DeviceId ([out, retval] long *DeviceId);
  [propput, id (DISPID_SMSADeviceId)] HRESULT DeviceId ([in] long DeviceId);
  [propget, id (DISPID_SMSALineId)] HRESULT LineId ([out, retval] long *LineId);
  [propput, id (DISPID_SMSALineId)] HRESULT LineId ([in] long LineId);
  [propget, hidden, id (DISPID_SMSAMMHandle)] HRESULT MMHandle ([out, retval] long *Handle);
};

[object, uuid (AF67F125-AB39-4e93-B4A2-CC2E66E182A7), dual, pointer_default (unique)]
interface ISpeechFileStream : ISpeechBaseStream {
  [id (DISPID_SFSOpen)] HRESULT Open ([in] BSTR FileName,[in, defaultvalue (SSFMOpenForRead)] SpeechStreamFileMode FileMode,[in, defaultvalue (0)]VARIANT_BOOL DoEvents);
  [id (DISPID_SFSClose)] HRESULT Close (void);
};

[object, uuid (1a9e9f4f-104f-4db8-A115-EFD7FD0C97AE), dual, pointer_default (unique)]
interface ISpeechCustomStream : ISpeechBaseStream {
  [propget, id (DISPID_SCSBaseStream)] HRESULT BaseStream ([out, retval] IUnknown **ppUnkStream);
  [propputref, id (DISPID_SCSBaseStream)] HRESULT BaseStream ([in] IUnknown *pUnkStream);
};

[object, uuid (EEB14B68-808b-4abe-A5EA-B51DA7588008), dual, pointer_default (unique)]
interface ISpeechMemoryStream : ISpeechBaseStream {
  [id (DISPID_SMSSetData)] HRESULT SetData ([in] VARIANT Data);
  [id (DISPID_SMSGetData)] HRESULT GetData ([out, retval] VARIANT *pData);
};

[object, uuid (C62D9C91-7458-47f6-862d-1ef86fb0b278), dual, pointer_default (unique)]
interface ISpeechAudioStatus : IDispatch {
  [propget, id (DISPID_SASFreeBufferSpace)] HRESULT FreeBufferSpace ([out, retval]long *FreeBufferSpace);
  [propget, id (DISPID_SASNonBlockingIO)] HRESULT NonBlockingIO ([out, retval]long *NonBlockingIO);
  [propget, id (DISPID_SASState)] HRESULT State ([out, retval] SpeechAudioState *State);
  [propget, id (DISPID_SASCurrentSeekPosition)] HRESULT CurrentSeekPosition ([out, retval]VARIANT *CurrentSeekPosition);
  [propget, id (DISPID_SASCurrentDevicePosition)] HRESULT CurrentDevicePosition ([out, retval]VARIANT *CurrentDevicePosition);
};

[object, uuid (11b103d8-1142-4edf-A093-82fb3915f8cc), dual, pointer_default (unique)]
interface ISpeechAudioBufferInfo : IDispatch {
  [propget, id (DISPID_SABIMinNotification)] HRESULT MinNotification ([out, retval]long *MinNotification);
  [propput, id (DISPID_SABIMinNotification)] HRESULT MinNotification ([in]long MinNotification);
  [propget, id (DISPID_SABIBufferSize)] HRESULT BufferSize ([out, retval]long *BufferSize);
  [propput, id (DISPID_SABIBufferSize)] HRESULT BufferSize ([in]long BufferSize);
  [propget, id (DISPID_SABIEventBias)] HRESULT EventBias ([out, retval]long *EventBias);
  [propput, id (DISPID_SABIEventBias)] HRESULT EventBias ([in]long EventBias);
}

[object, uuid (7a1ef0d5-1581-4741-88e4-209a49f11a10), dual, pointer_default (unique)]
interface ISpeechWaveFormatEx : IDispatch {
  [propget, id (DISPID_SWFEFormatTag)] HRESULT FormatTag ([out, retval]short *FormatTag);
  [propput, id (DISPID_SWFEFormatTag)] HRESULT FormatTag ([in]short FormatTag);
  [propget, id (DISPID_SWFEChannels)] HRESULT Channels ([out, retval]short *Channels);
  [propput, id (DISPID_SWFEChannels)] HRESULT Channels ([in]short Channels);
  [propget, id (DISPID_SWFESamplesPerSec)] HRESULT SamplesPerSec ([out, retval]long *SamplesPerSec);
  [propput, id (DISPID_SWFESamplesPerSec)] HRESULT SamplesPerSec ([in]long SamplesPerSec);
  [propget, id (DISPID_SWFEAvgBytesPerSec)] HRESULT AvgBytesPerSec ([out, retval]long *AvgBytesPerSec);
  [propput, id (DISPID_SWFEAvgBytesPerSec)] HRESULT AvgBytesPerSec ([in]long AvgBytesPerSec);
  [propget, id (DISPID_SWFEBlockAlign)] HRESULT BlockAlign ([out, retval]short *BlockAlign);
  [propput, id (DISPID_SWFEBlockAlign)] HRESULT BlockAlign ([in]short BlockAlign);
  [propget, id (DISPID_SWFEBitsPerSample)] HRESULT BitsPerSample ([out, retval]short *BitsPerSample);
  [propput, id (DISPID_SWFEBitsPerSample)] HRESULT BitsPerSample ([in]short BitsPerSample);
  [propget, id (DISPID_SWFEExtraData)] HRESULT ExtraData ([out, retval]VARIANT *ExtraData);
  [propput, id (DISPID_SWFEExtraData)] HRESULT ExtraData ([in]VARIANT ExtraData);
}

[object, uuid (269316d8-57bd-11d2-9eee-00c04f797396), dual, pointer_default (unique)]
interface ISpeechVoice : IDispatch {
  [propget, id (DISPID_SVStatus)] HRESULT Status ([out, retval] ISpeechVoiceStatus **Status);
  [propget, id (DISPID_SVVoice)] HRESULT Voice ([out, retval] ISpeechObjectToken **Voice);
  [propputref, id (DISPID_SVVoice)] HRESULT Voice ([in]ISpeechObjectToken *Voice);
  [propget, id (DISPID_SVAudioOutput)] HRESULT AudioOutput ([out, retval]ISpeechObjectToken **AudioOutput);
  [propputref, id (DISPID_SVAudioOutput)] HRESULT AudioOutput ([in]ISpeechObjectToken *AudioOutput);
  [propget, id (DISPID_SVAudioOutputStream)] HRESULT AudioOutputStream ([out, retval]ISpeechBaseStream **AudioOutputStream);
  [propputref, id (DISPID_SVAudioOutputStream)] HRESULT AudioOutputStream ([in]ISpeechBaseStream *AudioOutputStream);
  [propget, id (DISPID_SVRate)] HRESULT Rate ([out, retval] long *Rate);
  [propput, id (DISPID_SVRate)] HRESULT Rate ([in] long Rate);
  [propget, id (DISPID_SVVolume)] HRESULT Volume ([out, retval] long *Volume);
  [propput, id (DISPID_SVVolume)] HRESULT Volume ([in] long Volume);
  [propput, hidden, id (DISPID_SVAllowAudioOuputFormatChangesOnNextSet)] HRESULT AllowAudioOutputFormatChangesOnNextSet ([in] VARIANT_BOOL Allow);
  [propget, hidden, id (DISPID_SVAllowAudioOuputFormatChangesOnNextSet)] HRESULT AllowAudioOutputFormatChangesOnNextSet ([out, retval] VARIANT_BOOL *Allow);
  [propget, id (DISPID_SVEventInterests)] HRESULT EventInterests ([out, retval] SpeechVoiceEvents *EventInterestFlags);
  [propput, id (DISPID_SVEventInterests)] HRESULT EventInterests ([in] SpeechVoiceEvents EventInterestFlags);
  [propput, id (DISPID_SVPriority)] HRESULT Priority ([in] SpeechVoicePriority Priority);
  [propget, id (DISPID_SVPriority)] HRESULT Priority ([out, retval] SpeechVoicePriority *Priority);
  [propput, id (DISPID_SVAlertBoundary)] HRESULT AlertBoundary ([in] SpeechVoiceEvents Boundary);
  [propget, id (DISPID_SVAlertBoundary)] HRESULT AlertBoundary ([out, retval] SpeechVoiceEvents *Boundary);
  [propput, id (DISPID_SVSyncronousSpeakTimeout)] HRESULT SynchronousSpeakTimeout ([in] long msTimeout);
  [propget, id (DISPID_SVSyncronousSpeakTimeout)] HRESULT SynchronousSpeakTimeout ([out, retval] long *msTimeout);
  [id (DISPID_SVSpeak)] HRESULT Speak ([in] BSTR Text,[in, defaultvalue (SPF_DEFAULT)] SpeechVoiceSpeakFlags Flags,[out, retval]long *StreamNumber);
  [id (DISPID_SVSpeakStream)] HRESULT SpeakStream ([in] ISpeechBaseStream *Stream,[in, defaultvalue (SPF_DEFAULT)] SpeechVoiceSpeakFlags Flags,[out, retval]long *StreamNumber);
  [id (DISPID_SVPause)] HRESULT Pause (void);
  [id (DISPID_SVResume)] HRESULT Resume (void);
  [id (DISPID_SVSkip)] HRESULT Skip ([in]const BSTR Type,[in]long NumItems,[out, retval]long *NumSkipped);
  [id (DISPID_SVGetVoices)] HRESULT GetVoices ([in, defaultvalue ("")]BSTR RequiredAttributes,[in, defaultvalue ("")]BSTR OptionalAttributes,[out, retval]ISpeechObjectTokens **ObjectTokens);
  [id (DISPID_SVGetAudioOutputs)] HRESULT GetAudioOutputs ([in, defaultvalue ("")]BSTR RequiredAttributes,[in, defaultvalue ("")]BSTR OptionalAttributes,[out, retval]ISpeechObjectTokens **ObjectTokens);
  [id (DISPID_SVWaitUntilDone)] HRESULT WaitUntilDone ([in]long msTimeout,[out, retval]VARIANT_BOOL *Done);
  [hidden, id (DISPID_SVSpeakCompleteEvent)] HRESULT SpeakCompleteEvent ([out, retval]long *Handle);
  [id (DISPID_SVIsUISupported)] HRESULT IsUISupported ([in]const BSTR TypeOfUI,[in, defaultvalue (NULL)]const VARIANT *ExtraData,[out, retval] VARIANT_BOOL *Supported);
  [id (DISPID_SVDisplayUI)] HRESULT DisplayUI ([in]long hWndParent,[in]BSTR Title,[in]const BSTR TypeOfUI,[in, defaultvalue (NULL)]const VARIANT *ExtraData);
};

[object, uuid (8be47b07-57f6-11d2-9eee-00c04f797396), dual, pointer_default (unique)]
interface ISpeechVoiceStatus : IDispatch {
  [propget, id (DISPID_SVSCurrentStreamNumber)] HRESULT CurrentStreamNumber ([out, retval] long *StreamNumber);
  [propget, id (DISPID_SVSLastStreamNumberQueued)] HRESULT LastStreamNumberQueued ([out, retval] long *StreamNumber);
  [propget, id (DISPID_SVSLastResult)] HRESULT LastHResult ([out, retval]long *HResult);
  [propget, id (DISPID_SVSRunningState)] HRESULT RunningState ([out, retval] SpeechRunState *State);
  [propget, id (DISPID_SVSInputWordPosition)] HRESULT InputWordPosition ([out, retval] long *Position);
  [propget, id (DISPID_SVSInputWordLength)] HRESULT InputWordLength ([out, retval] long *Length);
  [propget, id (DISPID_SVSInputSentencePosition)] HRESULT InputSentencePosition ([out, retval] long *Position);
  [propget, id (DISPID_SVSInputSentenceLength)] HRESULT InputSentenceLength ([out, retval] long *Length);
  [propget, id (DISPID_SVSLastBookmark)] HRESULT LastBookmark ([out, retval] BSTR *Bookmark);
  [propget, id (DISPID_SVSLastBookmarkId), hidden] HRESULT LastBookmarkId ([out, retval] long *BookmarkId);
  [propget, id (DISPID_SVSPhonemeId)] HRESULT PhonemeId ([out, retval] short *PhoneId);
  [propget, id (DISPID_SVSVisemeId)] HRESULT VisemeId ([out, retval] short *VisemeId);
};

typedef enum SpeechVisemeType {
  SVP_0 = 0,
  SVP_1,
  SVP_2,
  SVP_3,
  SVP_4,
  SVP_5,
  SVP_6,
  SVP_7,
  SVP_8,
  SVP_9,
  SVP_10,
  SVP_11,
  SVP_12,
  SVP_13,
  SVP_14,
  SVP_15,
  SVP_16,
  SVP_17,
  SVP_18,
  SVP_19,
  SVP_20,
  SVP_21,
} SpeechVisemeType;

typedef enum SpeechVisemeFeature {
  SVF_None = 0,
  SVF_Stressed = SPVFEATURE_STRESSED,
  SVF_Emphasis = SPVFEATURE_EMPHASIS
} SpeechVisemeFeature;

typedef [hidden] enum DISPID_SpeechVoiceEvent {
  DISPID_SVEStreamStart = 1,
  DISPID_SVEStreamEnd,
  DISPID_SVEVoiceChange,
  DISPID_SVEBookmark,
  DISPID_SVEWord,
  DISPID_SVEPhoneme,
  DISPID_SVESentenceBoundary,
  DISPID_SVEViseme,
  DISPID_SVEAudioLevel,
  DISPID_SVEEnginePrivate
} DISPID_SpeechVoiceEvent;

typedef [hidden] enum DISPID_SpeechRecognizer {
  DISPID_SRRecognizer = 1,
  DISPID_SRAllowAudioInputFormatChangesOnNextSet,
  DISPID_SRAudioInput,
  DISPID_SRAudioInputStream,
  DISPID_SRIsShared,
  DISPID_SRState,
  DISPID_SRStatus,
  DISPID_SRProfile,
  DISPID_SREmulateRecognition,
  DISPID_SRCreateRecoContext,
  DISPID_SRGetFormat,
  DISPID_SRSetPropertyNumber,
  DISPID_SRGetPropertyNumber,
  DISPID_SRSetPropertyString,
  DISPID_SRGetPropertyString,
  DISPID_SRIsUISupported,
  DISPID_SRDisplayUI,
  DISPID_SRGetRecognizers,
  DISPID_SVGetAudioInputs,
  DISPID_SVGetProfiles
} DISPID_SpeechRecognizer;

typedef enum SpeechRecognizerState {
  SRSInactive = SPRST_INACTIVE,
  SRSActive = SPRST_ACTIVE,
  SRSActiveAlways = SPRST_ACTIVE_ALWAYS,
  SRSInactiveWithPurge = SPRST_INACTIVE_WITH_PURGE,
} SpeechRecognizerState;

typedef enum SpeechDisplayAttributes {
  SDA_No_Trailing_Space = 0,
  SDA_One_Trailing_Space = SPAF_ONE_TRAILING_SPACE,
  SDA_Two_Trailing_Spaces = SPAF_TWO_TRAILING_SPACES,
  SDA_Consume_Leading_Spaces = SPAF_CONSUME_LEADING_SPACES
} SpeechDisplayAttributes;

typedef enum SpeechFormatType {
  SFTInput = SPWF_INPUT,
  SFTSREngine = SPWF_SRENGINE
} SpeechFormatType;

typedef [hidden] enum DISPID_SpeechRecognizerStatus {
  DISPID_SRSAudioStatus = 1,
  DISPID_SRSCurrentStreamPosition,
  DISPID_SRSCurrentStreamNumber,
  DISPID_SRSNumberOfActiveRules,
  DISPID_SRSClsidEngine,
  DISPID_SRSSupportedLanguages
} DISPID_SpeechRecognizerStatus;

typedef [hidden] enum DISPID_SpeechRecoContext {
  DISPID_SRCRecognizer = 1,
  DISPID_SRCAudioInInterferenceStatus,
  DISPID_SRCRequestedUIType,
  DISPID_SRCVoice,
  DISPID_SRAllowVoiceFormatMatchingOnNextSet,
  DISPID_SRCVoicePurgeEvent,
  DISPID_SRCEventInterests,
  DISPID_SRCCmdMaxAlternates,
  DISPID_SRCState,
  DISPID_SRCRetainedAudio,
  DISPID_SRCRetainedAudioFormat,
  DISPID_SRCPause,
  DISPID_SRCResume,
  DISPID_SRCCreateGrammar,
  DISPID_SRCCreateResultFromMemory,
  DISPID_SRCBookmark,
  DISPID_SRCSetAdaptationData
} DISPID_SpeechRecoContext;

typedef enum SpeechRetainedAudioOptions {
  SRAONone = SPAO_NONE,
  SRAORetainAudio = SPAO_RETAIN_AUDIO
} SpeechRetainedAudioOptions;

typedef enum SpeechBookmarkOptions {
  SBONone = SPBO_NONE,
  SBOPause = SPBO_PAUSE
} SpeechBookmarkOptions;

typedef enum SpeechInterference {
  SINone = SPINTERFERENCE_NONE,
  SINoise = SPINTERFERENCE_NOISE,
  SINoSignal = SPINTERFERENCE_NOSIGNAL,
  SITooLoud = SPINTERFERENCE_TOOLOUD,
  SITooQuiet = SPINTERFERENCE_TOOQUIET,
  SITooFast = SPINTERFERENCE_TOOFAST,
  SITooSlow = SPINTERFERENCE_TOOSLOW
} SpeechInterference;

typedef enum SpeechRecoEvents {
  SREStreamEnd = 0x1,
  SRESoundStart = 0x2,
  SRESoundEnd = 0x4,
  SREPhraseStart = 0x8,
  SRERecognition = 0x10,
  SREHypothesis = 0x20,
  SREBookmark = 0x40,
  SREPropertyNumChange = 0x80,
  SREPropertyStringChange = 0x100,
  SREFalseRecognition = 0x200,
  SREInterference = 0x400,
  SRERequestUI = 0x800,
  SREStateChange = 0x1000,
  SREAdaptation = 0x2000,
  SREStreamStart = 0x4000,
  SRERecoOtherContext = 0x8000,
  SREAudioLevel = 0x10000,
  SREPrivate = 0x40000,
  SREAllEvents = 0x5ffff
} SpeechRecoEvents;

typedef enum SpeechRecoContextState {
  SRCS_Disabled = SPCS_DISABLED,
  SRCS_Enabled = SPCS_ENABLED
} SpeechRecoContextState;

typedef [hidden] enum DISPIDSPRG {
  DISPID_SRGId = 1,
  DISPID_SRGRecoContext,
  DISPID_SRGState,
  DISPID_SRGRules,
  DISPID_SRGReset,
  DISPID_SRGCommit,
  DISPID_SRGCmdLoadFromFile,
  DISPID_SRGCmdLoadFromObject,
  DISPID_SRGCmdLoadFromResource,
  DISPID_SRGCmdLoadFromMemory,
  DISPID_SRGCmdLoadFromProprietaryGrammar,
  DISPID_SRGCmdSetRuleState,
  DISPID_SRGCmdSetRuleIdState,
  DISPID_SRGDictationLoad,
  DISPID_SRGDictationUnload,
  DISPID_SRGDictationSetState,
  DISPID_SRGSetWordSequenceData,
  DISPID_SRGSetTextSelection,
  DISPID_SRGIsPronounceable
} DISPIDSPRG;

typedef enum SpeechLoadOption {
  SLOStatic = SPLO_STATIC,
  SLODynamic = SPLO_DYNAMIC
} SpeechLoadOption;

typedef enum SpeechWordPronounceable {
  SWPUnknownWordUnpronounceable = SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE,
  SWPUnknownWordPronounceable = SPWP_UNKNOWN_WORD_PRONOUNCEABLE,
  SWPKnownWordPronounceable = SPWP_KNOWN_WORD_PRONOUNCEABLE
} SpeechWordPronounceable;

typedef enum SpeechGrammarState {
  SGSEnabled = SPGS_ENABLED,
  SGSDisabled = SPGS_DISABLED,
  SGSExclusive = SPGS_EXCLUSIVE,
} SpeechGrammarState;

typedef enum SpeechRuleState {
  SGDSInactive = SPRS_INACTIVE,
  SGDSActive = SPRS_ACTIVE,
  SGDSActiveWithAutoPause = SPRS_ACTIVE_WITH_AUTO_PAUSE,
#if _SAPI_BLD_ >= 0x053
  SGDSActiveUserDelimited = SPRS_ACTIVE_USER_DELIMITED
#endif
} SpeechRuleState;

typedef enum SpeechRuleAttributes {
  SRATopLevel = SPRAF_TopLevel,
  SRADefaultToActive = SPRAF_Active,
  SRAExport = SPRAF_Export,
  SRAImport = SPRAF_Import,
  SRAInterpreter = SPRAF_Interpreter,
  SRADynamic = SPRAF_Dynamic,
#if _SAPI_BLD_ >= 0x053
  SRARoot = SPRAF_Root
#endif
} SpeechRuleAttributes;

typedef enum SpeechGrammarWordType {
  SGDisplay = SPWT_DISPLAY,
  SGLexical = SPWT_LEXICAL,
  SGPronounciation = SPWT_PRONUNCIATION,
#if _SAPI_BLD_ >= 0x053
  SGLexicalNoSpecialChars = SPWT_LEXICAL_NO_SPECIAL_CHARS
#endif
} SpeechGrammarWordType;

typedef [hidden] enum DISPID_SpeechRecoContextEvents {
  DISPID_SRCEStartStream = 1,
  DISPID_SRCEEndStream,
  DISPID_SRCEBookmark,
  DISPID_SRCESoundStart,
  DISPID_SRCESoundEnd,
  DISPID_SRCEPhraseStart,
  DISPID_SRCERecognition,
  DISPID_SRCEHypothesis,
  DISPID_SRCEPropertyNumberChange,
  DISPID_SRCEPropertyStringChange,
  DISPID_SRCEFalseRecognition,
  DISPID_SRCEInterference,
  DISPID_SRCERequestUI,
  DISPID_SRCERecognizerStateChange,
  DISPID_SRCEAdaptation,
  DISPID_SRCERecognitionForOtherContext,
  DISPID_SRCEAudioLevel,
  DISPID_SRCEEnginePrivate
} DISPID_SpeechRecoContextEvents;

typedef enum SpeechRecognitionType {
  SRTStandard = 0,
  SRTAutopause = SPREF_AutoPause,
  SRTEmulated = SPREF_Emulated
#if _SAPI_BLD_ >= 0x053
  ,
  SRTSMLTimeout = SPREF_SMLTimeout,
  SRTExtendableParse = SPREF_ExtendableParse,
  SRTReSent = SPREF_ReSent
#endif
} SpeechRecognitionType;

typedef [hidden] enum DISPID_SpeechGrammarRule {
  DISPID_SGRAttributes = 1,
  DISPID_SGRInitialState,
  DISPID_SGRName,
  DISPID_SGRId,
  DISPID_SGRClear,
  DISPID_SGRAddResource,
  DISPID_SGRAddState
} DISPID_SpeechGrammarRule;

typedef [hidden] enum DISPID_SpeechGrammarRules {
  DISPID_SGRsCount = 1,
  DISPID_SGRsDynamic,
  DISPID_SGRsAdd,
  DISPID_SGRsCommit,
  DISPID_SGRsCommitAndSave,
  DISPID_SGRsFindRule,
  DISPID_SGRsItem = DISPID_VALUE,
  DISPID_SGRs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechGrammarRules;

typedef [hidden] enum DISPID_SpeechGrammarRuleState {
  DISPID_SGRSRule = 1,
  DISPID_SGRSTransitions,
  DISPID_SGRSAddWordTransition,
  DISPID_SGRSAddRuleTransition,
  DISPID_SGRSAddSpecialTransition
} DISPID_SpeechGrammarRuleState;

typedef enum SpeechSpecialTransitionType {
  SSTTWildcard = 1,
  SSTTDictation,
  SSTTTextBuffer
} SpeechSpecialTransitionType;

typedef [hidden] enum DISPID_SpeechGrammarRuleStateTransitions {
  DISPID_SGRSTsCount = 1,
  DISPID_SGRSTsItem = DISPID_VALUE,
  DISPID_SGRSTs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechGrammarRuleStateTransitions;

typedef [hidden] enum DISPID_SpeechGrammarRuleStateTransition {
  DISPID_SGRSTType = 1,
  DISPID_SGRSTText,
  DISPID_SGRSTRule,
  DISPID_SGRSTWeight,
  DISPID_SGRSTPropertyName,
  DISPID_SGRSTPropertyId,
  DISPID_SGRSTPropertyValue,
  DISPID_SGRSTNextState
} DISPID_SpeechGrammarRuleStateTransition;

typedef enum SpeechGrammarRuleStateTransitionType {
  SGRSTTEpsilon = 0,
  SGRSTTWord,
  SGRSTTRule,
  SGRSTTDictation,
  SGRSTTWildcard,
  SGRSTTTextBuffer
} SpeechGrammarRuleStateTransitionType;

typedef [hidden] enum DISPIDSPTSI {
  DISPIDSPTSI_ActiveOffset = 1,
  DISPIDSPTSI_ActiveLength,
  DISPIDSPTSI_SelectionOffset,
  DISPIDSPTSI_SelectionLength
} DISPIDSPTSI;

typedef [hidden] enum DISPID_SpeechRecoResult {
  DISPID_SRRRecoContext = 1,
  DISPID_SRRTimes,
  DISPID_SRRAudioFormat,
  DISPID_SRRPhraseInfo,
  DISPID_SRRAlternates,
  DISPID_SRRAudio,
  DISPID_SRRSpeakAudio,
  DISPID_SRRSaveToMemory,
  DISPID_SRRDiscardResultInfo
} DISPID_SpeechRecoResult;

typedef enum SpeechDiscardType {
  SDTProperty = SPDF_PROPERTY,
  SDTReplacement = SPDF_REPLACEMENT,
  SDTRule = SPDF_RULE,
  SDTDisplayText = SPDF_DISPLAYTEXT,
  SDTLexicalForm = SPDF_LEXICALFORM,
  SDTPronunciation = SPDF_PRONUNCIATION,
  SDTAudio = SPDF_AUDIO,
  SDTAlternates = SPDF_ALTERNATES,
  SDTAll = SPDF_ALL
} SpeechDiscardType;

#if _SAPI_BLD_ >= 0x53
typedef enum SpeechEmulationCompareFlags {
  SECFIgnoreCase = 0x1,
  SECFIgnoreKanaType = 0x10000,
  SECFIgnoreWidth = 0x20000,
  SECFNoSpecialChars = 0x20000000,
  SECFEmulateResult = 0x40000000,
  SECFDefault = SECFIgnoreCase | SECFIgnoreKanaType | SECFIgnoreWidth
} SpeechEmulationCompareFlags;

typedef [hidden] enum DISPID_SpeechXMLRecoResult {
  DISPID_SRRGetXMLResult = DISPID_SRRDiscardResultInfo + 1,
  DISPID_SRRGetXMLErrorInfo = DISPID_SRRGetXMLResult + 1
} DISPID_SpeechXMLRecoResult;

typedef [hidden] enum DISPID_SpeechRecoResult2 {
  DISPID_SRRSetTextFeedback = DISPID_SRRGetXMLErrorInfo + 1
} DISPID_SpeechRecoResult2;
#endif

typedef [hidden] enum DISPID_SpeechPhraseBuilder {
  DISPID_SPPBRestorePhraseFromMemory = 1
} DISPID_SpeechPhraseBuilder;

typedef [hidden] enum DISPID_SpeechRecoResultTimes {
  DISPID_SRRTStreamTime = 1,
  DISPID_SRRTLength,
  DISPID_SRRTTickCount,
  DISPID_SRRTOffsetFromStart
} DISPID_SpeechRecoResultTimes;

typedef [hidden] enum DISPID_SpeechPhraseAlternate {
  DISPID_SPARecoResult = 1,
  DISPID_SPAStartElementInResult,
  DISPID_SPANumberOfElementsInResult,
  DISPID_SPAPhraseInfo,
  DISPID_SPACommit
} DISPID_SpeechPhraseAlternate;

typedef [hidden] enum DISPID_SpeechPhraseAlternates {
  DISPID_SPAsCount = 1,
  DISPID_SPAsItem = DISPID_VALUE,
  DISPID_SPAs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseAlternates;

typedef [hidden] enum DISPID_SpeechPhraseInfo {
  DISPID_SPILanguageId = 1,
  DISPID_SPIGrammarId,
  DISPID_SPIStartTime,
  DISPID_SPIAudioStreamPosition,
  DISPID_SPIAudioSizeBytes,
  DISPID_SPIRetainedSizeBytes,
  DISPID_SPIAudioSizeTime,
  DISPID_SPIRule,
  DISPID_SPIProperties,
  DISPID_SPIElements,
  DISPID_SPIReplacements,
  DISPID_SPIEngineId,
  DISPID_SPIEnginePrivateData,
  DISPID_SPISaveToMemory,
  DISPID_SPIGetText,
  DISPID_SPIGetDisplayAttributes
} DISPID_SpeechPhraseInfo;

typedef [hidden] enum DISPID_SpeechPhraseElement {
  DISPID_SPEAudioTimeOffset = 1,
  DISPID_SPEAudioSizeTime,
  DISPID_SPEAudioStreamOffset,
  DISPID_SPEAudioSizeBytes,
  DISPID_SPERetainedStreamOffset,
  DISPID_SPERetainedSizeBytes,
  DISPID_SPEDisplayText,
  DISPID_SPELexicalForm,
  DISPID_SPEPronunciation,
  DISPID_SPEDisplayAttributes,
  DISPID_SPERequiredConfidence,
  DISPID_SPEActualConfidence,
  DISPID_SPEEngineConfidence
} DISPID_SpeechPhraseElement;

typedef enum SpeechEngineConfidence {
  SECLowConfidence = -1,
  SECNormalConfidence = 0,
  SECHighConfidence = 1
} SpeechEngineConfidence;

typedef [hidden] enum DISPID_SpeechPhraseElements {
  DISPID_SPEsCount = 1,
  DISPID_SPEsItem = DISPID_VALUE,
  DISPID_SPEs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseElements;

typedef [hidden] enum DISPID_SpeechPhraseReplacement {
  DISPID_SPRDisplayAttributes = 1,
  DISPID_SPRText,
  DISPID_SPRFirstElement,
  DISPID_SPRNumberOfElements
} DISPID_SpeechPhraseReplacement;

typedef [hidden] enum DISPID_SpeechPhraseReplacements {
  DISPID_SPRsCount = 1,
  DISPID_SPRsItem = DISPID_VALUE,
  DISPID_SPRs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseReplacements;

typedef [hidden] enum DISPID_SpeechPhraseProperty {
  DISPID_SPPName = 1,
  DISPID_SPPId,
  DISPID_SPPValue,
  DISPID_SPPFirstElement,
  DISPID_SPPNumberOfElements,
  DISPID_SPPEngineConfidence,
  DISPID_SPPConfidence,
  DISPID_SPPParent,
  DISPID_SPPChildren
} DISPID_SpeechPhraseProperty;

typedef [hidden] enum DISPID_SpeechPhraseProperties {
  DISPID_SPPsCount = 1,
  DISPID_SPPsItem = DISPID_VALUE,
  DISPID_SPPs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseProperties;

typedef [hidden] enum DISPID_SpeechPhraseRule {
  DISPID_SPRuleName = 1,
  DISPID_SPRuleId,
  DISPID_SPRuleFirstElement,
  DISPID_SPRuleNumberOfElements,
  DISPID_SPRuleParent,
  DISPID_SPRuleChildren,
  DISPID_SPRuleConfidence,
  DISPID_SPRuleEngineConfidence
} DISPID_SpeechPhraseRule;

typedef [hidden] enum DISPID_SpeechPhraseRules {
  DISPID_SPRulesCount = 1,
  DISPID_SPRulesItem = DISPID_VALUE,
  DISPID_SPRules_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseRules;

typedef [hidden] enum DISPID_SpeechLexicon {
  DISPID_SLGenerationId = 1,
  DISPID_SLGetWords,
  DISPID_SLAddPronunciation,
  DISPID_SLAddPronunciationByPhoneIds,
  DISPID_SLRemovePronunciation,
  DISPID_SLRemovePronunciationByPhoneIds,
  DISPID_SLGetPronunciations,
  DISPID_SLGetGenerationChange
} DISPID_SpeechLexicon;

typedef enum SpeechLexiconType {
  SLTUser = eLEXTYPE_USER,
  SLTApp = eLEXTYPE_APP
} SpeechLexiconType;

typedef enum SpeechPartOfSpeech {
  SPSNotOverriden = SPPS_NotOverriden,
  SPSUnknown = SPPS_Unknown,
  SPSNoun = SPPS_Noun,
  SPSVerb = SPPS_Verb,
  SPSModifier = SPPS_Modifier,
  SPSFunction = SPPS_Function,
  SPSInterjection = SPPS_Interjection,
#if _SAPI_BLD_ >= 0x53
  SPSLMA = SPPS_LMA,
  SPSSuppressWord = SPPS_SuppressWord
#endif
} SpeechPartOfSpeech;

typedef [hidden] enum DISPID_SpeechLexiconWords {
  DISPID_SLWsCount = 1,
  DISPID_SLWsItem = DISPID_VALUE,
  DISPID_SLWs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechLexiconWords;

typedef enum SpeechWordType {
  SWTAdded = eWORDTYPE_ADDED,
  SWTDeleted = eWORDTYPE_DELETED
} SpeechWordType;

typedef [hidden] enum DISPID_SpeechLexiconWord {
  DISPID_SLWLangId = 1,
  DISPID_SLWType,
  DISPID_SLWWord,
  DISPID_SLWPronunciations
} DISPID_SpeechLexiconWord;

typedef [hidden] enum DISPID_SpeechLexiconProns {
  DISPID_SLPsCount = 1,
  DISPID_SLPsItem = DISPID_VALUE,
  DISPID_SLPs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechLexiconProns;

typedef [hidden] enum DISPID_SpeechLexiconPronunciation {
  DISPID_SLPType = 1,
  DISPID_SLPLangId,
  DISPID_SLPPartOfSpeech,
  DISPID_SLPPhoneIds,
  DISPID_SLPSymbolic,
} DISPID_SpeechLexiconPronunciation;

typedef [hidden] enum DISPID_SpeechPhoneConverter {
  DISPID_SPCLangId = 1,
  DISPID_SPCPhoneToId,
  DISPID_SPCIdToPhone
} DISPID_SpeechPhoneConverter;

[uuid (A372ACD1-3bef-4bbd-8ffb-CB3E2B416AF8)]
dispinterface _ISpeechVoiceEvents {
  properties:
  methods:
  [id (DISPID_SVEStreamStart)] void StartStream ([in]long StreamNumber,[in]VARIANT StreamPosition);
  [id (DISPID_SVEStreamEnd)] void EndStream ([in]long StreamNumber,[in]VARIANT StreamPosition);
  [id (DISPID_SVEVoiceChange)] void VoiceChange ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]ISpeechObjectToken *VoiceObjectToken);
  [id (DISPID_SVEBookmark)] void Bookmark ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]BSTR Bookmark,[in]long BookmarkId);
  [id (DISPID_SVEWord)] void Word ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]long CharacterPosition,[in]long Length);
  [id (DISPID_SVESentenceBoundary)] void Sentence ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]long CharacterPosition,[in]long Length);
  [id (DISPID_SVEPhoneme)] void Phoneme ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]long Duration,[in]short NextPhoneId,[in]SpeechVisemeFeature Feature,[in]short CurrentPhoneId);
  [id (DISPID_SVEViseme)] void Viseme ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]long Duration,[in]SpeechVisemeType NextVisemeId,[in]SpeechVisemeFeature Feature,[in]SpeechVisemeType CurrentVisemeId);
  [id (DISPID_SVEAudioLevel)] void AudioLevel ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]long AudioLevel);
  [id (DISPID_SVEEnginePrivate)] void EnginePrivate ([in]long StreamNumber,[in]long StreamPosition,[in]VARIANT EngineData);
};

[object, uuid (2d5f1c0c-BD75-4b08-9478-3b11fea2586c), dual, pointer_default (unique)]
interface ISpeechRecognizer : IDispatch {
  [propputref, id (DISPID_SRRecognizer)] HRESULT Recognizer ([in]ISpeechObjectToken *Recognizer);
  [propget, id (DISPID_SRRecognizer)] HRESULT Recognizer ([out, retval]ISpeechObjectToken **Recognizer);
  [propput, hidden, id (DISPID_SRAllowAudioInputFormatChangesOnNextSet)] HRESULT AllowAudioInputFormatChangesOnNextSet ([in] VARIANT_BOOL Allow);
  [propget, hidden, id (DISPID_SRAllowAudioInputFormatChangesOnNextSet)] HRESULT AllowAudioInputFormatChangesOnNextSet ([out, retval] VARIANT_BOOL *Allow);
  [propputref, id (DISPID_SRAudioInput)] HRESULT AudioInput ([in, defaultvalue (0)]ISpeechObjectToken *AudioInput);
  [propget, id (DISPID_SRAudioInput)] HRESULT AudioInput ([out, retval]ISpeechObjectToken **AudioInput);
  [propputref, id (DISPID_SRAudioInputStream)] HRESULT AudioInputStream ([in, defaultvalue (0)]ISpeechBaseStream *AudioInputStream);
  [propget, id (DISPID_SRAudioInputStream)] HRESULT AudioInputStream ([out, retval]ISpeechBaseStream **AudioInputStream);
  [propget, id (DISPID_SRIsShared)] HRESULT IsShared ([out, retval]VARIANT_BOOL *Shared);
  [propput, id (DISPID_SRState)] HRESULT State ([in] SpeechRecognizerState State);
  [propget, id (DISPID_SRState)] HRESULT State ([out, retval] SpeechRecognizerState *State);
  [propget, id (DISPID_SRStatus)] HRESULT Status ([out, retval]ISpeechRecognizerStatus **Status);
  [propputref, id (DISPID_SRProfile)] HRESULT Profile ([in, defaultvalue (0)]ISpeechObjectToken *Profile);
  [propget, id (DISPID_SRProfile)] HRESULT Profile ([out, retval]ISpeechObjectToken **Profile);
  [id (DISPID_SREmulateRecognition)] HRESULT EmulateRecognition ([in]VARIANT TextElements,[in, defaultvalue (NULL)]VARIANT *ElementDisplayAttributes,[in, defaultvalue (0)]long LanguageId);
  [id (DISPID_SRCreateRecoContext)] HRESULT CreateRecoContext ([out, retval]ISpeechRecoContext **NewContext);
  [id (DISPID_SRGetFormat)] HRESULT GetFormat ([in] SpeechFormatType Type,[out, retval]ISpeechAudioFormat **Format);
  [id (DISPID_SRSetPropertyNumber), hidden] HRESULT SetPropertyNumber ([in]const BSTR Name,[in]long Value,[out, retval]VARIANT_BOOL *Supported);
  [id (DISPID_SRGetPropertyNumber), hidden] HRESULT GetPropertyNumber ([in]const BSTR Name,[in, out]long *Value,[out, retval]VARIANT_BOOL *Supported);
  [id (DISPID_SRSetPropertyString), hidden] HRESULT SetPropertyString ([in]const BSTR Name,[in]const BSTR Value,[out, retval]VARIANT_BOOL *Supported);
  [id (DISPID_SRGetPropertyString), hidden] HRESULT GetPropertyString ([in]const BSTR Name,[in, out]BSTR *Value,[out, retval]VARIANT_BOOL *Supported);
  [id (DISPID_SRIsUISupported)] HRESULT IsUISupported ([in]const BSTR TypeOfUI,[in, defaultvalue (NULL)]const VARIANT *ExtraData,[out, retval] VARIANT_BOOL *Supported);
  [id (DISPID_SRDisplayUI)] HRESULT DisplayUI ([in]long hWndParent,[in]BSTR Title,[in]const BSTR TypeOfUI,[in, defaultvalue (NULL)]const VARIANT *ExtraData);
  [id (DISPID_SRGetRecognizers)] HRESULT GetRecognizers ([in, defaultvalue ("")]BSTR RequiredAttributes,[in, defaultvalue ("")]BSTR OptionalAttributes,[out, retval]ISpeechObjectTokens **ObjectTokens);
  [id (DISPID_SVGetAudioInputs)] HRESULT GetAudioInputs ([in, defaultvalue ("")]BSTR RequiredAttributes,[in, defaultvalue ("")]BSTR OptionalAttributes,[out, retval]ISpeechObjectTokens **ObjectTokens);
  [id (DISPID_SVGetProfiles)] HRESULT GetProfiles ([in, defaultvalue ("")]BSTR RequiredAttributes,[in, defaultvalue ("")]BSTR OptionalAttributes,[out, retval]ISpeechObjectTokens **ObjectTokens);
};

[object, uuid (BFF9E781-53ec-484e-BB8A-0e1b5551e35c), dual, pointer_default (unique)]
interface ISpeechRecognizerStatus : IDispatch {
  [propget, id (DISPID_SRSAudioStatus)] HRESULT AudioStatus ([out, retval]ISpeechAudioStatus **AudioStatus);
  [propget, id (DISPID_SRSCurrentStreamPosition)] HRESULT CurrentStreamPosition ([out, retval]VARIANT *pCurrentStreamPos);
  [propget, id (DISPID_SRSCurrentStreamNumber)] HRESULT CurrentStreamNumber ([out, retval]long *StreamNumber);
  [propget, id (DISPID_SRSNumberOfActiveRules)] HRESULT NumberOfActiveRules ([out, retval]long *NumberOfActiveRules);
  [propget, id (DISPID_SRSClsidEngine)] HRESULT ClsidEngine ([out, retval]BSTR *ClsidEngine);
  [propget, id (DISPID_SRSSupportedLanguages)] HRESULT SupportedLanguages ([out, retval]VARIANT *SupportedLanguages);
};

[object, uuid (580aa49d-7e1e-4809-B8E2-57da806104b8), dual, pointer_default (unique)]
interface ISpeechRecoContext : IDispatch {
  [propget, id (DISPID_SRCRecognizer)] HRESULT Recognizer ([out, retval]ISpeechRecognizer **Recognizer);
  [propget, id (DISPID_SRCAudioInInterferenceStatus)] HRESULT AudioInputInterferenceStatus ([out, retval]SpeechInterference *Interference);
  [propget, id (DISPID_SRCRequestedUIType)] HRESULT RequestedUIType ([out, retval]BSTR *UIType);
  [propputref, id (DISPID_SRCVoice)] HRESULT Voice ([in]ISpeechVoice *Voice);
  [propget, id (DISPID_SRCVoice)] HRESULT Voice ([out, retval]ISpeechVoice **Voice);
  [propput, hidden, id (DISPID_SRAllowVoiceFormatMatchingOnNextSet)] HRESULT AllowVoiceFormatMatchingOnNextSet ([in] VARIANT_BOOL Allow);
  [propget, hidden, id (DISPID_SRAllowVoiceFormatMatchingOnNextSet)] HRESULT AllowVoiceFormatMatchingOnNextSet ([out, retval] VARIANT_BOOL *pAllow);
  [propput, id (DISPID_SRCVoicePurgeEvent)] HRESULT VoicePurgeEvent ([in]SpeechRecoEvents EventInterest);
  [propget, id (DISPID_SRCVoicePurgeEvent)] HRESULT VoicePurgeEvent ([out, retval]SpeechRecoEvents *EventInterest);
  [propput, id (DISPID_SRCEventInterests)] HRESULT EventInterests ([in]SpeechRecoEvents EventInterest);
  [propget, id (DISPID_SRCEventInterests)] HRESULT EventInterests ([out, retval]SpeechRecoEvents *EventInterest);
  [propput, id (DISPID_SRCCmdMaxAlternates)] HRESULT CmdMaxAlternates ([in] long MaxAlternates);
  [propget, id (DISPID_SRCCmdMaxAlternates)] HRESULT CmdMaxAlternates ([out, retval] long *MaxAlternates);
  [propput, id (DISPID_SRCState)] HRESULT State ([in] SpeechRecoContextState State);
  [propget, id (DISPID_SRCState)] HRESULT State ([out, retval] SpeechRecoContextState *State);
  [propput, id (DISPID_SRCRetainedAudio)] HRESULT RetainedAudio ([in]SpeechRetainedAudioOptions Option);
  [propget, id (DISPID_SRCRetainedAudio)] HRESULT RetainedAudio ([out, retval]SpeechRetainedAudioOptions *Option);
  [propputref, id (DISPID_SRCRetainedAudioFormat)] HRESULT RetainedAudioFormat ([in] ISpeechAudioFormat *Format);
  [propget, id (DISPID_SRCRetainedAudioFormat)] HRESULT RetainedAudioFormat ([out, retval] ISpeechAudioFormat **Format);
  [id (DISPID_SRCPause)] HRESULT Pause (void);
  [id (DISPID_SRCResume)] HRESULT Resume (void);
  [id (DISPID_SRCCreateGrammar)] HRESULT CreateGrammar ([in, defaultvalue (0)]VARIANT GrammarId,[out, retval]ISpeechRecoGrammar **Grammar);
  [id (DISPID_SRCCreateResultFromMemory)] HRESULT CreateResultFromMemory ([in]VARIANT *ResultBlock,[out, retval]ISpeechRecoResult **Result);
  [id (DISPID_SRCBookmark)] HRESULT Bookmark ([in]SpeechBookmarkOptions Options,[in]VARIANT StreamPos,[in]VARIANT BookmarkId);
  [id (DISPID_SRCSetAdaptationData)] HRESULT SetAdaptationData ([in]BSTR AdaptationString);
};

[object, uuid (B6D6F79F-2158-4e50-B5BC-9a9ccd852a09), dual, pointer_default (unique)]
interface ISpeechRecoGrammar : IDispatch {
  [propget, id (DISPID_SRGId)] HRESULT Id ([out, retval]VARIANT *Id);
  [propget, id (DISPID_SRGRecoContext)] HRESULT RecoContext ([out, retval] ISpeechRecoContext **RecoContext);
  [propput, id (DISPID_SRGState)] HRESULT State ([in]SpeechGrammarState State);
  [propget, id (DISPID_SRGState)] HRESULT State ([out, retval]SpeechGrammarState *State);
  [propget, id (DISPID_SRGRules)] HRESULT Rules ([out, retval]ISpeechGrammarRules **Rules);
  [id (DISPID_SRGReset)] HRESULT Reset ([in, defaultvalue (0)]SpeechLanguageId NewLanguage);
  [id (DISPID_SRGCmdLoadFromFile)] HRESULT CmdLoadFromFile ([in]const BSTR FileName,[in, defaultvalue (SLOStatic)]SpeechLoadOption LoadOption);
  [id (DISPID_SRGCmdLoadFromObject)] HRESULT CmdLoadFromObject ([in]const BSTR ClassId,[in]const BSTR GrammarName,[in, defaultvalue (SLOStatic)]SpeechLoadOption LoadOption);
  [id (DISPID_SRGCmdLoadFromResource)] HRESULT CmdLoadFromResource ([in]long hModule,[in]VARIANT ResourceName,[in]VARIANT ResourceType,[in]SpeechLanguageId LanguageId,[in, defaultvalue (SLOStatic)]SpeechLoadOption LoadOption);
  [id (DISPID_SRGCmdLoadFromMemory)] HRESULT CmdLoadFromMemory ([in] VARIANT GrammarData,[in, defaultvalue (SLOStatic)]SpeechLoadOption LoadOption);
  [id (DISPID_SRGCmdLoadFromProprietaryGrammar)] HRESULT CmdLoadFromProprietaryGrammar ([in]const BSTR ProprietaryGuid,[in]const BSTR ProprietaryString,[in]VARIANT ProprietaryData,[in, defaultvalue (SLOStatic)]SpeechLoadOption LoadOption);
  [id (DISPID_SRGCmdSetRuleState)] HRESULT CmdSetRuleState ([in]const BSTR Name,[in]SpeechRuleState State);
  [id (DISPID_SRGCmdSetRuleIdState)] HRESULT CmdSetRuleIdState ([in]long RuleId,[in]SpeechRuleState State);
  [id (DISPID_SRGDictationLoad)] HRESULT DictationLoad ([in, defaultvalue ("")] const BSTR TopicName,[in, defaultvalue (SLOStatic)]SpeechLoadOption LoadOption);
  [id (DISPID_SRGDictationUnload)] HRESULT DictationUnload (void);
  [id (DISPID_SRGDictationSetState)] HRESULT DictationSetState ([in]SpeechRuleState State);
  [id (DISPID_SRGSetWordSequenceData)] HRESULT SetWordSequenceData ([in]const BSTR Text,[in]long TextLength,[in]ISpeechTextSelectionInformation *Info);
  [id (DISPID_SRGSetTextSelection)] HRESULT SetTextSelection ([in]ISpeechTextSelectionInformation *Info);
  [id (DISPID_SRGIsPronounceable)] HRESULT IsPronounceable ([in]const BSTR Word,[out, retval]SpeechWordPronounceable *WordPronounceable);
};

[uuid (7b8fcb42-0e9d-4f00-A048-7b04d6179d3d)]
dispinterface _ISpeechRecoContextEvents {
  properties:
  methods:
  [id (DISPID_SRCEStartStream)] void StartStream ([in]long StreamNumber,[in]VARIANT StreamPosition);
  [id (DISPID_SRCEEndStream)] void EndStream ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]VARIANT_BOOL StreamReleased);
  [id (DISPID_SRCEBookmark)] void Bookmark ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]VARIANT BookmarkId,[in]SpeechBookmarkOptions Options);
  [id (DISPID_SRCESoundStart)] void SoundStart ([in]long StreamNumber,[in]VARIANT StreamPosition);
  [id (DISPID_SRCESoundEnd)] void SoundEnd ([in]long StreamNumber,[in]VARIANT StreamPosition);
  [id (DISPID_SRCEPhraseStart)] void PhraseStart ([in]long StreamNumber,[in]VARIANT StreamPosition);
  [id (DISPID_SRCERecognition)] void Recognition ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]SpeechRecognitionType RecognitionType,[in]ISpeechRecoResult *Result);
  [id (DISPID_SRCEHypothesis)] void Hypothesis ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]ISpeechRecoResult *Result);
  [id (DISPID_SRCEPropertyNumberChange)] void PropertyNumberChange ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]BSTR PropertyName,[in]long NewNumberValue);
  [id (DISPID_SRCEPropertyStringChange)] void PropertyStringChange ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]BSTR PropertyName,[in]BSTR NewStringValue);
  [id (DISPID_SRCEFalseRecognition)] void FalseRecognition ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]ISpeechRecoResult *Result);
  [id (DISPID_SRCEInterference)] void Interference ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]SpeechInterference Interference);
  [id (DISPID_SRCERequestUI)] void RequestUI ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]BSTR UIType);
  [id (DISPID_SRCERecognizerStateChange)] void RecognizerStateChange ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]SpeechRecognizerState NewState);
  [id (DISPID_SRCEAdaptation)] void Adaptation ([in]long StreamNumber,[in]VARIANT StreamPosition);
  [id (DISPID_SRCERecognitionForOtherContext)] void RecognitionForOtherContext ([in]long StreamNumber,[in]VARIANT StreamPosition);
  [id (DISPID_SRCEAudioLevel)] void AudioLevel ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]long AudioLevel);
  [id (DISPID_SRCEEnginePrivate)] void EnginePrivate ([in]long StreamNumber,[in]VARIANT StreamPosition,[in]VARIANT EngineData);
};

[object, uuid (AFE719CF-5dd1-44f2-999c-7a399f1cfccc), dual, pointer_default (unique)]
interface ISpeechGrammarRule : IDispatch {
  [propget, id (DISPID_SGRAttributes)] HRESULT Attributes ([out, retval] SpeechRuleAttributes *Attributes);
  [propget, id (DISPID_SGRInitialState)] HRESULT InitialState ([out, retval] ISpeechGrammarRuleState **State);
  [propget, id (DISPID_SGRName)] HRESULT Name ([out, retval] BSTR *Name);
  [propget, id (DISPID_SGRId)] HRESULT Id ([out, retval] long *Id);
  [id (DISPID_SGRClear)] HRESULT Clear ();
  [id (DISPID_SGRAddResource)] HRESULT AddResource ([in]const BSTR ResourceName,[in]const BSTR ResourceValue);
  [id (DISPID_SGRAddState)] HRESULT AddState ([out, retval] ISpeechGrammarRuleState **State);
};

[object, uuid (6ffa3b44-FC2D-40d1-8afc-32911c7f1ad1), dual, pointer_default (unique)]
interface ISpeechGrammarRules : IDispatch {
  [propget, id (DISPID_SGRsCount)] HRESULT Count ([out, retval] long *Count);
  [id (DISPID_SGRsFindRule)] HRESULT FindRule ([in]VARIANT RuleNameOrId,[out, retval]ISpeechGrammarRule **Rule);
  [id (DISPID_SGRsItem)] HRESULT Item ([in] long Index,[out, retval]ISpeechGrammarRule **Rule);
  [propget, id (DISPID_SGRs_NewEnum), restricted] HRESULT _NewEnum ([out, retval] IUnknown **EnumVARIANT);
  [propget, id (DISPID_SGRsDynamic)] HRESULT Dynamic ([out, retval] VARIANT_BOOL *Dynamic);
  [id (DISPID_SGRsAdd)] HRESULT Add ([in] BSTR RuleName,[in] SpeechRuleAttributes Attributes,[in, defaultvalue (0)] long RuleId,[out, retval] ISpeechGrammarRule **Rule);
  [id (DISPID_SGRsCommit)] HRESULT Commit (void);
  [id (DISPID_SGRsCommitAndSave)] HRESULT CommitAndSave ([out] BSTR *ErrorText,[out, retval] VARIANT *SaveStream);
};

[object, uuid (D4286F2C-EE67-45ae-B928-28d695362eda), dual, pointer_default (unique)]
interface ISpeechGrammarRuleState : IDispatch {
  [propget, id (DISPID_SGRSRule)] HRESULT Rule ([out, retval] ISpeechGrammarRule **Rule);
  [propget, id (DISPID_SGRSTransitions)] HRESULT Transitions ([out, retval] ISpeechGrammarRuleStateTransitions **Transitions);
  [id (DISPID_SGRSAddWordTransition)] HRESULT AddWordTransition ([in]ISpeechGrammarRuleState *DestState,[in]const BSTR Words, [in, defaultvalue (" ")]const BSTR Separators, [in, defaultvalue (SGLexical)]SpeechGrammarWordType Type, [in, defaultvalue ("")]const BSTR PropertyName, [in, defaultvalue (0)]long PropertyId, [in, defaultvalue (0)]VARIANT *PropertyValue, [in, defaultvalue (1)]float Weight);
  [id (DISPID_SGRSAddRuleTransition)] HRESULT AddRuleTransition ([in]ISpeechGrammarRuleState *DestinationState,[in]ISpeechGrammarRule *Rule,[in, defaultvalue ("")]const BSTR PropertyName,[in, defaultvalue (0)]long PropertyId,[in, defaultvalue (0)]VARIANT *PropertyValue,[in, defaultvalue (1)]float Weight);
  [id (DISPID_SGRSAddSpecialTransition)] HRESULT AddSpecialTransition ([in]ISpeechGrammarRuleState *DestinationState,[in]SpeechSpecialTransitionType Type,[in, defaultvalue ("")]const BSTR PropertyName,[in, defaultvalue (0)]long PropertyId,[in, defaultvalue (0)]VARIANT *PropertyValue,[in, defaultvalue (1)]float Weight);
};

[object, uuid (EABCE657-75bc-44a2-AA7F-C56476742963), dual, pointer_default (unique)]
interface ISpeechGrammarRuleStateTransitions : IDispatch {
  [propget, id (DISPID_SGRSTsCount)] HRESULT Count ([out, retval] long *Count);
  [id (DISPID_SGRSTsItem)] HRESULT Item ([in] long Index,[out, retval]ISpeechGrammarRuleStateTransition **Transition);
  [propget, restricted, id (DISPID_SGRSTs_NewEnum)] HRESULT _NewEnum ([out, retval] IUnknown **EnumVARIANT);
};

[object, uuid (CAFD1DB1-41d1-4a06-9863-E2E81DA17A9A), dual, pointer_default (unique)]
interface ISpeechGrammarRuleStateTransition : IDispatch {
  [propget, id (DISPID_SGRSTType)] HRESULT Type ([out, retval] SpeechGrammarRuleStateTransitionType *Type);
  [propget, id (DISPID_SGRSTText)] HRESULT Text ([out, retval] BSTR *Text);
  [propget, id (DISPID_SGRSTRule)] HRESULT Rule ([out, retval] ISpeechGrammarRule **Rule);
  [propget, id (DISPID_SGRSTWeight)] HRESULT Weight ([out, retval] VARIANT *Weight);
  [propget, id (DISPID_SGRSTPropertyName)] HRESULT PropertyName ([out, retval] BSTR *PropertyName);
  [propget, id (DISPID_SGRSTPropertyId)] HRESULT PropertyId ([out, retval] long *PropertyId);
  [propget, id (DISPID_SGRSTPropertyValue)] HRESULT PropertyValue ([out, retval] VARIANT *PropertyValue);
  [propget, id (DISPID_SGRSTNextState)] HRESULT NextState ([out, retval] ISpeechGrammarRuleState **NextState);
};

[object, uuid (3b9c7e7a-6eee-4ded-9092-11657279adbe), dual, pointer_default (unique)]
interface ISpeechTextSelectionInformation : IDispatch {
  [propput, id (DISPIDSPTSI_ActiveOffset)] HRESULT ActiveOffset ([in]long ActiveOffset);
  [propget, id (DISPIDSPTSI_ActiveOffset)] HRESULT ActiveOffset ([out, retval]long *ActiveOffset);
  [propput, id (DISPIDSPTSI_ActiveLength)] HRESULT ActiveLength ([in]long ActiveLength);
  [propget, id (DISPIDSPTSI_ActiveLength)] HRESULT ActiveLength ([out, retval]long *ActiveLength);
  [propput, id (DISPIDSPTSI_SelectionOffset)] HRESULT SelectionOffset ([in]long SelectionOffset);
  [propget, id (DISPIDSPTSI_SelectionOffset)] HRESULT SelectionOffset ([out, retval]long *SelectionOffset);
  [propput, id (DISPIDSPTSI_SelectionLength)] HRESULT SelectionLength ([in]long SelectionLength);
  [propget, id (DISPIDSPTSI_SelectionLength)] HRESULT SelectionLength ([out, retval]long *SelectionLength);
};

[object, uuid (ED2879CF-CED9-4ee6-A534-DE0191D5468D), dual, pointer_default (unique)]
interface ISpeechRecoResult : IDispatch {
  [propget, id (DISPID_SRRRecoContext)] HRESULT RecoContext ([out, retval]ISpeechRecoContext **RecoContext);
  [propget, id (DISPID_SRRTimes)] HRESULT Times ([out, retval]ISpeechRecoResultTimes **Times);
  [propputref, id (DISPID_SRRAudioFormat)] HRESULT AudioFormat ([in]ISpeechAudioFormat *Format);
  [propget, id (DISPID_SRRAudioFormat)] HRESULT AudioFormat ([out, retval]ISpeechAudioFormat **Format);
  [propget, id (DISPID_SRRPhraseInfo)] HRESULT PhraseInfo ([out, retval]ISpeechPhraseInfo **PhraseInfo);
  [id (DISPID_SRRAlternates)] HRESULT Alternates ([in] long RequestCount,[in, defaultvalue (0)] long StartElement,[in, defaultvalue (SPPR_ALL_ELEMENTS)] long Elements,[out, retval] ISpeechPhraseAlternates **Alternates);
  [id (DISPID_SRRAudio)] HRESULT Audio ([in, defaultvalue (0)] long StartElement,[in, defaultvalue (SPPR_ALL_ELEMENTS)] long Elements,[out, retval] ISpeechMemoryStream **Stream);
  [id (DISPID_SRRSpeakAudio)] HRESULT SpeakAudio ([in, defaultvalue (0)] long StartElement,[in, defaultvalue (SPPR_ALL_ELEMENTS)] long Elements,[in, defaultvalue (SPF_DEFAULT)] SpeechVoiceSpeakFlags Flags,[out, retval]long *StreamNumber);
  [id (DISPID_SRRSaveToMemory)] HRESULT SaveToMemory ([out, retval] VARIANT *ResultBlock);
  [id (DISPID_SRRDiscardResultInfo)] HRESULT DiscardResultInfo ([in]SpeechDiscardType ValueTypes);
};

#if _SAPI_BLD_ >= 0x53
[object, uuid (AAEC54AF-8f85-4924-944d-B79D39D72E19), dual, pointer_default (unique)]
interface ISpeechXMLRecoResult : ISpeechRecoResult {
  [id (DISPID_SRRGetXMLResult)] HRESULT GetXMLResult ([in] SPXMLRESULTOPTIONS Options,[out, retval] BSTR *pResult);
  [id (DISPID_SRRGetXMLErrorInfo)] HRESULT GetXMLErrorInfo ([out] long *LineNumber,[out]BSTR *ScriptLine,[out]BSTR *Source,[out]BSTR *Description,[out]long *ResultCode,[out, retval]VARIANT_BOOL *IsError);
};

[object, uuid (8e0a246d-D3C8-45de-8657-04290c458c3c), dual, pointer_default (unique)]
interface ISpeechRecoResult2: ISpeechRecoResult {
  [id (DISPID_SRRSetTextFeedback)] HRESULT SetTextFeedback ([in]BSTR Feedback,[in]VARIANT_BOOL WasSuccessful);
}

[object, uuid (6d60eb64-ACED-40a6-BBF3-4e557f71dee2), dual, hidden, pointer_default (unique)]
interface ISpeechRecoResultDispatch : IDispatch {
  [propget, id (DISPID_SRRRecoContext)] HRESULT RecoContext ([out, retval]ISpeechRecoContext **RecoContext);
  [propget, id (DISPID_SRRTimes)] HRESULT Times ([out, retval]ISpeechRecoResultTimes **Times);
  [propputref, id (DISPID_SRRAudioFormat)] HRESULT AudioFormat ([in]ISpeechAudioFormat *Format);
  [propget, id (DISPID_SRRAudioFormat)] HRESULT AudioFormat ([out, retval]ISpeechAudioFormat **Format);
  [propget, id (DISPID_SRRPhraseInfo)] HRESULT PhraseInfo ([out, retval]ISpeechPhraseInfo **PhraseInfo);
  [id (DISPID_SRRAlternates)] HRESULT Alternates ([in] long RequestCount,[in, defaultvalue (0)] long StartElement,[in, defaultvalue (SPPR_ALL_ELEMENTS)] long Elements,[out, retval] ISpeechPhraseAlternates **Alternates);
  [id (DISPID_SRRAudio)] HRESULT Audio ([in, defaultvalue (0)] long StartElement,[in, defaultvalue (SPPR_ALL_ELEMENTS)] long Elements,[out, retval] ISpeechMemoryStream **Stream);
  [id (DISPID_SRRSpeakAudio)] HRESULT SpeakAudio ([in, defaultvalue (0)] long StartElement,[in, defaultvalue (SPPR_ALL_ELEMENTS)] long Elements,[in, defaultvalue (SPF_DEFAULT)] SpeechVoiceSpeakFlags Flags,[out, retval]long *StreamNumber);
  [id (DISPID_SRRSaveToMemory)] HRESULT SaveToMemory ([out, retval] VARIANT *ResultBlock);
  [id (DISPID_SRRDiscardResultInfo)] HRESULT DiscardResultInfo ([in]SpeechDiscardType ValueTypes);
  [id (DISPID_SRRGetXMLResult)] HRESULT GetXMLResult ([in] SPXMLRESULTOPTIONS Options,[out, retval] BSTR *pResult);
  [id (DISPID_SRRGetXMLErrorInfo)] HRESULT GetXMLErrorInfo ([out] long *LineNumber,[out]BSTR *ScriptLine,[out]BSTR *Source,[out]BSTR *Description,[out]HRESULT *ResultCode,[out, retval]VARIANT_BOOL *IsError);
  [id (DISPID_SRRSetTextFeedback)] HRESULT SetTextFeedback ([in] BSTR Feedback,[in] VARIANT_BOOL WasSuccessful);
};
#endif

[object, uuid (3b151836-DF3A-4e0a-846c-D2ADC9334333), dual, pointer_default (unique)]
interface ISpeechPhraseInfoBuilder : IDispatch {
  [id (DISPID_SPPBRestorePhraseFromMemory)] HRESULT RestorePhraseFromMemory ([in] VARIANT *PhraseInMemory,[out, retval] ISpeechPhraseInfo **PhraseInfo);
};

[object, uuid (62b3b8fb-F6E7-41be-BDCB-056b1c29efc0), dual, pointer_default (unique)]
interface ISpeechRecoResultTimes : IDispatch {
  [propget, id (DISPID_SRRTStreamTime)] HRESULT StreamTime ([out, retval]VARIANT *Time);
  [propget, id (DISPID_SRRTLength)] HRESULT Length ([out, retval]VARIANT *Length);
  [propget, id (DISPID_SRRTTickCount)] HRESULT TickCount ([out, retval]long *TickCount);
  [propget, id (DISPID_SRRTOffsetFromStart)] HRESULT OffsetFromStart ([out, retval]VARIANT *OffsetFromStart);
};

[object, uuid (27864a2a-2b9f-4cb8-92d3-0d2722fd1e73), dual, pointer_default (unique)]
interface ISpeechPhraseAlternate : IDispatch {
  [propget, id (DISPID_SPARecoResult)] HRESULT RecoResult ([out, retval]ISpeechRecoResult **RecoResult);
  [propget, id (DISPID_SPAStartElementInResult)] HRESULT StartElementInResult ([out, retval]long *StartElement);
  [propget, id (DISPID_SPANumberOfElementsInResult)] HRESULT NumberOfElementsInResult ([out, retval]long *NumberOfElements);
  [propget, id (DISPID_SPAPhraseInfo)] HRESULT PhraseInfo ([out, retval]ISpeechPhraseInfo **PhraseInfo);
  [id (DISPID_SPACommit)] HRESULT Commit (void);
};

[object, uuid (B238B6D5-F276-4c3d-A6C1-2974801c3cc2), dual, pointer_default (unique)]
interface ISpeechPhraseAlternates : IDispatch {
  [propget, id (DISPID_SPAsCount)] HRESULT Count ([out, retval] long *Count);
  [id (DISPID_SPAsItem)] HRESULT Item ([in] long Index,[out, retval]ISpeechPhraseAlternate **PhraseAlternate);
  [propget, restricted, id (DISPID_SPAs_NewEnum)] HRESULT _NewEnum ([out, retval] IUnknown **EnumVARIANT);
};

[object, uuid (961559cf-4e67-4662-8bf0-D93F1FCD61B3), dual, pointer_default (unique)]
interface ISpeechPhraseInfo : IDispatch {
  [propget, id (DISPID_SPILanguageId)] HRESULT LanguageId ([out, retval]long *LanguageId);
  [propget, id (DISPID_SPIGrammarId)] HRESULT GrammarId ([out, retval]VARIANT *GrammarId);
  [propget, id (DISPID_SPIStartTime)] HRESULT StartTime ([out, retval]VARIANT *StartTime);
  [propget, id (DISPID_SPIAudioStreamPosition)] HRESULT AudioStreamPosition ([out, retval]VARIANT *AudioStreamPosition);
  [propget, id (DISPID_SPIAudioSizeBytes)] HRESULT AudioSizeBytes ([out, retval]long *pAudioSizeBytes);
  [propget, id (DISPID_SPIRetainedSizeBytes)] HRESULT RetainedSizeBytes ([out, retval]long *RetainedSizeBytes);
  [propget, id (DISPID_SPIAudioSizeTime)] HRESULT AudioSizeTime ([out, retval]long *AudioSizeTime);
  [propget, id (DISPID_SPIRule)] HRESULT Rule ([out, retval]ISpeechPhraseRule **Rule);
  [propget, id (DISPID_SPIProperties)] HRESULT Properties ([out, retval]ISpeechPhraseProperties **Properties);
  [propget, id (DISPID_SPIElements)] HRESULT Elements ([out, retval]ISpeechPhraseElements **Elements);
  [propget, id (DISPID_SPIReplacements)] HRESULT Replacements ([out, retval]ISpeechPhraseReplacements **Replacements);
  [propget, id (DISPID_SPIEngineId)] HRESULT EngineId ([out, retval]BSTR *EngineIdGuid);
  [propget, id (DISPID_SPIEnginePrivateData)] HRESULT EnginePrivateData ([out, retval]VARIANT *PrivateData);
  [id (DISPID_SPISaveToMemory)] HRESULT SaveToMemory ([out, retval]VARIANT *PhraseBlock);
  [id (DISPID_SPIGetText)] HRESULT GetText ([in, defaultvalue (0)] long StartElement,[in, defaultvalue (SPPR_ALL_ELEMENTS)] long Elements,[in, defaultvalue (-1)] VARIANT_BOOL UseReplacements,[out, retval]BSTR *Text);
  [id (DISPID_SPIGetDisplayAttributes)] HRESULT GetDisplayAttributes ([in, defaultvalue (0)] long StartElement,[in, defaultvalue (SPPR_ALL_ELEMENTS)] long Elements,[in, defaultvalue (-1)] VARIANT_BOOL UseReplacements,[out, retval]SpeechDisplayAttributes *DisplayAttributes);
};

[object, uuid (E6176F96-E373-4801-B223-3b62c068c0b4), dual, pointer_default (unique)]
interface ISpeechPhraseElement : IDispatch {
  [propget, id (DISPID_SPEAudioTimeOffset)] HRESULT AudioTimeOffset ([out, retval]long *AudioTimeOffset);
  [propget, id (DISPID_SPEAudioSizeTime)] HRESULT AudioSizeTime ([out, retval]long *AudioSizeTime);
  [propget, id (DISPID_SPEAudioStreamOffset)] HRESULT AudioStreamOffset ([out, retval]long *AudioStreamOffset);
  [propget, id (DISPID_SPEAudioSizeBytes)] HRESULT AudioSizeBytes ([out, retval]long *AudioSizeBytes);
  [propget, id (DISPID_SPERetainedStreamOffset)] HRESULT RetainedStreamOffset ([out, retval]long *RetainedStreamOffset);
  [propget, id (DISPID_SPERetainedSizeBytes)] HRESULT RetainedSizeBytes ([out, retval]long *RetainedSizeBytes);
  [propget, id (DISPID_SPEDisplayText)] HRESULT DisplayText ([out, retval]BSTR *DisplayText);
  [propget, id (DISPID_SPELexicalForm)] HRESULT LexicalForm ([out, retval]BSTR *LexicalForm);
  [propget, id (DISPID_SPEPronunciation)] HRESULT Pronunciation ([out, retval]VARIANT *Pronunciation);
  [propget, id (DISPID_SPEDisplayAttributes)] HRESULT DisplayAttributes ([out, retval]SpeechDisplayAttributes *DisplayAttributes);
  [propget, id (DISPID_SPERequiredConfidence)] HRESULT RequiredConfidence ([out, retval]SpeechEngineConfidence *RequiredConfidence);
  [propget, id (DISPID_SPEActualConfidence)] HRESULT ActualConfidence ([out, retval]SpeechEngineConfidence *ActualConfidence);
  [propget, id (DISPID_SPEEngineConfidence)] HRESULT EngineConfidence ([out, retval]float *EngineConfidence);
};

[object, uuid (0626b328-3478-467d-A0B3-D0853B93DDA3), dual, pointer_default (unique)]
interface ISpeechPhraseElements : IDispatch {
  [propget, id (DISPID_SPEsCount)] HRESULT Count ([out, retval] long *Count);
  [id (DISPID_SPEsItem)] HRESULT Item ([in] long Index,[out, retval]ISpeechPhraseElement **Element);
  [propget, restricted, id (DISPID_SPEs_NewEnum)] HRESULT _NewEnum ([out, retval] IUnknown **EnumVARIANT);
};

[object, uuid (2890a410-53a7-4fb5-94ec-06d4998e3d02), dual, pointer_default (unique)]
interface ISpeechPhraseReplacement : IDispatch {
  [propget, id (DISPID_SPRDisplayAttributes)] HRESULT DisplayAttributes ([out, retval]SpeechDisplayAttributes *DisplayAttributes);
  [propget, id (DISPID_SPRText)] HRESULT Text ([out, retval]BSTR *Text);
  [propget, id (DISPID_SPRFirstElement)] HRESULT FirstElement ([out, retval]long *FirstElement);
  [propget, id (DISPID_SPRNumberOfElements)] HRESULT NumberOfElements ([out, retval]long *NumberOfElements);
};

[object, uuid (38bc662f-2257-4525-959e-2069d2596c05), dual, pointer_default (unique)]
interface ISpeechPhraseReplacements : IDispatch {
  [propget, id (DISPID_SPRsCount)] HRESULT Count ([out, retval] long *Count);
  [id (DISPID_SPRsItem)] HRESULT Item ([in] long Index,[out, retval]ISpeechPhraseReplacement **Reps);
  [propget, restricted, id (DISPID_SPRs_NewEnum)] HRESULT _NewEnum ([out, retval] IUnknown **EnumVARIANT);
};

[object, uuid (CE563D48-961e-4732-A2E1-378a42b430be), dual, pointer_default (unique)]
interface ISpeechPhraseProperty : IDispatch {
  [propget, id (DISPID_SPPName)] HRESULT Name ([out, retval]BSTR *Name);
  [propget, id (DISPID_SPPId)] HRESULT Id ([out, retval]long *Id);
  [propget, id (DISPID_SPPValue)] HRESULT Value ([out, retval]VARIANT *Value);
  [propget, id (DISPID_SPPFirstElement)] HRESULT FirstElement ([out, retval]long *FirstElement);
  [propget, id (DISPID_SPPNumberOfElements)] HRESULT NumberOfElements ([out, retval]long *NumberOfElements);
  [propget, id (DISPID_SPPEngineConfidence)] HRESULT EngineConfidence ([out, retval]float *Confidence);
  [propget, id (DISPID_SPPConfidence)] HRESULT Confidence ([out, retval]SpeechEngineConfidence *Confidence);
  [propget, id (DISPID_SPPParent)] HRESULT Parent ([out, retval]ISpeechPhraseProperty **ParentProperty);
  [propget, id (DISPID_SPPChildren)] HRESULT Children ([out, retval]ISpeechPhraseProperties **Children);
};

[object, uuid (08166b47-102e-4b23-A599-BDB98DBFD1F4), dual, pointer_default (unique)]
interface ISpeechPhraseProperties : IDispatch {
  [propget, id (DISPID_SPPsCount)] HRESULT Count ([out, retval] long *Count);
  [id (DISPID_SPPsItem)] HRESULT Item ([in] long Index,[out, retval]ISpeechPhraseProperty **Property);
  [propget, id (DISPID_SPPs_NewEnum), restricted] HRESULT _NewEnum ([out, retval] IUnknown **EnumVARIANT);
};

[object, uuid (A7BFE112-A4A0-48d9-B602-C313843F6964), dual, pointer_default (unique)]
interface ISpeechPhraseRule : IDispatch {
  [propget, id (DISPID_SPRuleName)] HRESULT Name ([out, retval]BSTR *Name);
  [propget, id (DISPID_SPRuleId)] HRESULT Id ([out, retval]long *Id);
  [propget, id (DISPID_SPRuleFirstElement)] HRESULT FirstElement ([out, retval]long *FirstElement);
  [propget, id (DISPID_SPRuleNumberOfElements)] HRESULT NumberOfElements ([out, retval]long *NumberOfElements);
  [propget, id (DISPID_SPRuleParent)] HRESULT Parent ([out, retval]ISpeechPhraseRule **Parent);
  [propget, id (DISPID_SPRuleChildren)] HRESULT Children ([out, retval]ISpeechPhraseRules **Children);
  [propget, id (DISPID_SPRuleConfidence)] HRESULT Confidence ([out, retval]SpeechEngineConfidence *ActualConfidence);
  [propget, id (DISPID_SPRuleEngineConfidence)] HRESULT EngineConfidence ([out, retval]float *EngineConfidence);
};

[object, uuid (9047d593-01dd-4b72-81a3-E4A0CA69F407), dual, pointer_default (unique)]
interface ISpeechPhraseRules : IDispatch {
  [propget, id (DISPID_SPRulesCount)] HRESULT Count ([out, retval] long *Count);
  [id (DISPID_SPRulesItem)] HRESULT Item ([in] long Index,[out, retval]ISpeechPhraseRule **Rule);
  [propget, restricted, id (DISPID_SPRules_NewEnum)] HRESULT _NewEnum ([out, retval] IUnknown **EnumVARIANT);
};

[object, uuid (8d199862-415e-47d5-AC4F-FAA608B424E6), dual, pointer_default (unique)]
interface ISpeechLexiconWords : IDispatch {
  [id (DISPID_SLWsCount), propget] HRESULT Count ([out, retval] long *Count);
  [id (DISPID_VALUE)] HRESULT Item ([in] long Index,[out, retval]ISpeechLexiconWord **Word);
  [id (DISPID_NEWENUM), propget, restricted] HRESULT _NewEnum ([out, retval] IUnknown **EnumVARIANT);
};

[object, uuid (3da7627a-C7AE-4b23-8708-638c50362c25), dual, pointer_default (unique)]
interface ISpeechLexicon : IDispatch {
  [id (DISPID_SLGenerationId), propget, hidden] HRESULT GenerationId ([out, retval]long *GenerationId);
  [id (DISPID_SLGetWords)] HRESULT GetWords ([in, defaultvalue (eLEXTYPE_USER | eLEXTYPE_APP)]SpeechLexiconType Flags,[out, defaultvalue (NULL)]long *GenerationID,[out, retval]ISpeechLexiconWords **Words);
  [id (DISPID_SLAddPronunciation)] HRESULT AddPronunciation ([in]BSTR bstrWord,[in]SpeechLanguageId LangId,[in, defaultvalue (SPSUnknown)]SpeechPartOfSpeech PartOfSpeech,[in, defaultvalue ("")]BSTR bstrPronunciation);
  [hidden, id (DISPID_SLAddPronunciationByPhoneIds)] HRESULT AddPronunciationByPhoneIds ([in]BSTR bstrWord,[in]SpeechLanguageId LangId,[in, defaultvalue (SPSUnknown)]SpeechPartOfSpeech PartOfSpeech,[in, defaultvalue (NULL)]VARIANT *PhoneIds);
  [id (DISPID_SLRemovePronunciation)] HRESULT RemovePronunciation ([in]BSTR bstrWord,[in]SpeechLanguageId LangId,[in, defaultvalue (SPSUnknown)]SpeechPartOfSpeech PartOfSpeech,[in, defaultvalue ("")]BSTR bstrPronunciation);
  [id (DISPID_SLRemovePronunciationByPhoneIds), hidden] HRESULT RemovePronunciationByPhoneIds ([in]BSTR bstrWord,[in]SpeechLanguageId LangId,[in, defaultvalue (SPSUnknown)]SpeechPartOfSpeech PartOfSpeech,[in, defaultvalue (NULL)]VARIANT *PhoneIds);
  [id (DISPID_SLGetPronunciations)] HRESULT GetPronunciations ([in]BSTR bstrWord,[in, defaultvalue (0)]SpeechLanguageId LangId,[in, defaultvalue (eLEXTYPE_USER | eLEXTYPE_APP)]SpeechLexiconType TypeFlags,[out, retval]ISpeechLexiconPronunciations **ppPronunciations);
  [id (DISPID_SLGetGenerationChange), hidden] HRESULT GetGenerationChange ([in, out]long *GenerationID,[out, retval]ISpeechLexiconWords **ppWords);
};

[object, uuid (4e5b933c-C9BE-48ed-8842-1ee51bb1d4ff), dual, pointer_default (unique)]
interface ISpeechLexiconWord : IDispatch {
  [id (DISPID_SLWLangId), propget] HRESULT LangId ([out, retval]SpeechLanguageId *LangId);
  [id (DISPID_SLWType), propget] HRESULT Type ([out, retval]SpeechWordType *WordType);
  [id (DISPID_SLWWord), propget] HRESULT Word ([out, retval]BSTR *Word);
  [id (DISPID_SLWPronunciations), propget] HRESULT Pronunciations ([out, retval]ISpeechLexiconPronunciations **Pronunciations);
};

[object, uuid (72829128-5682-4704-A0D4-3e2bb6f2ead3), dual, pointer_default (unique)]
interface ISpeechLexiconPronunciations : IDispatch {
  [id (DISPID_SLPsCount), propget] HRESULT Count ([out, retval] long *Count);
  [id (DISPID_VALUE)] HRESULT Item ([in] long Index,[out, retval]ISpeechLexiconPronunciation **Pronunciation);
  [id (DISPID_NEWENUM), propget, restricted] HRESULT _NewEnum ([out, retval] IUnknown **EnumVARIANT);
};

[object, uuid (95252c5d-9e43-4f4a-9899-48ee73352f9f), dual, pointer_default (unique)]
interface ISpeechLexiconPronunciation : IDispatch {
  [id (DISPID_SLPType), propget] HRESULT Type ([out, retval]SpeechLexiconType *LexiconType);
  [id (DISPID_SLPLangId), propget] HRESULT LangId ([out, retval]SpeechLanguageId *LangId);
  [id (DISPID_SLPPartOfSpeech), propget] HRESULT PartOfSpeech ([out, retval]SpeechPartOfSpeech *PartOfSpeech);
  [id (DISPID_SLPPhoneIds), propget] HRESULT PhoneIds ([out, retval]VARIANT *PhoneIds);
  [id (DISPID_SLPSymbolic), propget] HRESULT Symbolic ([out, retval]BSTR *Symbolic);
};

[object, uuid (C3E4F353-433f-43d6-89a1-6a62a7054c3d), dual, pointer_default (unique)]
interface ISpeechPhoneConverter : IDispatch {
  [propget, id (DISPID_SPCLangId)] HRESULT LanguageId ([out, retval]SpeechLanguageId *LanguageId);
  [propput, id (DISPID_SPCLangId)] HRESULT LanguageId ([in]SpeechLanguageId LanguageId);
  [id (DISPID_SPCPhoneToId)] HRESULT PhoneToId ([in]const BSTR Phonemes,[out, retval]VARIANT *IdArray);
  [id (DISPID_SPCIdToPhone)] HRESULT IdToPhone ([in]const VARIANT IdArray,[out, retval]BSTR *Phonemes);
}

  [uuid (E2AE5372-5d40-11d2-960e-00c04f8ee628), hidden]
  coclass SpNotifyTranslator {
    interface ISpNotifyTranslator;
  }
  
  [uuid (A910187F-0c7a-45ac-92cc-59edafb77b53)]
  coclass SpObjectTokenCategory {
    [default] interface ISpeechObjectTokenCategory;
    interface ISpObjectTokenCategory;
  }
  
  [uuid (EF411752-3736-4cb4-9c8c-8ef4ccb58efe)]
  coclass SpObjectToken {
    [default] interface ISpeechObjectToken;
    interface ISpObjectToken;
  }
  
  [uuid (96749373-3391-11d2-9ee3-00c04f797396), hidden]
  coclass SpResourceManager {
    [default] interface ISpResourceManager;
  };
  
  [uuid (7013943a-E2EC-11d2-A086-00c04f8ef9b5), hidden]
  coclass SpStreamFormatConverter {
    [default] interface ISpStreamFormatConverter;
  };
  
  [uuid (AB1890A0-E91F-11d2-BB91-00c04f8ee6c0), hidden]
  coclass SpMMAudioEnum {
    interface IEnumSpObjectTokens;
  };
  
  [uuid (CF3D2E50-53f2-11d2-960c-00c04f8ee628)]
  coclass SpMMAudioIn {
    [default] interface ISpeechMMSysAudio;
    interface ISpEventSource;
    interface ISpEventSink;
    interface ISpObjectWithToken;
    interface ISpMMSysAudio;
  };
  
  [uuid (A8C680EB-3d32-11d2-9ee7-00c04f797396)]
  coclass SpMMAudioOut {
    [default] interface ISpeechMMSysAudio;
    interface ISpEventSource;
    interface ISpEventSink;
    interface ISpObjectWithToken;
    interface ISpMMSysAudio;
  };
  
  [uuid (715d9c59-4442-11d2-9605-00c04f8ee628), hidden]
  coclass SpStream {
    interface ISpStream;
  };
  
  [uuid (96749377-3391-11d2-9ee3-00c04f797396)]
  coclass SpVoice {
    [default] interface ISpeechVoice;
    interface ISpVoice;
#if _SAPI_BLD_ >= 0x53
    interface ISpPhoneticAlphabetSelection;
#endif
    [default, source] dispinterface _ISpeechVoiceEvents;
  };
  [uuid (47206204-5eca-11d2-960f-00c04f8ee628)]
  coclass SpSharedRecoContext {
    [default] interface ISpeechRecoContext;
    interface ISpRecoContext;
#if _SAPI_BLD_ >= 0x53
    interface ISpRecoContext2;
    interface ISpPhoneticAlphabetSelection;
#endif
    [default, source] dispinterface _ISpeechRecoContextEvents;
  };

  [uuid (41b89b6b-9399-11d2-9623-00c04f8ee628)]
  coclass SpInprocRecognizer {
    [default] interface ISpeechRecognizer;
    interface ISpRecognizer;
#if _SAPI_BLD_ >= 0x053
    interface ISpRecognizer2;
#if _SAPI_BLD_ >= 0x54
    interface ISpRecognizer3;
#endif
    interface ISpSerializeState;
#endif
  };
  
  [uuid (3bee4890-4fe9-4a37-8c1e-5e7e12791c1f)]
  coclass SpSharedRecognizer {
    [default] interface ISpeechRecognizer;
    interface ISpRecognizer;
#if _SAPI_BLD_ >= 0x53
    interface ISpRecognizer2;
#if _SAPI_BLD_ >= 0x054
    interface ISpRecognizer3;
#endif
    interface ISpSerializeState;
#endif
  };
  
  [uuid (0655e396-25d0-11d3-9c26-00c04f8ef87c)]
  coclass SpLexicon {
    [default] interface ISpeechLexicon;
    interface ISpLexicon;
#if _SAPI_BLD_ >= 0x53
    interface ISpPhoneticAlphabetSelection;
#endif
  };
  
  [uuid (C9E37C15-DF92-4727-85d6-72e5eeb6995a)]
  coclass SpUnCompressedLexicon {
    [default] interface ISpeechLexicon;
    interface ISpLexicon;
    interface ISpObjectWithToken;
#if _SAPI_BLD_ >= 0x53
    interface ISpPhoneticAlphabetSelection;
#endif
  };
  
  [uuid (90903716-2f42-11d3-9c26-00c04f8ef87c), hidden]
  coclass SpCompressedLexicon {
    [default] interface ISpLexicon;
    interface ISpObjectWithToken;
  };

#if _SAPI_BLD_ >= 0x053
  [uuid (0d722f1a-9fcf-4e62-96d8-6df8f01a26aa)]
  coclass SpShortcut {
    interface ISpShortcut;
    interface ISpObjectWithToken;
  };
#endif

  [uuid (9185f743-1143-4c28-86b5-BFF14F20E5C8)]
  coclass SpPhoneConverter {
    [default] interface ISpeechPhoneConverter;
    interface ISpPhoneConverter;
#if _SAPI_BLD_ >= 0x53
    interface ISpPhoneticAlphabetSelection;
#endif
  };

#if _SAPI_BLD_ >= 0x53
  [uuid (4f414126-DFE3-4629-99ee-797978317ead)]
  coclass SpPhoneticAlphabetConverter {
    interface ISpPhoneticAlphabetConverter;
  };
#endif

  [uuid (455f24e9-7396-4a16-9715-7c0fdbe3efe3), hidden]
  coclass SpNullPhoneConverter {
    [default] interface ISpPhoneConverter;
  };
  
  [uuid (0f92030a-CBFD-4ab8-A164-FF5985547FF6)]
  coclass SpTextSelectionInformation {
    [default] interface ISpeechTextSelectionInformation;
  };
  
  [uuid (C23FC28D-C55F-4720-8b32-91f73c2bd5d1)]
  coclass SpPhraseInfoBuilder {
    [default] interface ISpeechPhraseInfoBuilder;
  };
  
  [uuid (9ef96870-E160-4792-820d-48cf0649e4ec)]
  coclass SpAudioFormat {
    [default] interface ISpeechAudioFormat;
  };
  
  [uuid (C79A574C-63be-44b9-801f-283f87f898be)]
  coclass SpWaveFormatEx {
    [default] interface ISpeechWaveFormatEx;
  };
  
  [uuid (73ad6842-ACE0-45e8-A4DD-8795881a2c2a)]
  coclass SpInProcRecoContext {
    [default] interface ISpeechRecoContext;
    interface ISpRecoContext;
#if _SAPI_BLD_ >= 0x53
    interface ISpRecoContext2;
    interface ISpPhoneticAlphabetSelection;
#endif
    [default, source] dispinterface _ISpeechRecoContextEvents;
  };
  
  [uuid (8dbef13f-1948-4aa8-8cf0-048eebed95d8)]
  coclass SpCustomStream {
    [default] interface ISpeechCustomStream;
    interface ISpStream;
  };
  
  [uuid (947812b3-2ae1-4644-BA86-9e90ded7ec91)]
  coclass SpFileStream {
    [default] interface ISpeechFileStream;
    interface ISpStream;
  };
  
  [uuid (5fb7ef7d-DFF4-468a-B6B7-2fcbd188f994)]
  coclass SpMemoryStream {
    [default] interface ISpeechMemoryStream;
    interface ISpStream;
  };

#if _SAPI_BLD_ >= 0x53
  interface ISpXMLRecoResult;
  interface ISpRecoGrammar2;
  interface ISpeechResourceLoader;
#endif
}
