[PATCH] include: Add SpSharedRecognizer coclass and support interfaces

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Tue Oct 15 23:06:38 CDT 2019


Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
 include/sapi.idl | 835 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 835 insertions(+)

diff --git a/include/sapi.idl b/include/sapi.idl
index e13843227e..d6f904f29a 100644
--- a/include/sapi.idl
+++ b/include/sapi.idl
@@ -27,6 +27,73 @@ import "ocidl.idl";
 #define vi_progid(str)
 #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("#else")
+cpp_quote("#include <mmsystem.h>")
+cpp_quote("#endif")
+
+cpp_quote("#if defined(__cplusplus)")
+cpp_quote("interface ISpNotifyCallback")
+cpp_quote("{")
+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;
+typedef void * SPSTATEHANDLE;
+cpp_quote("#endif")
+
+typedef [restricted, hidden] struct SPEVENT
+{
+    WORD      eEventId;
+    WORD      elParamType;
+    ULONG     ulStreamNum;
+    ULONGLONG ullAudioStreamOffset;
+    WPARAM    wParam;
+    LPARAM    lParam;
+} SPEVENT;
+
+cpp_quote("typedef void __stdcall SPNOTIFYCALLBACK(WPARAM wParam, LPARAM lParam);")
+cpp_quote("DECLARE_HANDLE(SPSTATEHANDLE);")
+
+const ULONG SP_MAX_LANGIDS = 20;
+
+typedef [restricted, hidden] struct SPEVENTSOURCEINFO
+{
+    ULONGLONG   ullEventInterest;
+    ULONGLONG   ullQueuedInterest;
+    ULONG       ulCount;
+} SPEVENTSOURCEINFO;
+
+typedef [hidden] enum SPGRAMMARWORDTYPE
+{
+    SPWT_DISPLAY,
+    SPWT_LEXICAL,
+    SPWT_PRONUNCIATION,
+    SPWT_LEXICAL_NO_SPECIAL_CHARS
+} SPGRAMMARWORDTYPE;
+
+typedef [hidden] struct tagSPPROPERTYINFO
+{
+    const WCHAR *pszName;
+    ULONG        ulId;
+    const WCHAR *pszValue;
+    VARIANT      vValue;
+} SPPROPERTYINFO;
+
 typedef [hidden] enum SPDATAKEYLOCATION
 {
     SPDKL_DefaultLocation = 0,
@@ -35,6 +102,387 @@ typedef [hidden] enum SPDATAKEYLOCATION
     SPDKL_CurrentConfig   = 5
 } SPDATAKEYLOCATION;
 
+typedef [hidden] enum SPLOADOPTIONS
+{
+    SPLO_STATIC,
+    SPLO_DYNAMIC
+} SPLOADOPTIONS;
+
+typedef [hidden] enum SPRULESTATE
+{
+    SPRS_INACTIVE               = 0,
+    SPRS_ACTIVE                 = 1,
+    SPRS_ACTIVE_WITH_AUTO_PAUSE = 3,
+    SPRS_ACTIVE_USER_DELIMITED  = 4
+} SPRULESTATE;
+
+typedef [hidden] enum SPGRAMMARSTATE
+{
+    SPGS_DISABLED  = 0,
+    SPGS_ENABLED   = 1,
+    SPGS_EXCLUSIVE = 3
+} SPGRAMMARSTATE;
+
+typedef [hidden] struct SPBINARYGRAMMAR
+{
+    ULONG ulTotalSerializedSize;
+} SPBINARYGRAMMAR;
+
+typedef [hidden] struct tagSPTEXTSELECTIONINFO
+{
+    ULONG ulStartActiveOffset;
+    ULONG cchActiveChars;
+    ULONG ulStartSelection;
+    ULONG cchSelection;
+} SPTEXTSELECTIONINFO;
+
+typedef [hidden] enum SPWORDPRONOUNCEABLE
+{
+    SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE,
+    SPWP_UNKNOWN_WORD_PRONOUNCEABLE,
+    SPWP_KNOWN_WORD_PRONOUNCEABLE
+} SPWORDPRONOUNCEABLE;
+
+typedef [hidden] enum SPINTERFERENCE
+{
+    SPINTERFERENCE_NONE,
+    SPINTERFERENCE_NOISE,
+    SPINTERFERENCE_NOSIGNAL,
+    SPINTERFERENCE_TOOLOUD,
+    SPINTERFERENCE_TOOQUIET,
+    SPINTERFERENCE_TOOFAST,
+    SPINTERFERENCE_TOOSLOW
+} SPINTERFERENCE;
+
+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 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,
+    SPEI_SR_RETAINEDAUDIO       = 51,
+    SPEI_SR_PRIVATE             = 52,
+    SPEI_ACTIVE_CATEGORY_CHANGED = 53,
+
+    SPEI_MIN_SR              = 34,
+    SPEI_MAX_SR              = 55,
+
+    SPEI_RESERVED1           = 30,
+    SPEI_RESERVED2           = 33,
+    SPEI_RESERVED3           = 63
+} SPEVENTENUM;
+
+typedef [hidden] enum SPCONTEXTSTATE
+{
+    SPCS_DISABLED = 0,
+    SPCS_ENABLED  = 1,
+} SPCONTEXTSTATE;
+
+typedef [hidden] enum SPVPRIORITY
+{
+    SPVPRI_NORMAL = 0,
+    SPVPRI_ALERT  = 1,
+    SPVPRI_OVER   = 2
+} SPVPRIORITY;
+
+typedef [hidden] enum SPRECOSTATE
+{
+    SPRST_INACTIVE,
+    SPRST_ACTIVE,
+    SPRST_ACTIVE_ALWAYS,
+    SPRST_INACTIVE_WITH_PURGE,
+    SPRST_NUM_STATES
+} SPRECOSTATE;
+
+typedef [hidden] enum SPWAVEFORMATTYPE
+{
+    SPWF_INPUT,
+    SPWF_SRENGINE
+} SPSTREAMFORMATTYPE;
+
+typedef [restricted, hidden] struct SPRECOCONTEXTSTATUS
+{
+    SPINTERFERENCE  eInterference;
+    WCHAR           szRequestTypeOfUI[255];
+    DWORD           dwReserved1;
+    DWORD           dwReserved2;
+} SPRECOCONTEXTSTATUS;
+
+typedef [hidden] enum SPAUDIOOPTIONS
+{
+    SPAO_NONE,
+    SPAO_RETAIN_AUDIO
+} SPAUDIOOPTIONS;
+
+typedef [hidden] struct SPSERIALIZEDRESULT
+{
+    ULONG ulSerializedSize;
+} SPSERIALIZEDRESULT;
+
+typedef [hidden] enum SPDISPLYATTRIBUTES
+{
+    SPAF_ONE_TRAILING_SPACE     = 0x02,
+    SPAF_TWO_TRAILING_SPACES    = 0x04,
+    SPAF_CONSUME_LEADING_SPACES = 0x08,
+    SPAF_ALL                    = 0x0f
+} SPDISPLAYATTRIBUTES;
+
+typedef [hidden] enum SPBOOKMARKOPTIONS
+{
+    SPBO_NONE,
+    SPBO_PAUSE
+} SPBOOKMARKOPTIONS;
+
+typedef [hidden] enum _SPAUDIOSTATE
+{
+    SPAS_CLOSED,
+    SPAS_STOP,
+    SPAS_PAUSE,
+    SPAS_RUN
+} SPAUDIOSTATE;
+
+typedef [hidden] enum SPRUNSTATE
+{
+    SPRS_DONE        = (1L << 0),
+    SPRS_IS_SPEAKING = (1L << 1)
+} SPRUNSTATE;
+
+typedef [hidden] enum SPEAKFLAGS
+{
+    SPF_DEFAULT            = 0,
+    SPF_ASYNC              = (1L << 0),
+    SPF_PURGEBEFORESPEAK   = (1L << 1),
+    SPF_IS_FILENAME        = (1L << 2),
+    SPF_IS_XML             = (1L << 3),
+    SPF_IS_NOT_XML         = (1L << 4),
+    SPF_PERSIST_XML        = (1L << 5),
+    SPF_NLP_SPEAK_PUNC     = (1L << 6),
+    SPF_PARSE_SAPI         = (1L << 7),
+    SPF_PARSE_SSML         = (1L << 8),
+    SPF_PARSE_AUTODETECT   = 0,
+    SPF_NLP_MASK           = (SPF_NLP_SPEAK_PUNC),
+    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),
+    SPF_UNUSED_FLAGS       = ~(SPF_VOICE_MASK)
+} SPEAKFLAGS;
+
+typedef [hidden] enum SPCFGRULEATTRIBUTES
+{
+    SPRAF_TopLevel      = (1 << 0),
+    SPRAF_Active        = (1 << 1),
+    SPRAF_Export        = (1 << 2),
+    SPRAF_Import        = (1 << 3),
+    SPRAF_Interpreter   = (1 << 4),
+    SPRAF_Dynamic       = (1 << 5),
+    SPRAF_Root          = (1 << 6),
+    SPRAF_AutoPause     = (1 << 16),
+    SPRAF_UserDelimited = (1 << 17)
+} SPCFGRULEATTRIBUTES;
+
+typedef [hidden] enum SPPHRASERNG
+{
+    SPPR_ALL_ELEMENTS = -1
+} SPPHRASERNG;
+
+typedef [hidden] enum SPVALUETYPE
+{
+    SPDF_PROPERTY      = 0x00000001,
+    SPDF_REPLACEMENT   = 0x00000002,
+    SPDF_RULE          = 0x00000004,
+    SPDF_DISPLAYTEXT   = 0x00000008,
+    SPDF_LEXICALFORM   = 0x00000010,
+    SPDF_PRONUNCIATION = 0x00000020,
+    SPDF_AUDIO         = 0x00000040,
+    SPDF_ALTERNATES    = 0x00000080,
+    SPDF_ALL           = 0x000000ff
+} SPVALUETYPE;
+
+typedef unsigned short SPPHONEID;
+
+typedef [restricted, hidden] struct SPPHRASEELEMENT
+{
+    ULONG           ulAudioTimeOffset;
+    ULONG           ulAudioSizeTime;
+    ULONG           ulAudioStreamOffset;
+    ULONG           ulAudioSizeBytes;
+    ULONG           ulRetainedStreamOffset;
+    ULONG           ulRetainedSizeBytes;
+    const WCHAR     *pszDisplayText;
+    const WCHAR     *pszLexicalForm;
+    const SPPHONEID *pszPronunciation;
+    BYTE            bDisplayAttributes;
+    signed char     RequiredConfidence;
+    signed char     ActualConfidence;
+    BYTE            Reserved;
+    float           SREngineConfidence;
+} SPPHRASEELEMENT;
+
+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 [restricted, hidden] struct SPAUDIOSTATUS
+{
+    long         cbFreeBuffSpace;
+    ULONG        cbNonBlockingIO;
+    SPAUDIOSTATE State;
+    ULONGLONG    CurSeekPos;
+    ULONGLONG    CurDevicePos;
+    DWORD        dwAudioLevel;
+    DWORD        dwReserved2;
+} SPAUDIOSTATUS;
+
+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 [restricted, hidden] struct SPPHRASERULE SPPHRASERULE;
+
+struct SPPHRASERULE
+{
+    LPCWSTR                 pszName;
+    ULONG                   ulId;
+    ULONG                   ulFirstElement;
+    ULONG                   ulCountOfElements;
+    const SPPHRASERULE*     pNextSibling;
+    const SPPHRASERULE*     pFirstChild;
+    float                   SREngineConfidence;
+    signed char             Confidence;
+};
+
+typedef [restricted, hidden] struct SPPHRASEPROPERTY SPPHRASEPROPERTY;
+
+struct SPPHRASEPROPERTY
+{
+    const WCHAR            *pszName;
+    ULONG                   ulId;
+    const WCHAR            *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;
+    const WCHAR *pszReplacementText;
+    ULONG        ulFirstElement;
+    ULONG        ulCountOfElements;
+} SPPHRASEREPLACEMENT;
+
+typedef [restricted, hidden] struct SPPHRASE
+{
+    ULONG                   cbSize;
+    LANGID                  LangID;
+    WORD                    wReserved;
+    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;
+} SPPHRASE;
+
+typedef [restricted, hidden] struct SPSERIALIZEDPHRASE
+{
+    ULONG ulSerializedSize;
+} SPSERIALIZEDPHRASE;
+
+typedef [restricted, hidden] struct SPRECORESULTTIMES
+{
+    FILETIME  ftStreamTime;
+    ULONGLONG ullLength;
+    DWORD     dwTickCount;
+    ULONGLONG ullStart;
+} SPRECORESULTTIMES;
+
 cpp_quote("#if defined(__GNUC__)")
 
 cpp_quote("#define SPCAT_AUDIOOUT (const WCHAR []){ 'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\\\','S','O','F','T','W','A','R','E','\\\\','M','i','c','r','o','s','o','f','t','\\\\','S','p','e','e','c','h','\\\\','A','u','d','i','o','O','u','t','p','u','t',0 }")
@@ -56,6 +504,10 @@ cpp_quote("static const WCHAR SPCAT_VOICES[] = {'H','K','E','Y','_','L','O','C',
 cpp_quote("#endif")
 
 interface IEnumSpObjectTokens;
+interface ISpEventSource;
+interface ISpRecoContext;
+interface ISpRecognizer;
+interface ISpStreamFormat;
 
 [
     object,
@@ -190,6 +642,380 @@ interface IEnumSpObjectTokens : IUnknown
     HRESULT GetCount([out] ULONG *pCount);
 }
 
+[
+    object,
+    uuid(1a5c0354-b621-4b5a-8791-d306ed379e53),
+    local,
+    pointer_default(unique),
+    restricted
+]
+interface ISpPhrase : IUnknown
+{
+    HRESULT GetPhrase([out] SPPHRASE **phrase);
+    HRESULT GetSerializedPhrase([out] SPSERIALIZEDPHRASE **phrase);
+    HRESULT GetText([in] ULONG start, [in] ULONG count, [in] BOOL replacements,
+					[out] WCHAR **text, [out] BYTE *attributes);
+    HRESULT Discard([in] DWORD types);
+};
+
+[
+    object,
+    uuid(8fcebc98-4e49-4067-9c6c-d86a0e092e3d),
+    local,
+    pointer_default(unique),
+    restricted
+]
+interface ISpPhraseAlt : ISpPhrase
+{
+    HRESULT GetAltInfo(ISpPhrase **parent, ULONG *start, ULONG *count,
+                        ULONG *elements);
+    HRESULT Commit();
+};
+
+[
+    object,
+    uuid(20b053be-e235-43cd-9a2a-8d17a48b7842),
+    pointer_default(unique),
+    local,
+    restricted
+]
+interface ISpRecoResult : ISpPhrase
+{
+    HRESULT GetResultTimes([out] SPRECORESULTTIMES *times);
+
+    HRESULT GetAlternates(
+                [in] ULONG start,
+                [in] ULONG elements,
+                [in] ULONG count,
+                [out] ISpPhraseAlt **phrases,
+                [out] ULONG *returned);
+
+    HRESULT GetAudio(
+                [in] ULONG start,
+                [in] ULONG elements,
+                [out] ISpStreamFormat **stream);
+    HRESULT SpeakAudio(
+                [in] ULONG start,
+                [in] ULONG elements,
+                [in] DWORD flags,
+                [out] ULONG *number);
+
+    HRESULT Serialize([out] SPSERIALIZEDRESULT **result);
+
+    HRESULT ScaleAudio([in] const GUID *format, [in] const WAVEFORMATEX *wave);
+
+    HRESULT GetRecoContext([out] ISpRecoContext *context);
+};
+
+[
+    object,
+    uuid(8137828f-591a-4a42-be58-49ea7ebaac68),
+    helpstring("ISpGrammarBuilder Interface"),
+    pointer_default(unique),
+    restricted,
+    local
+]
+interface ISpGrammarBuilder : IUnknown
+{
+    HRESULT ResetGrammar([in] LANGID language);
+
+    HRESULT GetRule([in] const WCHAR *rule,
+                    [in] DWORD id,
+                    [in] DWORD attributes,
+                    [in] BOOL should_create,
+                    [out] SPSTATEHANDLE *state);
+    HRESULT ClearRule(SPSTATEHANDLE state);
+
+    HRESULT CreateNewState(
+                [in] SPSTATEHANDLE instate,
+                [out] SPSTATEHANDLE *outstate);
+
+    HRESULT AddWordTransition(
+                    [in] SPSTATEHANDLE from_state,
+                    [in] SPSTATEHANDLE to_state,
+                    [in] const WCHAR *value,
+                    [in] const WCHAR *separators,
+                    [in] SPGRAMMARWORDTYPE type,
+                    [in] float weight,
+                    [in] const SPPROPERTYINFO *info);
+
+    HRESULT AddRuleTransition(
+                [in] SPSTATEHANDLE from_state,
+                [in] SPSTATEHANDLE to_state,
+                [in] SPSTATEHANDLE rule,
+                [in] float weight,
+                [in] const SPPROPERTYINFO *info);
+
+    HRESULT AddResource([in] SPSTATEHANDLE state,
+                        [in] const WCHAR *name,
+                        [in] const WCHAR *value);
+
+    HRESULT Commit([in] DWORD reserved);
+};
+
+[
+    object,
+    uuid(2177db29-7f45-47d0-8554-067e91c80502),
+    pointer_default(unique),
+    restricted,
+    local
+]
+interface ISpRecoGrammar : ISpGrammarBuilder
+{
+    HRESULT GetGrammarId([out] ULONGLONG *grammar);
+    HRESULT GetRecoContext([out] ISpRecoContext **context);
+
+    HRESULT LoadCmdFromFile([in, string] const WCHAR * pszFileName, [in] SPLOADOPTIONS options);
+    HRESULT LoadCmdFromObject([in] REFCLSID rcid, [in, string] const WCHAR * pszGrammarName, [in] SPLOADOPTIONS options);
+    HRESULT LoadCmdFromResource([in] HMODULE hmod,
+                                [in, string] const WCHAR *name,
+                                [in, string] const WCHAR *type,
+                                [in] WORD language,
+                                [in] SPLOADOPTIONS options);
+    HRESULT LoadCmdFromMemory([in] const SPBINARYGRAMMAR *grammar, [in] SPLOADOPTIONS options);
+    HRESULT LoadCmdFromProprietaryGrammar(
+                                [in] REFGUID guid,
+                                [in, string] const WCHAR *param,
+                                [in] const void *data,
+                                [in] ULONG size,
+                                [in] SPLOADOPTIONS options);
+    HRESULT SetRuleState([in, string] const WCHAR *name, [in] void *reserved,
+                         [in] SPRULESTATE state);
+    HRESULT SetRuleIdState([in] ULONG rule, [in] SPRULESTATE state);
+
+    HRESULT LoadDictation([in, string] const WCHAR *name, [in] SPLOADOPTIONS options);
+    HRESULT UnloadDictation();
+    HRESULT SetDictationState([in] SPRULESTATE state);
+
+    HRESULT SetWordSequenceData([in] const WCHAR *text, [in] ULONG count, [in] const SPTEXTSELECTIONINFO *info);
+    HRESULT SetTextSelection([in] const SPTEXTSELECTIONINFO *info);
+
+    HRESULT IsPronounceable([in, string] const WCHAR *word, [out] SPWORDPRONOUNCEABLE *pronounceable);
+
+    HRESULT SetGrammarState([in] SPGRAMMARSTATE state);
+
+    HRESULT SaveCmd([in] IStream *stream, [out, optional] WCHAR **error);
+
+    HRESULT GetGrammarState([out] SPGRAMMARSTATE *state);
+};
+
+[
+    object,
+    uuid(259684dc-37c3-11d2-9603-00c04f8ee628),
+    pointer_default(unique),
+    restricted
+]
+interface ISpNotifySink : IUnknown
+{
+    HRESULT Notify(void);
+}
+
+[
+    object,
+    uuid(6c44df74-72b9-4992-a1ec-ef996e0422d4),
+    pointer_default(unique),
+    restricted
+]
+interface ISpVoice : ISpEventSource
+{
+    HRESULT SetOutput([in] IUnknown *unk, [in] BOOL changes);
+    HRESULT GetOutputObjectToken([out] ISpObjectToken **token);
+    HRESULT GetOutputStream([out] ISpStreamFormat **stream);
+
+    HRESULT Pause(void);
+    HRESULT Resume(void);
+
+    HRESULT SetVoice([in] ISpObjectToken *token);
+    HRESULT GetVoice([out] ISpObjectToken **token);
+
+    HRESULT Speak([in, string] const WCHAR *pwcs,
+                [in] DWORD flags,
+                [out] ULONG *number);
+    HRESULT SpeakStream([in] IStream *stream,
+                [in] DWORD flags,
+                [out] ULONG *number);
+
+    HRESULT GetStatus(
+                [out] SPVOICESTATUS *status,
+                [out, string] WCHAR **bookmark);
+
+    HRESULT Skip([in,string] WCHAR* type, [in] long items, [out] ULONG *skipped);
+
+    HRESULT SetPriority([in] SPVPRIORITY priority);
+    HRESULT GetPriority([out] SPVPRIORITY* priority);
+
+    HRESULT SetAlertBoundary([in] SPEVENTENUM boundary);
+    HRESULT GetAlertBoundary([out] SPEVENTENUM* boundary);
+
+    HRESULT SetRate([in] long adjust);
+    HRESULT GetRate([out] long *adjust);
+
+    HRESULT SetVolume([in] USHORT volume);
+    HRESULT GetVolume([out] USHORT *volume);
+
+    HRESULT WaitUntilDone([in] ULONG timeout);
+
+    HRESULT SetSyncSpeakTimeout([in] ULONG timeout);
+    HRESULT GetSyncSpeakTimeout([out] ULONG *timeout);
+
+    [local] HANDLE SpeakCompleteEvent();
+
+    [local] HRESULT IsUISupported(
+                [in] const WCHAR *type,
+                [in] void * extra,
+                [in] ULONG count,
+                [out] BOOL *supported);
+    [local] HRESULT DisplayUI(
+                [in] HWND parent,
+                [in] const WCHAR *title,
+                [in] const WCHAR *type,
+                [in] void *extra,
+                [in] ULONG count);
+};
+
+[
+    object,
+    uuid(5eff4aef-8487-11d2-961c-00c04f8ee628),
+    pointer_default(unique),
+    restricted
+]
+interface ISpNotifySource : IUnknown
+{
+    HRESULT SetNotifySink([in] ISpNotifySink *sink);
+    [local] HRESULT SetNotifyWindowMessage(
+                [in] HWND hwnd,
+                [in] UINT msg,
+                [in] WPARAM wparam,
+                [in] LPARAM lparam);
+    [local] HRESULT SetNotifyCallbackFunction(
+                [in] SPNOTIFYCALLBACK *callback,
+                [in] WPARAM wparam,
+                [in] LPARAM lparam);
+    [local] HRESULT SetNotifyCallbackInterface(
+                [in] ISpNotifyCallback *callback,
+                [in] WPARAM wparam,
+                [in] LPARAM lparam);
+    [local] HRESULT SetNotifyWin32Event(void);
+    [local] HRESULT WaitForNotifyEvent([in] DWORD milliseconds);
+    [local] HANDLE  GetNotifyEventHandle();
+}
+
+[
+    object,
+    uuid(be7a9cce-5f9e-11d2-960f-00c04f8ee628),
+    pointer_default(unique),
+    local,
+    restricted
+]
+interface ISpEventSource : ISpNotifySource
+{
+    HRESULT SetInterest([in] ULONGLONG event, [in] ULONGLONG queued);
+    HRESULT GetEvents([in] ULONG count,
+                    [out, size_is(count)] SPEVENT *array,
+                    [out] ULONG *fetched);
+    HRESULT GetInfo([out] SPEVENTSOURCEINFO *info);
+};
+
+[
+    object,
+    uuid(f740a62f-7c15-489e-8234-940a33d9272d),
+    pointer_default(unique),
+    local,
+    restricted
+]
+interface ISpRecoContext : ISpEventSource
+{
+    HRESULT GetRecognizer([out] ISpRecognizer **recognizer);
+
+    HRESULT CreateGrammar([in] ULONGLONG grammar, [out] ISpRecoGrammar **spgrammar);
+
+    HRESULT GetStatus([out] SPRECOCONTEXTSTATUS *status);
+
+    HRESULT GetMaxAlternates([in] ULONG *alternates);
+    HRESULT SetMaxAlternates([in] ULONG alternates);
+
+    HRESULT SetAudioOptions([in] SPAUDIOOPTIONS options, [in] const GUID *format, [in] const WAVEFORMATEX *wave);
+    HRESULT GetAudioOptions([in] SPAUDIOOPTIONS *options, [out] GUID *format, [out] WAVEFORMATEX **wave);
+
+    HRESULT DeserializeResult([in] const SPSERIALIZEDRESULT *serialized, [out] ISpRecoResult **result);
+
+    HRESULT Bookmark([in] SPBOOKMARKOPTIONS options, [in] ULONGLONG position, [in] LPARAM event);
+
+    HRESULT SetAdaptationData([in, string] const WCHAR *data, [in] const ULONG count);
+
+    HRESULT Pause(DWORD reserved);
+    HRESULT Resume(DWORD reserved);
+
+    HRESULT SetVoice([in] ISpVoice *voice, [in] BOOL changes);
+    HRESULT GetVoice([out] ISpVoice **voice);
+    HRESULT SetVoicePurgeEvent([in] ULONGLONG interest);
+    HRESULT GetVoicePurgeEvent([out] ULONGLONG *interest);
+
+    HRESULT SetContextState([in] SPCONTEXTSTATE state);
+    HRESULT GetContextState([in] SPCONTEXTSTATE *state);
+};
+
+[
+    object,
+    uuid(bed530be-2606-4f4d-a1c0-54c5cda5566f),
+    pointer_default(unique),
+    restricted
+]
+interface ISpStreamFormat : IStream
+{
+    HRESULT GetFormat(GUID *format, WAVEFORMATEX **wave);
+}
+
+[
+    object,
+    uuid(5b4fb971-b115-4de1-ad97-e482e3bf6ee4),
+    pointer_default(unique),
+    local,
+    restricted
+]
+interface ISpProperties : IUnknown
+{
+    HRESULT SetPropertyNum([in] const WCHAR *name, [in] long value);
+    HRESULT GetPropertyNum([in] const WCHAR *name, [out] long *value);
+    HRESULT SetPropertyString([in] const WCHAR *name, [in] const WCHAR *value);
+    HRESULT GetPropertyString([in] const WCHAR *name, [out] WCHAR **value);
+};
+
+[
+    object,
+    uuid(c2b5f241-daa0-4507-9e16-5a1eaa2b7a5c),
+    pointer_default(unique),
+    restricted
+]
+interface ISpRecognizer : ISpProperties
+{
+    HRESULT SetRecognizer([in] ISpObjectToken *recognizer);
+    HRESULT GetRecognizer([out] ISpObjectToken **recognizer);
+
+    HRESULT SetInput([in] IUnknown *input, [in] BOOL changes);
+    HRESULT GetInputObjectToken([out] ISpObjectToken **token);
+
+    HRESULT GetInputStream( [out] ISpStreamFormat **stream);
+    HRESULT CreateRecoContext([out] ISpRecoContext **cxt);
+
+    HRESULT GetRecoProfile([out] ISpObjectToken **token);
+    HRESULT SetRecoProfile([in] ISpObjectToken *token);
+
+    HRESULT IsSharedInstance(void);
+
+    HRESULT GetRecoState([out] SPRECOSTATE *state);
+    HRESULT SetRecoState([in] SPRECOSTATE state);
+
+    HRESULT GetStatus([out] SPRECOGNIZERSTATUS *status);
+    HRESULT GetFormat([in] SPSTREAMFORMATTYPE type, [out] GUID *format, [out] WAVEFORMATEX **wave);
+
+    [local] HRESULT IsUISupported([in] const WCHAR *type, [in] void *extra, [in] ULONG count,
+                [out] BOOL *supported);
+    [local] HRESULT DisplayUI([in] HWND hwnd,[in] const WCHAR *title, [in] const WCHAR *type,
+                [in] void *extra, [in] ULONG cnt);
+    HRESULT EmulateRecognition([in] ISpPhrase *phrase);
+};
+
 [
     helpstring("Speech Object Library"),
     uuid(c866ca3a-32f7-11d2-9602-00c04f8ee628),
@@ -210,4 +1036,13 @@ library SpeechLib
     {
         interface ISpObjectTokenCategory;
     }
+
+    [
+        uuid(3bee4890-4fe9-4a37-8c1e-5e7e12791c1f)
+    ]
+    coclass SpSharedRecognizer
+    {
+        /*[default] interface ISpeechRecognizer;*/
+        interface ISpRecognizer;
+    };
 }
-- 
2.17.1




More information about the wine-devel mailing list