// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. //! SAPI 5.3 definitions use ctypes::{c_float, c_int, c_long}; use shared::guiddef::{CLSID, GUID}; use shared::minwindef::{BOOL, BYTE, DWORD, LPARAM, UINT, ULONG, WORD, WPARAM}; use shared::wtypes::{BSTR, VARIANT_BOOL}; use um::oaidl::{IDispatch, IDispatchVtbl, VARIANT}; use um::unknwnbase::{IUnknown, IUnknownVtbl}; use um::urlmon::IInternetSecurityManager; use um::winnt::{HRESULT, LPCWSTR, LPWSTR, ULONGLONG, WCHAR}; pub use um::sapi51::{ SPDATAKEYLOCATION, SPDKL_DefaultLocation, SPDKL_CurrentUser, SPDKL_LocalMachine, SPDKL_CurrentConfig, SPDUI_EngineProperties, SPDUI_AddRemoveWord, SPDUI_UserTraining, SPDUI_MicTraining, SPDUI_RecoProfileProperties, SPDUI_AudioProperties, SPDUI_AudioVolume, SPDUI_UserEnrollment, SPDUI_ShareData, SPDUI_Tutorial, SPSTREAMFORMAT, SPSF_Default, SPSF_NoAssignedFormat, 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, SPDFID_Text, SPDFID_WaveFormatEx, SPREG_USER_ROOT, SPREG_LOCAL_MACHINE_ROOT, SPCAT_AUDIOOUT, SPCAT_AUDIOIN, SPCAT_VOICES, SPCAT_RECOGNIZERS, SPCAT_APPLEXICONS, SPCAT_PHONECONVERTERS, SPCAT_TEXTNORMALIZERS, SPCAT_RECOPROFILES, SPMMSYS_AUDIO_IN_TOKEN_ID, SPMMSYS_AUDIO_OUT_TOKEN_ID, SPCURRENT_USER_LEXICON_TOKEN_ID, SPTOKENVALUE_CLSID, SPTOKENKEY_FILES, SPTOKENKEY_UI, SPTOKENKEY_ATTRIBUTES }; pub const SPTOKENKEY_RETAINEDAUDIO: &'static str = "SecondsPerRetainedAudioEvent"; pub const SPTOKENKEY_AUDIO_LATENCY_WARNING: &'static str = "LatencyWarningThreshold"; pub const SPTOKENKEY_AUDIO_LATENCY_TRUNCATE: &'static str = "LatencyTruncateThreshold"; pub const SPTOKENKEY_AUDIO_LATENCY_UPDATE_INTERVAL: &'static str = "LatencyUpdateInterval"; pub use um::sapi51::{ SPVOICECATEGORY_TTSRATE, SPPROP_RESOURCE_USAGE, SPPROP_HIGH_CONFIDENCE_THRESHOLD, SPPROP_NORMAL_CONFIDENCE_THRESHOLD, SPPROP_LOW_CONFIDENCE_THRESHOLD, SPPROP_RESPONSE_SPEED, SPPROP_COMPLEX_RESPONSE_SPEED, SPPROP_ADAPTATION_ON, SPPROP_PERSISTED_BACKGROUND_ADAPTATION, SPPROP_PERSISTED_LANGUAGE_MODEL_ADAPTATION, SPPROP_UX_IS_LISTENING, SPTOPIC_SPELLING, SPWILDCARD, SPDICTATION }; pub const SPREG_SAFE_USER_TOKENS: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\UserTokens"; pub use um::sapi51::{ SPINFDICTATION, SP_LOW_CONFIDENCE, SP_NORMAL_CONFIDENCE, SP_HIGH_CONFIDENCE, DEFAULT_WEIGHT, SP_MAX_WORD_LENGTH, SP_MAX_PRON_LENGTH }; pub const SP_EMULATE_RESULT: ULONG = 0x40000000; pub use um::sapi51::{ ISpNotifyCallback, SPNOTIFYCALLBACK, ISpNotifySource, ISpNotifySourceVtbl, ISpNotifySink, ISpNotifySinkVtbl, ISpNotifyTranslator, ISpNotifyTranslatorVtbl, ISpDataKey, ISpDataKeyVtbl, ISpRegDataKey, ISpRegDataKeyVtbl, ISpObjectTokenCategory, ISpObjectTokenCategoryVtbl, ISpObjectToken, ISpObjectTokenVtbl, ISpObjectTokenInit, ISpObjectTokenInitVtbl, IEnumSpObjectTokens, IEnumSpObjectTokensVtbl, ISpObjectWithToken, ISpObjectWithTokenVtbl, ISpResourceManager, ISpResourceManagerVtbl, SPEVENTLPARAMTYPE, SPET_LPARAM_IS_UNDEFINED, SPET_LPARAM_IS_TOKEN, SPET_LPARAM_IS_OBJECT, SPET_LPARAM_IS_POINTER, SPET_LPARAM_IS_STRING, SPEVENTENUM, SPEI_UNDEFINED, SPEI_START_INPUT_STREAM, SPEI_END_INPUT_STREAM, SPEI_VOICE_CHANGE, SPEI_TTS_BOOKMARK, SPEI_WORD_BOUNDARY, SPEI_PHONEME, SPEI_SENTENCE_BOUNDARY, SPEI_VISEME, SPEI_TTS_AUDIO_LEVEL, SPEI_TTS_PRIVATE, SPEI_MIN_TTS, SPEI_MAX_TTS, SPEI_END_SR_STREAM, SPEI_SOUND_START, SPEI_SOUND_END, SPEI_PHRASE_START, SPEI_RECOGNITION, SPEI_HYPOTHESIS, SPEI_SR_BOOKMARK, SPEI_PROPERTY_NUM_CHANGE, SPEI_PROPERTY_STRING_CHANGE, SPEI_FALSE_RECOGNITION, SPEI_INTERFERENCE, SPEI_REQUEST_UI, SPEI_RECO_STATE_CHANGE, SPEI_ADAPTATION, SPEI_START_SR_STREAM, SPEI_RECO_OTHER_CONTEXT, SPEI_SR_AUDIO_LEVEL }; pub const SPEI_SR_RETAINEDAUDIO: SPEVENTENUM = 51; pub use um::sapi51::SPEI_SR_PRIVATE; pub const SPEI_RESERVED4: SPEVENTENUM = 53; pub const SPEI_RESERVED5: SPEVENTENUM = 54; pub const SPEI_RESERVED6: SPEVENTENUM = 55; pub use um::sapi51::SPEI_MIN_SR; pub const SPEI_MAX_SR: SPEVENTENUM = 55; pub use um::sapi51::{ SPEI_RESERVED1, SPEI_RESERVED2, SPEI_RESERVED3, SPFEI_FLAGCHECK, SPFEI_ALL_TTS_EVENTS, SPFEI_ALL_SR_EVENTS, SPFEI_ALL_EVENTS, SPFEI, SPEVENT, SPSERIALIZEDEVENT, SPSERIALIZEDEVENT64 }; STRUCT!{struct SPEVENTEX { eEventId: WORD, elParamType: WORD, ulStreamNum: ULONG, ullAudioStreamOffset: ULONGLONG, wParam: WPARAM, lParam: LPARAM, ullAudioTimeOffset: ULONGLONG, }} pub use um::sapi51::{ SPINTERFERENCE, SPINTERFERENCE_NONE, SPINTERFERENCE_NOISE, SPINTERFERENCE_NOSIGNAL, SPINTERFERENCE_TOOLOUD, SPINTERFERENCE_TOOQUIET, SPINTERFERENCE_TOOFAST, SPINTERFERENCE_TOOSLOW, SPINTERFERENCE_LATENCY_WARNING, SPINTERFERENCE_LATENCY_TRUNCATE_BEGIN, SPINTERFERENCE_LATENCY_TRUNCATE_END, SPENDSRSTREAMFLAGS, SPESF_NONE, SPESF_STREAM_RELEASED }; pub const SPESF_EMULATED: SPENDSRSTREAMFLAGS = 1 << 1; pub use um::sapi51::{ SPVFEATURE, SPVFEATURE_STRESSED, SPVFEATURE_EMPHASIS, SPVISEMES, SP_VISEME_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, SPEVENTSOURCEINFO, ISpEventSource, ISpEventSourceVtbl, }; RIDL!{#[uuid(0x2373a435, 0x6a4b, 0x429e, 0xa6, 0xac, 0xd4, 0x23, 0x1a, 0x61, 0x97, 0x5b)] interface ISpEventSource2(ISpEventSource2Vtbl): ISpEventSource(ISpEventSourceVtbl) { fn GetEventsEx( ulCount: ULONG, pEventArray: *mut SPEVENTEX, pulFetched: *mut ULONG, ) -> HRESULT, }} pub use um::sapi51::{ ISpEventSink, ISpEventSinkVtbl, ISpStreamFormat, ISpStreamFormatVtbl, SPFILEMODE, SPFM_OPEN_READONLY, SPFM_OPEN_READWRITE, SPFM_CREATE, SPFM_CREATE_ALWAYS, SPFM_NUM_MODES, ISpStream, ISpStreamVtbl, ISpStreamFormatConverter, ISpStreamFormatConverterVtbl, SPAUDIOSTATE, SPAS_CLOSED, SPAS_STOP, SPAS_PAUSE, SPAS_RUN, SPAUDIOSTATUS, SPAUDIOBUFFERINFO, ISpAudio, ISpAudioVtbl, ISpMMSysAudio, ISpMMSysAudioVtbl, ISpTranscript, ISpTranscriptVtbl, SPDISPLAYATTRIBUTES, SPAF_ONE_TRAILING_SPACE, SPAF_TWO_TRAILING_SPACES, SPAF_CONSUME_LEADING_SPACES }; pub const SPAF_BUFFER_POSITION: SPDISPLAYATTRIBUTES = 0x10; pub const SPAF_ALL: SPDISPLAYATTRIBUTES = 0x1f; pub const SPAF_USER_SPECIFIED: SPDISPLAYATTRIBUTES = 0x80; pub use um::sapi51::{ SPPHONEID, PSPPHONEID, PCSPPHONEID, SPPHRASEELEMENT, SPPHRASERULE, SPPHRASEPROPERTYUNIONTYPE, SPPPUT_UNUSED, SPPPUT_ARRAY_INDEX, SPPHRASEPROPERTY, SPPHRASEREPLACEMENT }; STRUCT!{struct SPSEMANTICERRORINFO { ulLineNumber: ULONG, pszScriptLine: LPWSTR, pszSource: LPWSTR, pszDescription: LPWSTR, hrResultCode: HRESULT, }} ENUM!{enum SPSEMANTICFORMAT { SPSMF_SAPI_PROPERTIES = 0, SPSMF_SRGS_SEMANTICINTERPRETATION_MS = 1, SPSMF_SRGS_SAPIPROPERTIES = 2, SPSMF_UPS = 4, SPSMF_SRGS_SEMANTICINTERPRETATION_W3C = 8, }} pub use um::sapi51::SPPHRASE as SPPHRASE_50; // TODO: pub const SP_SPPHRASESIZE_500: usize = mem::size_of::(); STRUCT!{struct SPPHRASE { cbSize: ULONG, LangID: WORD, wHomophoneGroupId: WORD, ullGrammarID: ULONGLONG, ftStartTime: ULONGLONG, ullAudioStreamPosition: ULONGLONG, ulAudioSizeBytes: ULONG, ulRetainedSizeBytes: ULONG, ulAudioSizeTime: ULONG, Rule: SPPHRASERULE, pProperties: *const SPPHRASEPROPERTY, pElements: *const SPPHRASEELEMENT, cReplacements: ULONG, pReplacements: *const SPPHRASEREPLACEMENT, SREngineID: GUID, ulSREnginePrivateDataSize: ULONG, pSREnginePrivateData: *const BYTE, pSML: LPWSTR, pSemanticErrorInfo: *mut SPSEMANTICERRORINFO, }} pub use um::sapi51::SPSERIALIZEDPHRASE; STRUCT!{struct SPRULE { pszRuleName: LPCWSTR, ulRuleId: ULONG, dwAttributes: DWORD, }} pub use um::sapi51::{ SPVALUETYPE, SPDF_PROPERTY, SPDF_REPLACEMENT, SPDF_RULE, SPDF_DISPLAYTEXT, SPDF_LEXICALFORM , SPDF_PRONUNCIATION, SPDF_AUDIO, SPDF_ALTERNATES, SPDF_ALL, SPBINARYGRAMMAR, SPPHRASERNG, SPPR_ALL_ELEMENTS, SP_GETWHOLEPHRASE, SPRR_ALL_ELEMENTS, SPSTATEHANDLE, SPRECOEVENTFLAGS, SPREF_AutoPause, SPREF_Emulated }; pub const SPREF_SMLTimeout: SPRECOEVENTFLAGS = 1 << 2; pub const SPREF_ExtendableParse: SPRECOEVENTFLAGS = 1 << 3; pub const SPREF_ReSent: SPRECOEVENTFLAGS = 1 << 4; pub const SPREF_Hypothesis: SPRECOEVENTFLAGS = 1 << 5; pub const SPREF_FalseRecognition: SPRECOEVENTFLAGS = 1 << 6; pub use um::sapi51::{ SPPARTOFSPEECH, SPPS_NotOverriden, SPPS_Unknown, SPPS_Noun, SPPS_Verb, SPPS_Modifier, SPPS_Function, SPPS_Interjection }; pub const SPPS_Noncontent: SPPARTOFSPEECH = 0x6000; pub const SPPS_LMA: SPPARTOFSPEECH = 0x7000; pub const SPPS_SuppressWord: SPPARTOFSPEECH = 0xf000; pub use um::sapi51::{ SPLEXICONTYPE, eLEXTYPE_USER, eLEXTYPE_APP, eLEXTYPE_VENDORLEXICON, eLEXTYPE_LETTERTOSOUND, eLEXTYPE_MORPHOLOGY, eLEXTYPE_RESERVED4, eLEXTYPE_USER_SHORTCUT, eLEXTYPE_RESERVED6, eLEXTYPE_RESERVED7, eLEXTYPE_RESERVED8, eLEXTYPE_RESERVED9, eLEXTYPE_RESERVED10, eLEXTYPE_PRIVATE1, eLEXTYPE_PRIVATE2, eLEXTYPE_PRIVATE3, eLEXTYPE_PRIVATE4, eLEXTYPE_PRIVATE5, eLEXTYPE_PRIVATE6, eLEXTYPE_PRIVATE7, eLEXTYPE_PRIVATE8, eLEXTYPE_PRIVATE9, eLEXTYPE_PRIVATE10, eLEXTYPE_PRIVATE11, eLEXTYPE_PRIVATE12, eLEXTYPE_PRIVATE13, eLEXTYPE_PRIVATE14, eLEXTYPE_PRIVATE15, eLEXTYPE_PRIVATE16, eLEXTYPE_PRIVATE17, eLEXTYPE_PRIVATE18, eLEXTYPE_PRIVATE19, eLEXTYPE_PRIVATE20, SPWORDTYPE, eWORDTYPE_ADDED, eWORDTYPE_DELETED }; ENUM!{enum SPPRONUNCIATIONFLAGS { ePRONFLAG_USED = 1 << 0, }} pub use um::sapi51::{ SPWORDPRONUNCIATION, SPWORDPRONUNCIATIONLIST, SPWORD, SPWORDLIST, ISpLexicon, ISpLexiconVtbl, ISpContainerLexicon, ISpContainerLexiconVtbl, }; ENUM!{enum SPSHORTCUTTYPE { SPSHT_NotOverriden = -1i32 as u32, SPSHT_Unknown = 0, SPSHT_EMAIL = 0x1000, SPSHT_OTHER = 0x2000, SPPS_RESERVED1 = 0x3000, SPPS_RESERVED2 = 0x4000, SPPS_RESERVED3 = 0x5000, SPPS_RESERVED4 = 0xf000, }} STRUCT!{struct SPSHORTCUTPAIR { pNextSHORTCUTPAIR: *mut SPSHORTCUTPAIR, LangID: WORD, shType: SPSHORTCUTTYPE, pszDisplay: LPWSTR, pszSpoken: LPWSTR, }} STRUCT!{struct SPSHORTCUTPAIRLIST { ulSize: ULONG, pvBuffer: *mut BYTE, pFirstShortcutPair: *mut SPSHORTCUTPAIR, }} RIDL!{#[uuid(0x3df681e2, 0xea56, 0x11d9, 0x8b, 0xde, 0xf6, 0x6b, 0xad, 0x1e, 0x3f, 0x3a)] interface ISpShortcut(ISpShortcutVtbl): IUnknown(IUnknownVtbl) { fn AddShortcut( pszDisplay: LPCWSTR, LangID: WORD, pszSpoken: LPCWSTR, shType: SPSHORTCUTTYPE, ) -> HRESULT, fn RemoveShortcut( pszDisplay: LPCWSTR, LangID: WORD, pszSpoken: LPCWSTR, shType: SPSHORTCUTTYPE, ) -> HRESULT, fn GetShortcuts( LangId: WORD, pShortcutpairList: *mut SPSHORTCUTPAIRLIST, ) -> HRESULT, fn GetGeneration( pdwGeneration: *mut DWORD, ) -> HRESULT, fn GetWordsFromGenerationChange( pdwGeneration: *mut DWORD, pWordList: *mut SPWORDLIST, ) -> HRESULT, fn GetWords( pdwGeneration: *mut DWORD, pdwCookie: *mut DWORD, pWordList: *mut SPWORDLIST, ) -> HRESULT, fn GetShortcutsForGeneration( pdwGeneration: *mut DWORD, pdwCookie: *mut DWORD, pShortcutpairList: *mut SPSHORTCUTPAIRLIST, ) -> HRESULT, fn GetGenerationChange( pdwGeneration: *mut DWORD, pShortcutpairList: *mut SPSHORTCUTPAIRLIST, ) -> HRESULT, }} pub use um::sapi51::{ISpPhoneConverter, ISpPhoneConverterVtbl}; RIDL!{#[uuid(0x133adcd4, 0x19b4, 0x4020, 0x9f, 0xdc, 0x84, 0x2e, 0x78, 0x25, 0x3b, 0x17)] interface ISpPhoneticAlphabetConverter(ISpPhoneticAlphabetConverterVtbl): IUnknown(IUnknownVtbl) { fn GetLangId( pLangID: *mut WORD, ) -> HRESULT, fn SetLangId( LangID: WORD, ) -> HRESULT, fn SAPI2UPS( pszSAPIId: *const SPPHONEID, pszUPSId: *mut SPPHONEID, cMaxLength: DWORD, ) -> HRESULT, fn UPS2SAPI( pszUPSId: *const SPPHONEID, pszSAPIId: *mut SPPHONEID, cMaxLength: DWORD, ) -> HRESULT, fn GetMaxConvertLength( cSrcLength: DWORD, bSAPI2UPS: BOOL, pcMaxDestLength: *mut DWORD, ) -> HRESULT, }} RIDL!{#[uuid(0xb2745efd, 0x42ce, 0x48ca, 0x81, 0xf1, 0xa9, 0x6e, 0x02, 0x53, 0x8a, 0x90)] interface ISpPhoneticAlphabetSelection(ISpPhoneticAlphabetSelectionVtbl): IUnknown(IUnknownVtbl) { fn IsAlphabetUPS( pfIsUPS: *mut BOOL, ) -> HRESULT, fn SetAlphabetToUPS( fForceUPS: BOOL, ) -> HRESULT, }} pub use um::sapi51::{ SPVPITCH, SPVACTIONS, SPVA_Speak, SPVA_Silence, SPVA_Pronounce, SPVA_Bookmark, SPVA_SpellOut, SPVA_Section, SPVA_ParseUnknownTag, SPVCONTEXT, SPVSTATE, SPRUNSTATE, SPRS_DONE, SPRS_IS_SPEAKING, SPVLIMITS, SPMIN_VOLUME, SPMAX_VOLUME, SPMIN_RATE, SPMAX_RATE, SPVPRIORITY, SPVPRI_NORMAL, SPVPRI_ALERT, SPVPRI_OVER, SPVOICESTATUS, SPEAKFLAGS, SPF_DEFAULT, SPF_ASYNC, SPF_PURGEBEFORESPEAK, SPF_IS_FILENAME, SPF_IS_XML, SPF_IS_NOT_XML, SPF_PERSIST_XML, SPF_NLP_SPEAK_PUNC, }; pub const SPF_PARSE_SAPI: SPEAKFLAGS = 1 << 7; pub const SPF_PARSE_SSML: SPEAKFLAGS = 1 << 8; pub const SPF_PARSE_AUTODETECT: SPEAKFLAGS = 0; pub use um::sapi51::SPF_NLP_MASK; pub const SPF_PARSE_MASK: SPEAKFLAGS = SPF_PARSE_SAPI | SPF_PARSE_SSML; pub const SPF_VOICE_MASK: SPEAKFLAGS = ::um::sapi51::SPF_VOICE_MASK | SPF_PARSE_MASK; pub const SPF_UNUSED_FLAGS: SPEAKFLAGS = !SPF_VOICE_MASK; pub use um::sapi51::{ ISpVoice, ISpVoiceVtbl, ISpPhrase, ISpPhraseVtbl, ISpPhraseAlt, ISpPhraseAltVtbl, }; ENUM!{enum SPXMLRESULTOPTIONS { SPXRO_SML = 0, SPXRO_Alternates_SML = 1, }} RIDL!{#[uuid(0xf264da52, 0xe457, 0x4696, 0xb8, 0x56, 0xa7, 0x37, 0xb7, 0x17, 0xaf, 0x79)] interface ISpPhrase2(ISpPhrase2Vtbl): ISpPhrase(ISpPhraseVtbl) { fn GetXMLResult( ppszCoMemXMLResult: *mut LPWSTR, Options: SPXMLRESULTOPTIONS, ) -> HRESULT, fn GetXMLErrorInfo( pSemanticErrorInfo: *mut SPSEMANTICERRORINFO, ) -> HRESULT, fn GetAudio( ulStartElement: ULONG, cElements: ULONG, ppStream: *mut *mut ISpStreamFormat, ) -> HRESULT, }} pub use um::sapi51::{ SPRECORESULTTIMES, SPSERIALIZEDRESULT, ISpRecoResult, ISpRecoResultVtbl, }; ENUM!{enum SPCOMMITFLAGS { SPCF_NONE = 0, SPCF_ADD_TO_USER_LEXICON = 1 << 0, SPCF_DEFINITE_CORRECTION = 1 << 1, }} RIDL!{#[uuid(0x27cac6c4, 0x88f2, 0x41f2, 0x88, 0x17, 0x0c, 0x95, 0xe5, 0x9f, 0x1e, 0x6e)] interface ISpRecoResult2(ISpRecoResult2Vtbl): ISpRecoResult(ISpRecoResultVtbl) { fn CommitAlternate( pPhraseAlt: *mut ISpPhraseAlt, ppNewResult: *mut *mut ISpRecoResult, ) -> HRESULT, fn CommitText( ulStartElement: ULONG, cElements: ULONG, pszCorrectedData: LPCWSTR, eCommitFlags: DWORD, ) -> HRESULT, fn SetTextFeedback( pszFeedback: LPCWSTR, fSuccessful: BOOL, ) -> HRESULT, }} RIDL!{#[uuid(0xae39362b, 0x45a8, 0x4074, 0x9b, 0x9e, 0xcc, 0xf4, 0x9a, 0xa2, 0xd0, 0xb6)] interface ISpXMLRecoResult(ISpXMLRecoResultVtbl): ISpRecoResult(ISpRecoResultVtbl) { fn GetXMLResult( ppszCoMemXMLResult: *mut LPWSTR, Options: SPXMLRESULTOPTIONS, ) -> HRESULT, fn GetXMLErrorInfo( pSemanticErrorInfo: *mut SPSEMANTICERRORINFO, ) -> HRESULT, }} pub use um::sapi51::{ SPTEXTSELECTIONINFO, SPWORDPRONOUNCEABLE, SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE, SPWP_UNKNOWN_WORD_PRONOUNCEABLE, SPWP_KNOWN_WORD_PRONOUNCEABLE, SPGRAMMARSTATE, SPGS_DISABLED, SPGS_ENABLED, SPGS_EXCLUSIVE, SPCONTEXTSTATE, SPCS_DISABLED, SPCS_ENABLED, SPRULESTATE, SPRS_INACTIVE, SPRS_ACTIVE, SPRS_ACTIVE_WITH_AUTO_PAUSE, }; pub const SPRS_ACTIVE_USER_DELIMITED: SPRULESTATE = 4; pub use um::sapi51::{ SP_STREAMPOS_ASAP, SP_STREAMPOS_REALTIME, SPRULETRANS_TEXTBUFFER, SPRULETRANS_WILDCARD, SPRULETRANS_DICTATION, SPGRAMMARWORDTYPE, SPWT_DISPLAY, SPWT_LEXICAL, SPWT_PRONUNCIATION, }; pub const SPWT_LEXICAL_NO_SPECIAL_CHARS: SPGRAMMARWORDTYPE = SPWT_PRONUNCIATION + 1; pub use um::sapi51::{ SPPROPERTYINFO, SPCFGRULEATTRIBUTES, SPRAF_TopLevel, SPRAF_Active, SPRAF_Export, SPRAF_Import, SPRAF_Interpreter, SPRAF_Dynamic, }; pub const SPRAF_Root: SPCFGRULEATTRIBUTES = 1 << 6; pub use um::sapi51::SPRAF_AutoPause; pub const SPRAF_UserDelimited: SPCFGRULEATTRIBUTES = 1 << 17; pub use um::sapi51::{ ISpGrammarBuilder, ISpGrammarBuilderVtbl, SPLOADOPTIONS, SPLO_STATIC, SPLO_DYNAMIC, ISpRecoGrammar, ISpRecoGrammarVtbl, }; ENUM!{enum SPMATCHINGMODE { AllWords = 0, Subsequence = 1, OrderedSubset = 3, SubsequenceContentRequired = 5, OrderedSubsetContentRequired = 7, }} ENUM!{enum PHONETICALPHABET { PA_Ipa = 0, PA_Ups = 1, PA_Sapi = 2, }} RIDL!{#[uuid(0x8ab10026, 0x20cc, 0x4b20, 0x8c, 0x22, 0xa4, 0x9c, 0x9b, 0xa7, 0x8f, 0x60)] interface ISpGrammarBuilder2(ISpGrammarBuilder2Vtbl): IUnknown(IUnknownVtbl) { fn AddTextSubset( hFromState: SPSTATEHANDLE, hToState: SPSTATEHANDLE, psz: LPCWSTR, eMatchMode: SPMATCHINGMODE, ) -> HRESULT, fn SetPhoneticAlphabet( phoneticALphabet: PHONETICALPHABET, ) -> HRESULT, }} pub const SPRP_NORMAL: i32 = 0; // TODO: Unknown purpose and type RIDL!{#[uuid(0x4b37bc9e, 0x9ed6, 0x44a3, 0x93, 0xd3, 0x18, 0xf0, 0x22, 0xb7, 0x9e, 0xc3)] interface ISpRecoGrammar2(ISpRecoGrammar2Vtbl): IUnknown(IUnknownVtbl) { fn GetRules( ppCoMemRules: *mut *mut SPRULE, puNumRules: *mut UINT, ) -> HRESULT, fn LoadCmdFromFile2( pszFileName: LPCWSTR, Options: SPLOADOPTIONS, pszSharingUri: LPCWSTR, pszBaseUri: LPCWSTR, ) -> HRESULT, fn LoadCmdFromMemory2( pGrammar: *const SPBINARYGRAMMAR, Options: SPLOADOPTIONS, pszSharingUri: LPCWSTR, pszBaseUri: LPCWSTR, ) -> HRESULT, fn SetRulePriority( pszRuleName: LPCWSTR, ulRuleId: ULONG, nRulePriority: c_int, ) -> HRESULT, fn SetRuleWeight( pszRuleName: LPCWSTR, ulRuleId: ULONG, flWeight: c_float, ) -> HRESULT, fn SetDictationWeight( flWeight: c_float, ) -> HRESULT, fn SetGrammarLoader( pLoader: *mut ISpeechResourceLoader, ) -> HRESULT, fn SetSMLSecurityManager( pSMLSecurityManager: *mut IInternetSecurityManager, ) -> HRESULT, }} RIDL!{#[uuid(0xb9ac5783, 0xfcd0, 0x4b21, 0xb1, 0x19, 0xb4, 0xf8, 0xda, 0x8f, 0xd2, 0xc3)] interface ISpeechResourceLoader(ISpeechResourceLoaderVtbl): IDispatch(IDispatchVtbl) { fn LoadResource( bstrResourceUri: BSTR, fAlwaysReload: VARIANT_BOOL, pStream: *mut *mut IUnknown, pbstrMIMEType: *mut BSTR, pfModified: *mut VARIANT_BOOL, pbstrRedirectUrl: *mut BSTR, ) -> HRESULT, fn GetLocalCopy( bstrResourceUri: BSTR, pbstrLocalPath: *mut BSTR, pbstrMIMEType: *mut BSTR, pbstrRedirectUrl: *mut BSTR, ) -> HRESULT, fn ReleaseLocalCopy( pbstrLocalPath: BSTR, ) -> HRESULT, }} pub use um::sapi51::{ SPRECOCONTEXTSTATUS, SPBOOKMARKOPTIONS, SPBO_NONE, SPBO_PAUSE, }; pub const SPBO_AHEAD: SPBOOKMARKOPTIONS = 1 << 1; pub const SPBO_TIME_UNITS: SPBOOKMARKOPTIONS = 1 << 2; pub use um::sapi51::{ SPAUDIOOPTIONS, SPAO_NONE, SPAO_RETAIN_AUDIO, ISpRecoContext, ISpRecoContextVtbl, }; ENUM!{enum SPGRAMMAROPTIONS { SPGO_SAPI = 0x1, SPGO_SRGS = 0x2, SPGO_UPS = 0x4, SPGO_SRGS_MS_SCRIPT = 0x8, 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_FILE = 0x10, SPGO_HTTP = 0x20, SPGO_RES = 0x40, SPGO_OBJECT = 0x80, SPGO_DEFAULT = 0x3fb, SPGO_ALL = 0x3ff, }} ENUM!{enum SPADAPTATIONSETTINGS { SPADS_Default = 0, SPADS_CurrentRecognizer = 0x1, SPADS_RecoProfile = 0x2, SPADS_Immediate = 0x4, SPADS_Reset = 0x8, SPADS_HighVolumeDataSource = 0x10, }} ENUM!{enum SPADAPTATIONRELEVANCE { SPAR_Unknown = 0, SPAR_Low = 1, SPAR_Medium = 2, SPAR_High = 3, }} RIDL!{#[uuid(0xbead311c, 0x52ff, 0x437f, 0x94, 0x64, 0x6b, 0x21, 0x05, 0x4c, 0xa7, 0x3d)] interface ISpRecoContext2(ISpRecoContext2Vtbl): IUnknown(IUnknownVtbl) { fn SetGrammarOptions( eGrammarOptions: DWORD, ) -> HRESULT, fn GetGrammarOptions( peGrammarOptions: *mut DWORD, ) -> HRESULT, fn SetAdaptationData2( pAdaptationData: LPCWSTR, cch: ULONG, pTopicName: LPCWSTR, eAdaptationSettings: DWORD, eRelevance: SPADAPTATIONRELEVANCE, ) -> HRESULT, }} pub use um::sapi51::{ ISpProperties, ISpPropertiesVtbl, SP_MAX_LANGIDS, SPRECOGNIZERSTATUS, SPWAVEFORMATTYPE, SPWF_INPUT, SPWF_SRENGINE, SPSTREAMFORMATTYPE, SPRECOSTATE, SPRST_INACTIVE, SPRST_ACTIVE, SPRST_ACTIVE_ALWAYS, SPRST_INACTIVE_WITH_PURGE, SPRST_NUM_STATES, ISpRecognizer, ISpRecognizerVtbl, }; RIDL!{#[uuid(0x21b501a0, 0x0ec7, 0x46c9, 0x92, 0xc3, 0xa2, 0xbc, 0x78, 0x4c, 0x54, 0xb9)] interface ISpSerializeState(ISpSerializeStateVtbl): IUnknown(IUnknownVtbl) { fn GetSerializedState( ppbData: *mut *mut BYTE, pulSize: *mut ULONG, dwReserved: DWORD, ) -> HRESULT, fn SetSerializedState( pbData: *mut BYTE, ulSize: ULONG, dwReserved: DWORD, ) -> HRESULT, }} RIDL!{#[uuid(0x8fc6d974, 0xc81e, 0x4098, 0x93, 0xc5, 0x01, 0x47, 0xf6, 0x1e, 0xd4, 0xd3)] interface ISpRecognizer2(ISpRecognizer2Vtbl): IUnknown(IUnknownVtbl) { fn EmulateRecognitionEx( pPhrase: *mut ISpPhrase, dwCompareFlags: DWORD, ) -> HRESULT, fn SetTrainingState( fDoingTraining: BOOL, fAdaptFromTrainingData: BOOL, ) -> HRESULT, fn ResetAcousticModelAdaptation() -> HRESULT, }} STRUCT!{struct SPNORMALIZATIONLIST { ulSize: ULONG, ppszzNormalizedList: *mut *mut WCHAR, }} RIDL!{#[uuid(0xc360ce4b, 0x76d1, 0x4214, 0xad, 0x68, 0x52, 0x65, 0x7d, 0x50, 0x83, 0xda)] interface ISpEnginePronunciation(ISpEnginePronunciationVtbl): IUnknown(IUnknownVtbl) { fn Normalize( pszWord: LPCWSTR, pszLeftContext: LPCWSTR, pszRightContext: LPCWSTR, LangID: WORD, pNormalizationList: *mut SPNORMALIZATIONLIST, ) -> HRESULT, fn GetPronunciations( pszWord: LPCWSTR, pszLeftContext: LPCWSTR, pszRightContext: LPCWSTR, LangID: WORD, pEnginePronunciationList: *mut SPWORDPRONUNCIATIONLIST, ) -> HRESULT, }} STRUCT!{struct SPDISPLAYTOKEN { pszLexical: *const WCHAR, pszDisplay: *const WCHAR, bDisplayAttributes: BYTE, }} STRUCT!{struct SPDISPLAYPHRASE { ulNumTokens: ULONG, pTokens: *mut SPDISPLAYTOKEN, }} RIDL!{#[uuid(0xc8d7c7e2, 0x0dde, 0x44b7, 0xaf, 0xe3, 0xb0, 0xc9, 0x91, 0xfb, 0xeb, 0x5e)] interface ISpDisplayAlternates(ISpDisplayAlternatesVtbl): IUnknown(IUnknownVtbl) { fn GetDisplayAlternates( pPhrase: *const SPDISPLAYPHRASE, cRequestCount: ULONG, ppCoMemPhrases: *mut *mut SPDISPLAYPHRASE, pcPhrasesReturned: *mut ULONG, ) -> HRESULT, fn SetFullStopTrailSpace( ulTrailSpace: ULONG, ) -> HRESULT, }} pub use um::sapi51::{ SpeechLanguageId, DISPID_SpeechDataKey, DISPID_SDKSetBinaryValue, DISPID_SDKGetBinaryValue, DISPID_SDKSetStringValue, DISPID_SDKGetStringValue, DISPID_SDKSetLongValue, DISPID_SDKGetlongValue, DISPID_SDKOpenKey, DISPID_SDKCreateKey, DISPID_SDKDeleteKey, DISPID_SDKDeleteValue, DISPID_SDKEnumKeys, DISPID_SDKEnumValues, DISPID_SpeechObjectToken, DISPID_SOTId, DISPID_SOTDataKey, DISPID_SOTCategory, DISPID_SOTGetDescription, DISPID_SOTSetId, DISPID_SOTGetAttribute, DISPID_SOTCreateInstance, DISPID_SOTRemove, DISPID_SOTGetStorageFileName, DISPID_SOTRemoveStorageFileName, DISPID_SOTIsUISupported, DISPID_SOTDisplayUI, DISPID_SOTMatchesAttributes, SpeechDataKeyLocation, SDKLDefaultLocation, SDKLCurrentUser, SDKLLocalMachine, SDKLCurrentConfig, SpeechTokenContext, STCInprocServer, STCInprocHandler , STCLocalServer, STCRemoteServer, STCAll, SpeechTokenShellFolder, STSF_AppData, STSF_LocalAppData, STSF_CommonAppData, STSF_FlagCreate, DISPID_SpeechObjectTokens, DISPID_SOTsCount, DISPID_SOTsItem, DISPID_SOTs_NewEnum, DISPID_SpeechObjectTokenCategory, DISPID_SOTCId, DISPID_SOTCDefault, DISPID_SOTCSetId, DISPID_SOTCGetDataKey, DISPID_SOTCEnumerateTokens, SpeechAudioFormatType, SAFTDefault, SAFTNoAssignedFormat, 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, DISPID_SpeechAudioFormat, DISPID_SAFType, DISPID_SAFGuid, DISPID_SAFGetWaveFormatEx, DISPID_SAFSetWaveFormatEx, DISPID_SpeechBaseStream, DISPID_SBSFormat, DISPID_SBSRead, DISPID_SBSWrite, DISPID_SBSSeek, SpeechStreamSeekPositionType, SSSPTRelativeToStart, SSSPTRelativeToCurrentPosition, SSSPTRelativeToEnd, DISPID_SpeechAudio, DISPID_SAStatus, DISPID_SABufferInfo, DISPID_SADefaultFormat, DISPID_SAVolume, DISPID_SABufferNotifySize, DISPID_SAEventHandle, DISPID_SASetState, SpeechAudioState, SASClosed, SASStop, SASPause, SASRun, DISPID_SpeechMMSysAudio, DISPID_SMSADeviceId, DISPID_SMSALineId, DISPID_SMSAMMHandle, DISPID_SpeechFileStream, DISPID_SFSOpen, DISPID_SFSClose, SpeechStreamFileMode, SSFMOpenForRead, SSFMOpenReadWrite, SSFMCreate, SSFMCreateForWrite, DISPID_SpeechCustomStream, DISPID_SCSBaseStream, DISPID_SpeechMemoryStream, DISPID_SMSSetData, DISPID_SMSGetData, DISPID_SpeechAudioStatus, DISPID_SASFreeBufferSpace, DISPID_SASNonBlockingIO, DISPID_SASState, DISPID_SASCurrentSeekPosition, DISPID_SASCurrentDevicePosition, DISPID_SpeechAudioBufferInfo, DISPID_SABIMinNotification, DISPID_SABIBufferSize, DISPID_SABIEventBias, DISPID_SpeechWaveFormatEx, DISPID_SWFEFormatTag, DISPID_SWFEChannels, DISPID_SWFESamplesPerSec, DISPID_SWFEAvgBytesPerSec, DISPID_SWFEBlockAlign, DISPID_SWFEBitsPerSample, DISPID_SWFEExtraData, DISPID_SpeechVoice, DISPID_SVStatus, 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, SpeechVoicePriority, SVPNormal, SVPAlert, SVPOver, SpeechVoiceSpeakFlags, SVSFDefault, SVSFlagsAsync, SVSFPurgeBeforeSpeak, SVSFIsFilename, SVSFIsXML, SVSFIsNotXML, SVSFPersistXML, SVSFNLPSpeakPunc, }; pub const SVSFParseSapi: SpeechVoiceSpeakFlags = SPF_PARSE_SAPI; pub const SVSFParseSsml: SpeechVoiceSpeakFlags = SPF_PARSE_SSML; pub const SVSFParseAutodetect: SpeechVoiceSpeakFlags = SPF_PARSE_AUTODETECT; pub use um::sapi51::SVSFNLPMask; pub const SVSFParseMask: SpeechVoiceSpeakFlags = SPF_PARSE_MASK as u32; pub use um::sapi51::{ SVSFVoiceMask, SVSFUnusedFlags, SpeechVoiceEvents, SVEStartInputStream, SVEEndInputStream, SVEVoiceChange, SVEBookmark, SVEWordBoundary, SVEPhoneme, SVESentenceBoundary, SVEViseme, SVEAudioLevel, SVEPrivate, SVEAllEvents, DISPID_SpeechVoiceStatus, DISPID_SVSCurrentStreamNumber, DISPID_SVSLastStreamNumberQueued, DISPID_SVSLastResult, DISPID_SVSRunningState, DISPID_SVSInputWordPosition, DISPID_SVSInputWordLength, DISPID_SVSInputSentencePosition, DISPID_SVSInputSentenceLength, DISPID_SVSLastBookmark, DISPID_SVSLastBookmarkId, DISPID_SVSPhonemeId, DISPID_SVSVisemeId, SpeechRunState, SRSEDone, SRSEIsSpeaking, SpeechVisemeType, SVP_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, SpeechVisemeFeature, SVF_None, SVF_Stressed, SVF_Emphasis, DISPID_SpeechVoiceEvent, DISPID_SVEStreamStart, DISPID_SVEStreamEnd, DISPID_SVEVoiceChange, DISPID_SVEBookmark, DISPID_SVEWord, DISPID_SVEPhoneme, DISPID_SVESentenceBoundary, DISPID_SVEViseme, DISPID_SVEAudioLevel, DISPID_SVEEnginePrivate, DISPID_SpeechRecognizer, DISPID_SRRecognizer, 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, SpeechRecognizerState, SRSInactive, SRSActive, SRSActiveAlways, SRSInactiveWithPurge, SpeechDisplayAttributes, SDA_No_Trailing_Space, SDA_One_Trailing_Space, SDA_Two_Trailing_Spaces, SDA_Consume_Leading_Spaces, SpeechFormatType, SFTInput, SFTSREngine, }; ENUM!{enum SpeechEmulationCompareFlags { SECFIgnoreCase = 0x1, SECFIgnoreKanaType = 0x10000, SECFIgnoreWidth = 0x20000, SECFNoSpecialChars = 0x20000000, SECFEmulateResult = 0x40000000, SECFDefault = SECFIgnoreCase | SECFIgnoreKanaType | SECFIgnoreWidth, }} pub use um::sapi51::{ DISPID_SpeechRecognizerStatus, DISPID_SRSAudioStatus, DISPID_SRSCurrentStreamPosition, DISPID_SRSCurrentStreamNumber, DISPID_SRSNumberOfActiveRules, DISPID_SRSClsidEngine, DISPID_SRSSupportedLanguages, DISPID_SpeechRecoContext, DISPID_SRCRecognizer, 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, SpeechRetainedAudioOptions, SRAONone, SRAORetainAudio, SpeechBookmarkOptions, SBONone, SBOPause, SpeechInterference, SINone, SINoise, SINoSignal, SITooLoud, SITooQuiet, SITooFast, SITooSlow, SpeechRecoEvents, SREStreamEnd, SRESoundStart, SRESoundEnd, SREPhraseStart, SRERecognition, SREHypothesis, SREBookmark, SREPropertyNumChange, SREPropertyStringChange, SREFalseRecognition, SREInterference, SRERequestUI, SREStateChange, SREAdaptation, SREStreamStart, SRERecoOtherContext, SREAudioLevel, SREPrivate, SREAllEvents, SpeechRecoContextState, SRCS_Disabled, SRCS_Enabled, DISPIDSPRG, DISPID_SRGId, 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, SpeechLoadOption, SLOStatic, SLODynamic, SpeechWordPronounceable, SWPUnknownWordUnpronounceable, SWPUnknownWordPronounceable, SWPKnownWordPronounceable, SpeechGrammarState, SGSEnabled, SGSDisabled, SGSExclusive, SpeechRuleState, SGDSInactive, SGDSActive, SGDSActiveWithAutoPause, }; pub const SGDSActiveUserDelimited: SpeechRuleState = SPRS_ACTIVE_USER_DELIMITED; pub use um::sapi51::{ SpeechRuleAttributes, SRATopLevel, SRADefaultToActive, SRAExport, SRAImport, SRAInterpreter, SRADynamic, }; pub const SRARoot: SpeechRuleAttributes = SPRAF_Root; pub use um::sapi51::{ SpeechGrammarWordType, SGDisplay, SGLexical, SGPronounciation, }; pub const SGLexicalNoSpecialChars: SpeechGrammarWordType = SPWT_LEXICAL_NO_SPECIAL_CHARS; pub use um::sapi51::{ DISPID_SpeechRecoContextEvents, DISPID_SRCEStartStream, 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, SpeechRecognitionType, SRTStandard, SRTAutopause, SRTEmulated, }; pub const SRTSMLTimeout: SpeechRecognitionType = SPREF_SMLTimeout; pub const SRTExtendableParse: SpeechRecognitionType = SPREF_ExtendableParse; pub const SRTReSent: SpeechRecognitionType = SPREF_ReSent; pub use um::sapi51::{ DISPID_SpeechGrammarRule, DISPID_SGRAttributes, DISPID_SGRInitialState, DISPID_SGRName, DISPID_SGRId, DISPID_SGRClear, DISPID_SGRAddResource, DISPID_SGRAddState, DISPID_SpeechGrammarRules, DISPID_SGRsCount, DISPID_SGRsDynamic, DISPID_SGRsAdd, DISPID_SGRsCommit, DISPID_SGRsCommitAndSave, DISPID_SGRsFindRule, DISPID_SGRsItem, DISPID_SGRs_NewEnum, DISPID_SpeechGrammarRuleState, DISPID_SGRSRule, DISPID_SGRSTransitions, DISPID_SGRSAddWordTransition, DISPID_SGRSAddRuleTransition, DISPID_SGRSAddSpecialTransition, SpeechSpecialTransitionType, SSTTWildcard, SSTTDictation, SSTTTextBuffer, DISPID_SpeechGrammarRuleStateTransitions, DISPID_SGRSTsCount, DISPID_SGRSTsItem, DISPID_SGRSTs_NewEnum, DISPID_SpeechGrammarRuleStateTransition, DISPID_SGRSTType, DISPID_SGRSTText, DISPID_SGRSTRule, DISPID_SGRSTWeight, DISPID_SGRSTPropertyName, DISPID_SGRSTPropertyId, DISPID_SGRSTPropertyValue, DISPID_SGRSTNextState, SpeechGrammarRuleStateTransitionType, SGRSTTEpsilon, SGRSTTWord, SGRSTTRule, SGRSTTDictation, SGRSTTWildcard, SGRSTTTextBuffer, DISPIDSPTSI, DISPIDSPTSI_ActiveOffset, DISPIDSPTSI_ActiveLength, DISPIDSPTSI_SelectionOffset, DISPIDSPTSI_SelectionLength, DISPID_SpeechRecoResult, DISPID_SRRRecoContext, DISPID_SRRTimes, DISPID_SRRAudioFormat, DISPID_SRRPhraseInfo, DISPID_SRRAlternates, DISPID_SRRAudio, DISPID_SRRSpeakAudio, DISPID_SRRSaveToMemory, DISPID_SRRDiscardResultInfo, SpeechDiscardType, SDTProperty, SDTReplacement, SDTRule, SDTDisplayText, SDTLexicalForm, SDTPronunciation, SDTAudio, SDTAlternates, SDTAll, }; ENUM!{enum DISPID_SpeechXMLRecoResult { DISPID_SRRGetXMLResult, DISPID_SRRGetXMLErrorInfo, }} ENUM!{enum DISPID_SpeechRecoResult2 { DISPID_SRRSetTextFeedback, }} pub use um::sapi51::{ DISPID_SpeechPhraseBuilder, DISPID_SPPBRestorePhraseFromMemory, DISPID_SpeechRecoResultTimes, DISPID_SRRTStreamTime, DISPID_SRRTLength, DISPID_SRRTTickCount, DISPID_SRRTOffsetFromStart, DISPID_SpeechPhraseAlternate, DISPID_SPARecoResult, DISPID_SPAStartElementInResult, DISPID_SPANumberOfElementsInResult, DISPID_SPAPhraseInfo, DISPID_SPACommit, DISPID_SpeechPhraseAlternates, DISPID_SPAsCount, DISPID_SPAsItem, DISPID_SPAs_NewEnum, DISPID_SpeechPhraseInfo, DISPID_SPILanguageId, 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_SpeechPhraseElement, DISPID_SPEAudioTimeOffset, DISPID_SPEAudioSizeTime, DISPID_SPEAudioStreamOffset, DISPID_SPEAudioSizeBytes, DISPID_SPERetainedStreamOffset, DISPID_SPERetainedSizeBytes, DISPID_SPEDisplayText, DISPID_SPELexicalForm, DISPID_SPEPronunciation, DISPID_SPEDisplayAttributes, DISPID_SPERequiredConfidence, DISPID_SPEActualConfidence, DISPID_SPEEngineConfidence, SpeechEngineConfidence, SECLowConfidence, SECNormalConfidence, SECHighConfidence, DISPID_SpeechPhraseElements, DISPID_SPEsCount, DISPID_SPEsItem, DISPID_SPEs_NewEnum, DISPID_SpeechPhraseReplacement, DISPID_SPRDisplayAttributes, DISPID_SPRText, DISPID_SPRFirstElement, DISPID_SPRNumberOfElements, DISPID_SpeechPhraseReplacements, DISPID_SPRsCount, DISPID_SPRsItem, DISPID_SPRs_NewEnum, DISPID_SpeechPhraseProperty, DISPID_SPPName, DISPID_SPPId, DISPID_SPPValue, DISPID_SPPFirstElement, DISPID_SPPNumberOfElements, DISPID_SPPEngineConfidence, DISPID_SPPConfidence, DISPID_SPPParent, DISPID_SPPChildren, DISPID_SpeechPhraseProperties, DISPID_SPPsCount, DISPID_SPPsItem, DISPID_SPPs_NewEnum, DISPID_SpeechPhraseRule, DISPID_SPRuleName, DISPID_SPRuleId, DISPID_SPRuleFirstElement, DISPID_SPRuleNumberOfElements, DISPID_SPRuleParent, DISPID_SPRuleChildren, DISPID_SPRuleConfidence, DISPID_SPRuleEngineConfidence, DISPID_SpeechPhraseRules, DISPID_SPRulesCount, DISPID_SPRulesItem, DISPID_SPRules_NewEnum, DISPID_SpeechLexicon, DISPID_SLGenerationId, DISPID_SLGetWords, DISPID_SLAddPronunciation, DISPID_SLAddPronunciationByPhoneIds, DISPID_SLRemovePronunciation, DISPID_SLRemovePronunciationByPhoneIds, DISPID_SLGetPronunciations, DISPID_SLGetGenerationChange, SpeechLexiconType, SLTUser, SLTApp, SpeechPartOfSpeech, SPSNotOverriden, SPSUnknown, SPSNoun, SPSVerb, SPSModifier, SPSFunction, SPSInterjection, }; pub const SPSLMA: SpeechPartOfSpeech = SPPS_LMA; pub const SPSSuppressWord: SpeechPartOfSpeech = SPPS_SuppressWord; pub use um::sapi51::{ DISPID_SpeechLexiconWords, DISPID_SLWsCount, DISPID_SLWsItem, DISPID_SLWs_NewEnum, SpeechWordType, SWTAdded, SWTDeleted, DISPID_SpeechLexiconWord, DISPID_SLWLangId, DISPID_SLWType, DISPID_SLWWord, DISPID_SLWPronunciations, DISPID_SpeechLexiconProns, DISPID_SLPsCount, DISPID_SLPsItem, DISPID_SLPs_NewEnum, DISPID_SpeechLexiconPronunciation, DISPID_SLPType, DISPID_SLPLangId, DISPID_SLPPartOfSpeech, DISPID_SLPPhoneIds, DISPID_SLPSymbolic, DISPID_SpeechPhoneConverter, DISPID_SPCLangId, DISPID_SPCPhoneToId, DISPID_SPCIdToPhone, LIBID_SpeechLib, ISpeechDataKey, ISpeechDataKeyVtbl, ISpeechObjectToken, ISpeechObjectTokenVtbl, ISpeechObjectTokens, ISpeechObjectTokensVtbl, ISpeechObjectTokenCategory, ISpeechObjectTokenCategoryVtbl, ISpeechAudioBufferInfo, ISpeechAudioBufferInfoVtbl, ISpeechAudioStatus, ISpeechAudioStatusVtbl, ISpeechAudioFormat, ISpeechAudioFormatVtbl, ISpeechWaveFormatEx, ISpeechWaveFormatExVtbl, ISpeechBaseStream, ISpeechBaseStreamVtbl, ISpeechFileStream, ISpeechFileStreamVtbl, ISpeechMemoryStream, ISpeechMemoryStreamVtbl, ISpeechCustomStream, ISpeechCustomStreamVtbl, ISpeechAudio, ISpeechAudioVtbl, ISpeechMMSysAudio, ISpeechMMSysAudioVtbl, ISpeechVoice, ISpeechVoiceVtbl, ISpeechVoiceStatus, ISpeechVoiceStatusVtbl, _ISpeechVoiceEvents, _ISpeechVoiceEventsVtbl, ISpeechRecognizer, ISpeechRecognizerVtbl, ISpeechRecognizerStatus, ISpeechRecognizerStatusVtbl, ISpeechRecoContext, ISpeechRecoContextVtbl, ISpeechRecoGrammar, ISpeechRecoGrammarVtbl, _ISpeechRecoContextEvents, _ISpeechRecoContextEventsVtbl, ISpeechGrammarRule, ISpeechGrammarRuleVtbl, ISpeechGrammarRules, ISpeechGrammarRulesVtbl, ISpeechGrammarRuleState, ISpeechGrammarRuleStateVtbl, ISpeechGrammarRuleStateTransition, ISpeechGrammarRuleStateTransitionVtbl, ISpeechGrammarRuleStateTransitions, ISpeechGrammarRuleStateTransitionsVtbl, ISpeechTextSelectionInformation, ISpeechTextSelectionInformationVtbl, ISpeechRecoResult, ISpeechRecoResultVtbl, }; RIDL!{#[uuid(0x8e0a246d, 0xd3c8, 0x45de, 0x86, 0x57, 0x04, 0x29, 0x0c, 0x45, 0x8c, 0x3c)] interface ISpeechRecoResult2(ISpeechRecoResult2Vtbl): ISpeechRecoResult(ISpeechRecoResultVtbl) { fn SetTextFeedback( Feedback: BSTR, WasSuccessful: VARIANT_BOOL, ) -> HRESULT, }} pub use um::sapi51::{ ISpeechRecoResultTimes, ISpeechRecoResultTimesVtbl, ISpeechPhraseAlternate, ISpeechPhraseAlternateVtbl, ISpeechPhraseAlternates, ISpeechPhraseAlternatesVtbl, ISpeechPhraseInfo, ISpeechPhraseInfoVtbl, ISpeechPhraseElement, ISpeechPhraseElementVtbl, ISpeechPhraseElements, ISpeechPhraseElementsVtbl, ISpeechPhraseReplacement, ISpeechPhraseReplacementVtbl, ISpeechPhraseReplacements, ISpeechPhraseReplacementsVtbl, ISpeechPhraseProperty, ISpeechPhrasePropertyVtbl, ISpeechPhraseProperties, ISpeechPhrasePropertiesVtbl, ISpeechPhraseRule, ISpeechPhraseRuleVtbl, ISpeechPhraseRules, ISpeechPhraseRulesVtbl, ISpeechLexicon, ISpeechLexiconVtbl, ISpeechLexiconWords, ISpeechLexiconWordsVtbl, ISpeechLexiconWord, ISpeechLexiconWordVtbl, ISpeechLexiconPronunciations, ISpeechLexiconPronunciationsVtbl, ISpeechLexiconPronunciation, ISpeechLexiconPronunciationVtbl, Speech_Default_Weight, Speech_Max_Word_Length, Speech_Max_Pron_Length, Speech_StreamPos_Asap, Speech_StreamPos_RealTime, SpeechAllElements, }; RIDL!{#[uuid(0xaaec54af, 0x8f85, 0x4924, 0x94, 0x4d, 0xb7, 0x9d, 0x39, 0xd7, 0x2e, 0x19)] interface ISpeechXMLRecoResult(ISpeechXMLRecoResultVtbl): ISpeechRecoResult(ISpeechRecoResultVtbl) { fn GetXMLResult( Options: SPXMLRESULTOPTIONS, pResult: *mut BSTR, ) -> HRESULT, fn GetXMLErrorInfo( LineNumber: *mut c_long, ScriptLine: *mut BSTR, Source: *mut BSTR, Description: *mut BSTR, ResultCode: *mut c_long, IsError: *mut VARIANT_BOOL, ) -> HRESULT, }} RIDL!{#[uuid(0x6d60eb64, 0xaced, 0x40a6, 0xbb, 0xf3, 0x4e, 0x55, 0x7f, 0x71, 0xde, 0xe2)] interface ISpeechRecoResultDispatch(ISpeechRecoResultDispatchVtbl): IDispatch(IDispatchVtbl) { fn get_RecoContext( RecoContext: *mut ISpeechRecoContext, ) -> HRESULT, fn get_Times( Times: *mut ISpeechRecoResultTimes, ) -> HRESULT, fn putref_AudioFormat( Format: *mut ISpeechAudioFormat, ) -> HRESULT, fn get_AudioFormat( Format: *mut *mut ISpeechAudioFormat, ) -> HRESULT, fn get_PhraseInfo( PhraseInfo: *mut *mut ISpeechPhraseInfo, ) -> HRESULT, fn Alternates( RequestCount: c_long, StartElement: c_long, Elements: c_long, Alternates: *mut *mut ISpeechPhraseAlternates, ) -> HRESULT, fn Audio( StartElement: c_long, Elements: c_long, Stream: *mut *mut ISpeechMemoryStream, ) -> HRESULT, fn SpeakAudio( StartElement: c_long, Elements: c_long, Flags: SpeechVoiceSpeakFlags, StreamNumber: *mut c_long, ) -> HRESULT, fn SaveToMemory( ResultBlock: *mut VARIANT, ) -> HRESULT, fn DiscardResultInfo( ValueTypes: SpeechDiscardType, ) -> HRESULT, fn GetXMLResult( Options: SPXMLRESULTOPTIONS, pResult: *mut BSTR, ) -> HRESULT, fn GetXMLErrorInfo( LineNumber: *mut c_long, ScriptLine: *mut BSTR, Source: *mut BSTR, Description: *mut BSTR, ResultCode: *mut HRESULT, IsError: *mut VARIANT_BOOL, ) -> HRESULT, fn SetTextFeedback( Feedback: BSTR, WasSuccessful: VARIANT_BOOL, ) -> HRESULT, }} pub use um::sapi51::{ ISpeechPhraseInfoBuilder, ISpeechPhraseInfoBuilderVtbl, ISpeechPhoneConverter, ISpeechPhoneConverterVtbl, CLSID_SpNotifyTranslator, CLSID_SpObjectTokenCategory, CLSID_SpObjectToken, CLSID_SpResourceManager, CLSID_SpStreamFormatConverter, CLSID_SpMMAudioEnum, CLSID_SpMMAudioIn, CLSID_SpMMAudioOut, CLSID_SpStream, CLSID_SpVoice, CLSID_SpSharedRecoContext, CLSID_SpInprocRecognizer, CLSID_SpSharedRecognizer, CLSID_SpLexicon, CLSID_SpUnCompressedLexicon, CLSID_SpCompressedLexicon, }; extern { pub static CLSID_SpShortcut: CLSID; } pub use um::sapi51::CLSID_SpPhoneConverter; extern { pub static CLSID_SpPhoneticAlphabetConverter: CLSID; } pub use um::sapi51::{ CLSID_SpNullPhoneConverter, CLSID_SpTextSelectionInformation, CLSID_SpPhraseInfoBuilder, CLSID_SpAudioFormat, CLSID_SpWaveFormatEx, CLSID_SpInProcRecoContext, CLSID_SpCustomStream, CLSID_SpFileStream, CLSID_SpMemoryStream, };