// 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.1 definitions use ctypes::{c_char, c_float, c_long, c_short, c_ushort, c_void}; use shared::guiddef::{CLSID, GUID, IID, REFCLSID, REFGUID, REFIID}; use shared::minwindef::{ BOOL, BYTE, DWORD, FILETIME, HKEY, HMODULE, LPARAM, UINT, ULONG, USHORT, WORD, WPARAM }; use shared::mmreg::WAVEFORMATEX; use shared::rpcndr::byte; use shared::windef::HWND; use shared::wtypes::{BSTR, VARIANT_BOOL}; use shared::wtypesbase::{ CLSCTX_INPROC_HANDLER, CLSCTX_INPROC_SERVER, CLSCTX_LOCAL_SERVER, CLSCTX_REMOTE_SERVER }; use um::oaidl::{DISPID_NEWENUM, DISPID_VALUE, IDispatch, IDispatchVtbl, VARIANT}; use um::objidlbase::{IStream, IStreamVtbl, STREAM_SEEK_CUR, STREAM_SEEK_END, STREAM_SEEK_SET}; use um::servprov::{IServiceProvider, IServiceProviderVtbl}; use um::unknwnbase::{IUnknown, IUnknownVtbl}; use um::winnt::{HANDLE, HRESULT, LONG, LONGLONG, LPCWSTR, LPWSTR, ULONGLONG, WCHAR}; ENUM!{enum SPDATAKEYLOCATION { SPDKL_DefaultLocation = 0, SPDKL_CurrentUser = 1, SPDKL_LocalMachine = 2, SPDKL_CurrentConfig = 5, }} pub const SPDUI_EngineProperties: &'static str = "EngineProperties"; pub const SPDUI_AddRemoveWord: &'static str = "AddRemoveWord"; pub const SPDUI_UserTraining: &'static str = "UserTraining"; pub const SPDUI_MicTraining: &'static str = "MicTraining"; pub const SPDUI_RecoProfileProperties: &'static str = "RecoProfileProperties"; pub const SPDUI_AudioProperties: &'static str = "AudioProperties"; pub const SPDUI_AudioVolume: &'static str = "AudioVolume"; pub const SPDUI_UserEnrollment: &'static str = "UserEnrollment"; pub const SPDUI_ShareData: &'static str = "ShareData"; pub const SPDUI_Tutorial: &'static str = "Tutorial"; ENUM!{enum SPSTREAMFORMAT { SPSF_Default = -1i32 as u32, SPSF_NoAssignedFormat = 0, SPSF_Text = 1, SPSF_NonStandardFormat = 2, SPSF_ExtendedAudioFormat = 3, SPSF_8kHz8BitMono = 4, SPSF_8kHz8BitStereo = 5, SPSF_8kHz16BitMono = 6, SPSF_8kHz16BitStereo = 7, SPSF_11kHz8BitMono = 8, SPSF_11kHz8BitStereo = 9, SPSF_11kHz16BitMono = 10, SPSF_11kHz16BitStereo = 11, SPSF_12kHz8BitMono = 12, SPSF_12kHz8BitStereo = 13, SPSF_12kHz16BitMono = 14, SPSF_12kHz16BitStereo = 15, SPSF_16kHz8BitMono = 16, SPSF_16kHz8BitStereo = 17, SPSF_16kHz16BitMono = 18, SPSF_16kHz16BitStereo = 19, SPSF_22kHz8BitMono = 20, SPSF_22kHz8BitStereo = 21, SPSF_22kHz16BitMono = 22, SPSF_22kHz16BitStereo = 23, SPSF_24kHz8BitMono = 24, SPSF_24kHz8BitStereo = 25, SPSF_24kHz16BitMono = 26, SPSF_24kHz16BitStereo = 27, SPSF_32kHz8BitMono = 28, SPSF_32kHz8BitStereo = 29, SPSF_32kHz16BitMono = 30, SPSF_32kHz16BitStereo = 31, SPSF_44kHz8BitMono = 32, SPSF_44kHz8BitStereo = 33, SPSF_44kHz16BitMono = 34, SPSF_44kHz16BitStereo = 35, SPSF_48kHz8BitMono = 36, SPSF_48kHz8BitStereo = 37, SPSF_48kHz16BitMono = 38, SPSF_48kHz16BitStereo = 39, SPSF_TrueSpeech_8kHz1BitMono = 40, SPSF_CCITT_ALaw_8kHzMono = 41, SPSF_CCITT_ALaw_8kHzStereo = 42, SPSF_CCITT_ALaw_11kHzMono = 43, SPSF_CCITT_ALaw_11kHzStereo = 44, SPSF_CCITT_ALaw_22kHzMono = 45, SPSF_CCITT_ALaw_22kHzStereo = 46, SPSF_CCITT_ALaw_44kHzMono = 47, SPSF_CCITT_ALaw_44kHzStereo = 48, SPSF_CCITT_uLaw_8kHzMono = 49, SPSF_CCITT_uLaw_8kHzStereo = 50, SPSF_CCITT_uLaw_11kHzMono = 51, SPSF_CCITT_uLaw_11kHzStereo = 52, SPSF_CCITT_uLaw_22kHzMono = 53, SPSF_CCITT_uLaw_22kHzStereo = 54, SPSF_CCITT_uLaw_44kHzMono = 55, SPSF_CCITT_uLaw_44kHzStereo = 56, SPSF_ADPCM_8kHzMono = 57, SPSF_ADPCM_8kHzStereo = 58, SPSF_ADPCM_11kHzMono = 59, SPSF_ADPCM_11kHzStereo = 60, SPSF_ADPCM_22kHzMono = 61, SPSF_ADPCM_22kHzStereo = 62, SPSF_ADPCM_44kHzMono = 63, SPSF_ADPCM_44kHzStereo = 64, SPSF_GSM610_8kHzMono = 65, SPSF_GSM610_11kHzMono = 66, SPSF_GSM610_22kHzMono = 67, SPSF_GSM610_44kHzMono = 68, SPSF_NUM_FORMATS = 69, }} extern { pub static SPDFID_Text: GUID; pub static SPDFID_WaveFormatEx: GUID; } pub const SPREG_USER_ROOT: &'static str = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech"; pub const SPREG_LOCAL_MACHINE_ROOT: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech"; pub const SPCAT_AUDIOOUT: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioOutput"; pub const SPCAT_AUDIOIN: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioInput"; pub const SPCAT_VOICES: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices"; pub const SPCAT_RECOGNIZERS: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Recognizers"; pub const SPCAT_APPLEXICONS: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AppLexicons"; pub const SPCAT_PHONECONVERTERS: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\PhoneConverters"; pub const SPCAT_TEXTNORMALIZERS: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\TextNormalizers"; pub const SPCAT_RECOPROFILES: &'static str = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech\\RecoProfiles"; pub const SPMMSYS_AUDIO_IN_TOKEN_ID: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioInput\\TokenEnums\\MMAudioIn\\"; pub const SPMMSYS_AUDIO_OUT_TOKEN_ID: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioOutput\\TokenEnums\\MMAudioOut\\"; pub const SPCURRENT_USER_LEXICON_TOKEN_ID: &'static str = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech\\CurrentUserLexicon"; pub const SPCURRENT_USER_SHORTCUT_TOKEN_ID: &'static str = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech\\CurrentUserShortcut"; pub const SPTOKENVALUE_CLSID: &'static str = "CLSID"; pub const SPTOKENKEY_FILES: &'static str = "Files"; pub const SPTOKENKEY_UI: &'static str = "UI"; pub const SPTOKENKEY_ATTRIBUTES: &'static str = "Attributes"; pub const SPVOICECATEGORY_TTSRATE: &'static str = "DefaultTTSRate"; pub const SPPROP_RESOURCE_USAGE: &'static str = "ResourceUsage"; pub const SPPROP_HIGH_CONFIDENCE_THRESHOLD: &'static str = "HighConfidenceThreshold"; pub const SPPROP_NORMAL_CONFIDENCE_THRESHOLD: &'static str = "NormalConfidenceThreshold"; pub const SPPROP_LOW_CONFIDENCE_THRESHOLD: &'static str = "LowConfidenceThreshold"; pub const SPPROP_RESPONSE_SPEED: &'static str = "ResponseSpeed"; pub const SPPROP_COMPLEX_RESPONSE_SPEED: &'static str = "ComplexResponseSpeed"; pub const SPPROP_ADAPTATION_ON: &'static str = "AdaptationOn"; pub const SPPROP_PERSISTED_BACKGROUND_ADAPTATION: &'static str = "PersistedBackgroundAdaptation"; pub const SPPROP_PERSISTED_LANGUAGE_MODEL_ADAPTATION: &'static str = "PersistedLanguageModelAdaptation"; pub const SPPROP_UX_IS_LISTENING: &'static str = "UXIsListening"; pub const SPTOPIC_SPELLING: &'static str = "Spelling"; pub const SPWILDCARD: &'static str = "..."; pub const SPDICTATION: &'static str = "*"; pub const SPINFDICTATION: &'static str = "*+"; pub const SP_LOW_CONFIDENCE: c_char = -1; pub const SP_NORMAL_CONFIDENCE: c_char = 0; pub const SP_HIGH_CONFIDENCE: c_char = 1; pub const DEFAULT_WEIGHT: c_float = 1.0; pub const SP_MAX_WORD_LENGTH: ULONG = 128; pub const SP_MAX_PRON_LENGTH: ULONG = 384; RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)] interface ISpNotifyCallback(ISpNotifyCallbackVtbl) { fn NotifyCallback( wParam: WPARAM, lParam: LPARAM, ) -> HRESULT, }} FN!{stdcall SPNOTIFYCALLBACK( wParam: WPARAM, lParam: LPARAM, ) -> ()} RIDL!{#[uuid(0x5eff4aef, 0x8487, 0x11d2, 0x96, 0x1c, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0x28)] interface ISpNotifySource(ISpNotifySourceVtbl): IUnknown(IUnknownVtbl) { fn SetNotifySink( pNotifySink: *mut ISpNotifySink, ) -> HRESULT, fn SetNotifyWindowMessage( hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM, ) -> HRESULT, fn SetNotifyCallbackFunction( pfnCallback: SPNOTIFYCALLBACK, wParam: WPARAM, lParam: LPARAM, ) -> HRESULT, fn SetNotifyCallbackInterface( pSpCallback: *mut ISpNotifyCallback, wParam: WPARAM, lParam: LPARAM, ) -> HRESULT, fn SetNotifyWin32Event() -> HRESULT, fn WaitForNotifyEvent( dwMilliseconds: DWORD, ) -> HRESULT, fn GetNotifyEventHandle() -> HANDLE, }} RIDL!{#[uuid(0x259684dc, 0x37c3, 0x11d2, 0x96, 0x03, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0x28)] interface ISpNotifySink(ISpNotifySinkVtbl): IUnknown(IUnknownVtbl) { fn Notify() -> HRESULT, }} RIDL!{#[uuid(0xaca16614, 0x5d3d, 0x11d2, 0x96, 0x0e, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0x28)] interface ISpNotifyTranslator(ISpNotifyTranslatorVtbl): ISpNotifySink(ISpNotifySinkVtbl) { fn InitWindowMessage( hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM, ) -> HRESULT, fn InitCallback( pfnCallback: SPNOTIFYCALLBACK, wParam: WPARAM, lParam: LPARAM, ) -> HRESULT, fn InitSpNotifyCallback( pSpCallback: *mut ISpNotifyCallback, wParam: WPARAM, lParam: LPARAM, ) -> HRESULT, fn InitWin32Event( hEvent: HANDLE, fCloseHandleOnRelease: BOOL, ) -> HRESULT, fn Wait( dwMilliseconds: DWORD, ) -> HRESULT, fn GetEventHandle() -> HANDLE, }} RIDL!{#[uuid(0x14056581, 0xe16c, 0x11d2, 0xbb, 0x90, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)] interface ISpDataKey(ISpDataKeyVtbl): IUnknown(IUnknownVtbl) { fn SetData( pszValueName: LPCWSTR, cbData: ULONG, pData: *const BYTE, ) -> HRESULT, fn GetData( pszValueName: LPCWSTR, pcbData: *mut ULONG, pData: *mut BYTE, ) -> HRESULT, fn SetStringValue( pszValueName: LPCWSTR, pszValue: LPCWSTR, ) -> HRESULT, fn GetStringValue( pszValueName: LPCWSTR, ppszValue: *mut LPWSTR, ) -> HRESULT, fn SetDWORD( pszValueName: LPCWSTR, dwValue: DWORD, ) -> HRESULT, fn GetDWORD( pszValueName: LPCWSTR, pdwValue: *mut DWORD, ) -> HRESULT, fn OpenKey( pszSubKeyName: LPCWSTR, ppSubKey: *mut *mut ISpDataKey, ) -> HRESULT, fn CreateKey( pszSubKey: LPCWSTR, ppSubKey: *mut *mut ISpDataKey, ) -> HRESULT, fn DeleteKey( pszSubKey: LPCWSTR, ) -> HRESULT, fn DeleteValue( pszValueName: LPCWSTR, ) -> HRESULT, fn EnumKeys( Index: ULONG, ppszSubKeyName: *mut LPWSTR, ) -> HRESULT, fn EnumValues( Index: ULONG, ppszValueName: *mut LPWSTR, ) -> HRESULT, }} RIDL!{#[uuid(0x92a66e2b, 0xc830, 0x4149, 0x83, 0xdf, 0x6f, 0xc2, 0xba, 0x1e, 0x7a, 0x5b)] interface ISpRegDataKey(ISpRegDataKeyVtbl): ISpDataKey(ISpDataKeyVtbl) { fn SetKey( hkey: HKEY, fReadOnly: BOOL, ) -> HRESULT, }} RIDL!{#[uuid(0x2d3d3845, 0x39af, 0x4850, 0xbb, 0xf9, 0x40, 0xb4, 0x97, 0x80, 0x01, 0x1d)] interface ISpObjectTokenCategory(ISpObjectTokenCategoryVtbl): ISpDataKey(ISpDataKeyVtbl) { fn SetId( pszCategoryId: LPCWSTR, fCreateIfNotExist: BOOL, ) -> HRESULT, fn GetId( ppszCoMemCategoryId: *mut LPWSTR, ) -> HRESULT, fn GetDataKey( spdkl: SPDATAKEYLOCATION, pppDataKey: *mut *mut ISpDataKey, ) -> HRESULT, fn EnumTokens( pzsReqAttribs: LPCWSTR, pszOptAttribs: LPCWSTR, ppEnum: *mut *mut IEnumSpObjectTokens, ) -> HRESULT, fn SetDefaultTokenId( pszTokenId: LPCWSTR, ) -> HRESULT, fn GetDefaultTokenId( ppszCoMemTokenId: *mut LPWSTR, ) -> HRESULT, }} RIDL!{#[uuid(0x14056589, 0xe16c, 0x11d2, 0xbb, 0x90, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)] interface ISpObjectToken(ISpObjectTokenVtbl): ISpDataKey(ISpDataKeyVtbl) { fn SetId( pszCategoryId: LPCWSTR, pszTokenId: LPCWSTR, fCreateIfNotExist: BOOL, ) -> HRESULT, fn GetId( ppszCoMemTokenId: *mut LPWSTR, ) -> HRESULT, fn GetCategory( ppTokenCategory: *mut *mut ISpObjectTokenCategory, ) -> HRESULT, fn CreateInstance( pUnkOuter: *mut IUnknown, dwClsContext: DWORD, riid: REFIID, ppvObject: *mut *mut c_void, ) -> HRESULT, fn GetStorageFileName( clsidCaller: REFCLSID, pszValueName: LPCWSTR, pszFileNameSpecifier: LPCWSTR, nFolder: ULONG, ppszFilePath: *mut LPWSTR, ) -> HRESULT, fn RemoveStorageFileName( pszKeyName: LPCWSTR, fDeleteFile: BOOL, ) -> HRESULT, fn Remove( pclsidCaller: *const CLSID, ) -> HRESULT, fn IsUISupported( pszTypeOfUI: LPCWSTR, pvExtraData: *mut c_void, cbExtraData: ULONG, punkObject: *mut IUnknown, pfSupported: *mut BOOL, ) -> HRESULT, fn DisplayUI( hwndParent: HWND, pszTitle: LPCWSTR, pszTypeOfUI: LPCWSTR, pvExtraData: *mut c_void, cbExtraData: ULONG, punkObject: *mut IUnknown, ) -> HRESULT, fn MatchesAttributes( pszAttributes: LPCWSTR, pfMatches: *mut BOOL, ) -> HRESULT, }} RIDL!{#[uuid(0xb8aab0cf, 0x346f, 0x49d8, 0x94, 0x99, 0xc8, 0xb0, 0x3f, 0x16, 0x1d, 0x51)] interface ISpObjectTokenInit(ISpObjectTokenInitVtbl): ISpObjectToken(ISpObjectTokenVtbl) { fn InitFromDataKey( pszCategoryId: LPCWSTR, pszTokenId: LPCWSTR, pDataKey: *mut ISpDataKey, ) -> HRESULT, }} RIDL!{#[uuid(0x06b64f9e, 0x7fda, 0x11d2, 0xb4, 0xf2, 0x00, 0xc0, 0x4f, 0x79, 0x73, 0x96)] interface IEnumSpObjectTokens(IEnumSpObjectTokensVtbl): IUnknown(IUnknownVtbl) { fn Next( celt: ULONG, pelt: *mut *mut ISpObjectToken, pceltFetched: *mut ULONG, ) -> HRESULT, fn Skip( celt: ULONG, ) -> HRESULT, fn Reset() -> HRESULT, fn Clone( ppEnum: *mut *mut IEnumSpObjectTokens, ) -> HRESULT, fn Item( Index: ULONG, ppToken: *mut *mut ISpObjectToken, ) -> HRESULT, fn GetCount( pCount: *mut ULONG, ) -> HRESULT, }} RIDL!{#[uuid(0x5b559f40, 0xe952, 0x11d2, 0xbb, 0x91, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)] interface ISpObjectWithToken(ISpObjectWithTokenVtbl): IUnknown(IUnknownVtbl) { fn SetObjectToken( pToken: *mut ISpObjectToken, ) -> HRESULT, fn GetObjectToken( ppToken: *mut *mut ISpObjectToken, ) -> HRESULT, }} RIDL!{#[uuid(0x93384e18, 0x5014, 0x43d5, 0xad, 0xbb, 0xa7, 0x8e, 0x05, 0x59, 0x26, 0xbd)] interface ISpResourceManager(ISpResourceManagerVtbl): IServiceProvider(IServiceProviderVtbl) { fn SetObject( guidServiceId: REFGUID, pUnkObject: *mut IUnknown, ) -> HRESULT, fn GetObject( guidServiceId: REFGUID, ObjectCLSID: REFCLSID, ObjectIID: REFIID, fReleaseWhenLastExternalRefReleased: BOOL, ppObject: *mut *mut c_void, ) -> HRESULT, }} ENUM!{enum SPEVENTLPARAMTYPE { SPET_LPARAM_IS_UNDEFINED = 0, SPET_LPARAM_IS_TOKEN, SPET_LPARAM_IS_OBJECT, SPET_LPARAM_IS_POINTER, SPET_LPARAM_IS_STRING, }} ENUM!{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_PRIVATE = 52, SPEI_MIN_SR = 34, SPEI_MAX_SR = 52, SPEI_RESERVED1 = 30, SPEI_RESERVED2 = 33, SPEI_RESERVED3 = 63, }} pub const SPFEI_FLAGCHECK: ULONGLONG = (1 << SPEI_RESERVED1) | (1 << SPEI_RESERVED2); pub const SPFEI_ALL_TTS_EVENTS: ULONGLONG = 0x000000000000FFFE | SPFEI_FLAGCHECK; pub const SPFEI_ALL_SR_EVENTS: ULONGLONG = 0x003FFFFC00000000 | SPFEI_FLAGCHECK; pub const SPFEI_ALL_EVENTS: ULONGLONG = 0xEFFFFFFFFFFFFFFF; #[inline] pub fn SPFEI( SPEI_ord: SPEVENTENUM, ) -> ULONGLONG { (1 << SPEI_ord) | SPFEI_FLAGCHECK } STRUCT!{struct SPEVENT { bitfields: DWORD, ulStreamNum: ULONG, ullAudioStreamOffset: ULONGLONG, wParam: WPARAM, lParam: LPARAM, }} BITFIELD!{SPEVENT bitfields: SPEVENTENUM [ eEventId set_eEventId[0..16], ]} BITFIELD!{SPEVENT bitfields: SPEVENTLPARAMTYPE [ elParamType set_elParamType[16..32], ]} STRUCT!{struct SPSERIALIZEDEVENT { bitfields: DWORD, ulStreamNum: ULONG, ullAudioStreamOffset: ULONGLONG, SerializedwParam: ULONG, SerializedlParam: LONG, }} BITFIELD!{SPSERIALIZEDEVENT bitfields: SPEVENTENUM [ eEventId set_eEventId[0..16], ]} BITFIELD!{SPSERIALIZEDEVENT bitfields: SPEVENTLPARAMTYPE [ elParamType set_elParamType[16..32], ]} STRUCT!{struct SPSERIALIZEDEVENT64 { bitfields: DWORD, ulStreamNum: ULONG, ullAudioStreamOffset: ULONGLONG, SerializedwParam: ULONGLONG, SerializedlParam: LONGLONG, }} BITFIELD!{SPSERIALIZEDEVENT64 bitfields: SPEVENTENUM [ eEventId set_eEventId[0..16], ]} BITFIELD!{SPSERIALIZEDEVENT64 bitfields: SPEVENTLPARAMTYPE [ elParamType set_elParamType[16..32], ]} ENUM!{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, }} ENUM!{enum SPENDSRSTREAMFLAGS { SPESF_NONE = 0, SPESF_STREAM_RELEASED = 1 << 0, SPESF_EMULATED = 1 << 1, }} ENUM!{enum SPVFEATURE { SPVFEATURE_STRESSED = 1 << 0, SPVFEATURE_EMPHASIS = 1 << 1, }} ENUM!{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, }} STRUCT!{struct SPEVENTSOURCEINFO { ullEventInterest: ULONGLONG, ullQueuedInterest: ULONGLONG, ulCount: ULONG, }} RIDL!{#[uuid(0xbe7a9cce, 0x5f9e, 0x11d2, 0x96, 0x0f, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0x28)] interface ISpEventSource(ISpEventSourceVtbl): ISpNotifySource(ISpNotifySourceVtbl) { fn SetInterest( ullEventInterest: ULONGLONG, ullQueuedInterest: ULONGLONG, ) -> HRESULT, fn GetEvents( ulCount: ULONG, pEventArray: *mut SPEVENT, pulFetched: *mut ULONG, ) -> HRESULT, fn GetInfo( pInfo: *mut SPEVENTSOURCEINFO, ) -> HRESULT, }} RIDL!{#[uuid(0xbe7a9cc9, 0x5f9e, 0x11d2, 0x96, 0x0f, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0x28)] interface ISpEventSink(ISpEventSinkVtbl): IUnknown(IUnknownVtbl) { fn AddEvents( pEventArray: *const SPEVENT, ulCount: ULONG, ) -> HRESULT, fn GetEventInterest( pullEventInterest: *mut ULONGLONG, ) -> HRESULT, }} RIDL!{#[uuid(0xbed530be, 0x2606, 0x4f4d, 0xa1, 0xc0, 0x54, 0xc5, 0xcd, 0xa5, 0x56, 0x6f)] interface ISpStreamFormat(ISpStreamFormatVtbl): IStream(IStreamVtbl) { fn GetFormat( pguidFormatId: *mut GUID, ppCoMemWaveFormatEx: *mut *mut WAVEFORMATEX, ) -> HRESULT, }} ENUM!{enum SPFILEMODE { SPFM_OPEN_READONLY, SPFM_OPEN_READWRITE, SPFM_CREATE, SPFM_CREATE_ALWAYS, SPFM_NUM_MODES, }} RIDL!{#[uuid(0x12e3cca9, 0x7518, 0x44c5, 0xa5, 0xe7, 0xba, 0x5a, 0x79, 0xcb, 0x92, 0x9e)] interface ISpStream(ISpStreamVtbl): ISpStreamFormat(ISpStreamFormatVtbl) { fn SetBaseStream( pStream: *mut IStream, rguidFormat: REFGUID, pWaveFormatEx: *const WAVEFORMATEX, ) -> HRESULT, fn GetBaseStream( ppStream: *mut *mut IStream, ) -> HRESULT, fn BindToFile( pszFileName: LPCWSTR, eMode: SPFILEMODE, pFormatId: *const GUID, pWaveFormatEx: *const WAVEFORMATEX, ullEventInterest: ULONGLONG, ) -> HRESULT, fn Close() -> HRESULT, }} RIDL!{#[uuid(0x678a932c, 0xea71, 0x4446, 0x9b, 0x41, 0x78, 0xfd, 0xa6, 0x28, 0x0a, 0x29)] interface ISpStreamFormatConverter(ISpStreamFormatConverterVtbl): ISpStreamFormat(ISpStreamFormatVtbl) { fn SetBaseStream( pStream: *mut ISpStreamFormat, fSetFormatToBaseStreamFormat: BOOL, fWriteToBaseStream: BOOL, ) -> HRESULT, fn GetBaseStream( ppStream: *mut *mut ISpStreamFormat, ) -> HRESULT, fn SetFormat( rguidFormatIdOfConvertedStream: REFGUID, pWaveFormatExOfConvertedStream: *const WAVEFORMATEX, ) -> HRESULT, fn ResetSeekPosition() -> HRESULT, fn ScaleConvertedToBaseOffset( ullOffsetConvertedStream: ULONGLONG, pullOffsetBaseStream: *mut ULONGLONG, ) -> HRESULT, fn ScaleBaseToConvertedOffset( ullOffsetBaseStream: ULONGLONG, pullOffsetConvertedStream: *mut ULONGLONG, ) -> HRESULT, }} ENUM!{enum SPAUDIOSTATE { SPAS_CLOSED, SPAS_STOP, SPAS_PAUSE, SPAS_RUN, }} STRUCT!{struct SPAUDIOSTATUS { cbFreeBuffSpace: c_long, cbNonBlockingIO: ULONG, State: SPAUDIOSTATE, CurSeekPos: ULONGLONG, CurDevicePos: ULONGLONG, dwAudioLevel: DWORD, dwReserved2: DWORD, }} STRUCT!{struct SPAUDIOBUFFERINFO { ulMsMinNotification: ULONG, ulMsBufferSize: ULONG, ulMsEventBias: ULONG, }} RIDL!{#[uuid(0xc05c768f, 0xfae8, 0x4ec2, 0x8e, 0x07, 0x33, 0x83, 0x21, 0xc1, 0x24, 0x52)] interface ISpAudio(ISpAudioVtbl): ISpStreamFormat(ISpStreamFormatVtbl) { fn SetState( NewState: SPAUDIOSTATE, ullReserved: ULONGLONG, ) -> HRESULT, fn SetFormat( rguidFmtId: REFGUID, pWaveFormatEx: *const WAVEFORMATEX, ) -> HRESULT, fn GetStatus( pStatus: *mut SPAUDIOSTATUS, ) -> HRESULT, fn SetBufferInfo( pBuffInfo: *const SPAUDIOBUFFERINFO, ) -> HRESULT, fn GetBufferInfo( pBuffInfo: *mut SPAUDIOBUFFERINFO, ) -> HRESULT, fn GetDefaultFormat( pFormatId: *mut GUID, ppCoMemWaveFormatEx: *mut *mut WAVEFORMATEX, ) -> HRESULT, fn EventHandle() -> HANDLE, fn GetVolumeLevel( pLevel: *mut ULONG, ) -> HRESULT, fn SetVolumeLevel( Level: ULONG, ) -> HRESULT, fn GetBufferNotifySize( pcbSize: *mut ULONG, ) -> HRESULT, fn SetBufferNotifySize( cbSize: ULONG, ) -> HRESULT, }} RIDL!{#[uuid(0x15806f6e, 0x1d70, 0x4b48, 0x98, 0xe6, 0x3b, 0x1a, 0x00, 0x75, 0x09, 0xab)] interface ISpMMSysAudio(ISpMMSysAudioVtbl): ISpAudio(ISpAudioVtbl) { fn GetDeviceId( puDeviceId: *mut UINT, ) -> HRESULT, fn SetDeviceId( uDeviceId: UINT, ) -> HRESULT, fn GetMMHandle( pHandle: *mut *mut c_void, ) -> HRESULT, fn GetLineId( puLineId: *mut UINT, ) -> HRESULT, fn SetLineId( uLineId: UINT, ) -> HRESULT, }} RIDL!{#[uuid(0x10f63bce, 0x201a, 0x11d3, 0xac, 0x70, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)] interface ISpTranscript(ISpTranscriptVtbl): IUnknown(IUnknownVtbl) { fn GetTranscript( ppszTranscript: *mut LPWSTR, ) -> HRESULT, fn AppendTranscript( pszTranscript: LPCWSTR, ) -> HRESULT, }} ENUM!{enum SPDISPLAYATTRIBUTES { SPAF_ONE_TRAILING_SPACE = 0x2, SPAF_TWO_TRAILING_SPACES = 0x4, SPAF_CONSUME_LEADING_SPACES = 0x8, SPAF_ALL = 0xf, }} pub type SPPHONEID = WCHAR; pub type PSPPHONEID = LPWSTR; pub type PCSPPHONEID = LPCWSTR; STRUCT!{struct SPPHRASEELEMENT { ulAudioTimeOffset: ULONG, ulAudioSizeTime: ULONG, ulAudioStreamOffset: ULONG, ulAudioSizeBytes: ULONG, ulRetainedStreamOffset: ULONG, ulRetainedSizeBytes: ULONG, pszDisplayText: LPCWSTR, pszLexicalForm: LPCWSTR, pszPronunciation: *const SPPHONEID, bDisplayAttributes: BYTE, RequiredConfidence: c_char, ActualConfidence: c_char, Reserved: BYTE, SREngineConfidence: c_float, }} STRUCT!{struct SPPHRASERULE { pszName: LPCWSTR, ulId: ULONG, ulFirstElement: ULONG, ulCountOfElements: ULONG, pNextSibling: *const SPPHRASERULE, pFirstChild: *const SPPHRASERULE, SREngineConfidence: c_float, Confidence: c_char, }} ENUM!{enum SPPHRASEPROPERTYUNIONTYPE { SPPPUT_UNUSED = 0, SPPPUT_ARRAY_INDEX, }} STRUCT!{struct SPPHRASEPROPERTY_u_s { bType: byte, bReserved: byte, usArrayIndex: c_ushort, }} UNION!{union SPPHRASEPROPERTY_u { [u32; 1], ulId ulId_mut: ULONG, s s_mut: SPPHRASEPROPERTY_u_s, }} STRUCT!{struct SPPHRASEPROPERTY { pszName: LPCWSTR, u: SPPHRASEPROPERTY_u_s, pszValue: LPCWSTR, vValue: VARIANT, ulFirstElement: ULONG, ulCountOfElements: ULONG, pNextSibling: *const SPPHRASEPROPERTY, pFirstChild: *const SPPHRASEPROPERTY, SREngineConfidence: c_float, Confidence: c_char, }} STRUCT!{struct SPPHRASEREPLACEMENT { bDisplayAttributes: BYTE, pszReplacementText: LPCWSTR, ulFirstElement: ULONG, ulCountOfElements: ULONG, }} 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, }} STRUCT!{struct SPSERIALIZEDPHRASE { ulSerializedSize: ULONG, }} ENUM!{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, }} STRUCT!{struct SPBINARYGRAMMAR { ulTotalSerializedSize: ULONG, }} ENUM!{enum SPPHRASERNG { SPPR_ALL_ELEMENTS = -1i32 as u32, }} pub const SP_GETWHOLEPHRASE: SPPHRASERNG = SPPR_ALL_ELEMENTS; pub const SPRR_ALL_ELEMENTS: SPPHRASERNG = SPPR_ALL_ELEMENTS; DECLARE_HANDLE!{SPSTATEHANDLE, SPSTATEHANDLE__} ENUM!{enum SPRECOEVENTFLAGS { SPREF_AutoPause = 1 << 0, SPREF_Emulated = 1 << 1, }} ENUM!{enum SPPARTOFSPEECH { SPPS_NotOverriden = -1i32 as u32, SPPS_Unknown = 0, SPPS_Noun = 0x1000, SPPS_Verb = 0x2000, SPPS_Modifier = 0x3000, SPPS_Function = 0x4000, SPPS_Interjection = 0x5000, }} ENUM!{enum SPLEXICONTYPE { eLEXTYPE_USER = 1 << 0, eLEXTYPE_APP = 1 << 1, eLEXTYPE_VENDORLEXICON = 1 << 2, eLEXTYPE_LETTERTOSOUND = 1 << 3, eLEXTYPE_MORPHOLOGY = 1 << 4, eLEXTYPE_RESERVED4 = 1 << 5, eLEXTYPE_USER_SHORTCUT = 1 << 6, eLEXTYPE_RESERVED6 = 1 << 7, eLEXTYPE_RESERVED7 = 1 << 8, eLEXTYPE_RESERVED8 = 1 << 9, eLEXTYPE_RESERVED9 = 1 << 10, eLEXTYPE_RESERVED10 = 1 << 11, eLEXTYPE_PRIVATE1 = 1 << 12, eLEXTYPE_PRIVATE2 = 1 << 13, eLEXTYPE_PRIVATE3 = 1 << 14, eLEXTYPE_PRIVATE4 = 1 << 15, eLEXTYPE_PRIVATE5 = 1 << 16, eLEXTYPE_PRIVATE6 = 1 << 17, eLEXTYPE_PRIVATE7 = 1 << 18, eLEXTYPE_PRIVATE8 = 1 << 19, eLEXTYPE_PRIVATE9 = 1 << 20, eLEXTYPE_PRIVATE10 = 1 << 21, eLEXTYPE_PRIVATE11 = 1 << 22, eLEXTYPE_PRIVATE12 = 1 << 23, eLEXTYPE_PRIVATE13 = 1 << 24, eLEXTYPE_PRIVATE14 = 1 << 25, eLEXTYPE_PRIVATE15 = 1 << 26, eLEXTYPE_PRIVATE16 = 1 << 27, eLEXTYPE_PRIVATE17 = 1 << 28, eLEXTYPE_PRIVATE18 = 1 << 29, eLEXTYPE_PRIVATE19 = 1 << 30, eLEXTYPE_PRIVATE20 = 1 << 31, }} ENUM!{enum SPWORDTYPE { eWORDTYPE_ADDED = 1 << 0, eWORDTYPE_DELETED = 1 << 1, }} STRUCT!{struct SPWORDPRONUNCIATION { pNextWordPronunciation: *mut SPWORDPRONUNCIATION, eLexiconType: SPLEXICONTYPE, LangID: WORD, wPronunciationFlags: WORD, ePartOfSpeech: SPPARTOFSPEECH, szPronunciation: [SPPHONEID; 1], }} STRUCT!{struct SPWORDPRONUNCIATIONLIST { ulSize: ULONG, pvBuffer: *mut BYTE, pFirstWordPronunciation: *mut SPWORDPRONUNCIATION, }} STRUCT!{struct SPWORD { pNextWord: *mut SPWORD, LangID: WORD, wReserved: WORD, eWordType: SPWORDTYPE, pszWord: LPWSTR, pFirstWordPronunciation: *mut SPWORDPRONUNCIATION, }} STRUCT!{struct SPWORDLIST { ulSize: ULONG, pvBuffer: *mut BYTE, pFirstWord: *mut SPWORD, }} RIDL!{#[uuid(0xda41a7c2, 0x5383, 0x4db2, 0x91, 0x6b, 0x6c, 0x17, 0x19, 0xe3, 0xdb, 0x58)] interface ISpLexicon(ISpLexiconVtbl): IUnknown(IUnknownVtbl) { fn GetPronunciations( pszWord: LPCWSTR, LangID: WORD, dwFlags: DWORD, pWordPronunciationList: *mut SPWORDPRONUNCIATIONLIST, ) -> HRESULT, fn AddPronunciation( pszWord: LPCWSTR, LangID: WORD, ePartOfSpeech: SPPARTOFSPEECH, pszPronunciation: PCSPPHONEID, ) -> HRESULT, fn RemovePronunciation( pszWord: LPCWSTR, LangID: WORD, ePartOfSpeech: SPPARTOFSPEECH, pszPronunciation: PCSPPHONEID, ) -> HRESULT, fn GetGeneration( pdwGeneration: *mut DWORD, ) -> HRESULT, fn GetGenerationChange( dwFlags: DWORD, pdwGeneration: *mut DWORD, pWordList: *mut SPWORDLIST, ) -> HRESULT, fn GetWords( dwFlags: DWORD, pdwGeneration: *mut DWORD, pdwCookie: *mut DWORD, pWordList: *mut SPWORDLIST, ) -> HRESULT, }} RIDL!{#[uuid(0x8565572f, 0xc094, 0x41cc, 0xb5, 0x6e, 0x10, 0xbd, 0x9c, 0x3f, 0xf0, 0x44)] interface ISpContainerLexicon(ISpContainerLexiconVtbl): ISpLexicon(ISpLexiconVtbl) { fn AddLexicon( pAddLexicon: *mut ISpLexicon, dwFlags: DWORD, ) -> HRESULT, }} RIDL!{#[uuid(0x8445c581, 0x0cac, 0x4a38, 0xab, 0xfe, 0x9b, 0x2c, 0xe2, 0x82, 0x64, 0x55)] interface ISpPhoneConverter(ISpPhoneConverterVtbl): ISpObjectWithToken(ISpObjectWithTokenVtbl) { fn PhoneToId( pszPhone: LPCWSTR, pId: *mut SPPHONEID, ) -> HRESULT, fn IdToPhone( pId: PCSPPHONEID, pszPhone: *mut WCHAR, ) -> HRESULT, }} STRUCT!{struct SPVPITCH { MiddleAdj: c_long, RangeAdj: c_long, }} ENUM!{enum SPVACTIONS { SPVA_Speak = 0, SPVA_Silence, SPVA_Pronounce, SPVA_Bookmark, SPVA_SpellOut, SPVA_Section, SPVA_ParseUnknownTag, }} STRUCT!{struct SPVCONTEXT { pCategory: LPCWSTR, pBefore: LPCWSTR, pAfter: LPCWSTR, }} STRUCT!{struct SPVSTATE { eAction: SPVACTIONS, LangID: WORD, wReserved: WORD, EmphAdj: c_long, RateAdj: c_long, Volume: ULONG, PitchAdj: SPVPITCH, SilenceMSecs: ULONG, pPhoneIds: *mut SPPHONEID, ePartOfSpeech: SPPARTOFSPEECH, Context: SPVCONTEXT, }} ENUM!{enum SPRUNSTATE { SPRS_DONE = 1 << 0, SPRS_IS_SPEAKING = 1 << 1, }} ENUM!{enum SPVLIMITS { SPMIN_VOLUME = 0, SPMAX_VOLUME = 100, SPMIN_RATE = -10i32 as u32, SPMAX_RATE = 10, }} ENUM!{enum SPVPRIORITY { SPVPRI_NORMAL = 0, SPVPRI_ALERT = 1 << 0, SPVPRI_OVER = 1 << 1, }} STRUCT!{struct SPVOICESTATUS { ulCurrentStream: ULONG, ulLastStreamQueued: ULONG, hrLastResult: HRESULT, dwRunningState: DWORD, ulInputWordPos: ULONG, ulInputWordLen: ULONG, ulInputSentPos: ULONG, ulInputSentLen: ULONG, lBookmarkId: LONG, PhonemeId: SPPHONEID, VisemeId: SPVISEMES, dwReserved1: DWORD, dwReserved2: DWORD, }} ENUM!{enum SPEAKFLAGS { SPF_DEFAULT = 0, SPF_ASYNC = 1 << 0, SPF_PURGEBEFORESPEAK = 1 << 1, SPF_IS_FILENAME = 1 << 2, SPF_IS_XML = 1 << 3, SPF_IS_NOT_XML = 1 << 4, SPF_PERSIST_XML = 1 << 5, SPF_NLP_SPEAK_PUNC = 1 << 6, SPF_NLP_MASK = SPF_NLP_SPEAK_PUNC, SPF_VOICE_MASK = SPF_ASYNC | SPF_PURGEBEFORESPEAK | SPF_IS_FILENAME | SPF_IS_XML | SPF_IS_NOT_XML | SPF_NLP_MASK | SPF_PERSIST_XML, SPF_UNUSED_FLAGS = !SPF_VOICE_MASK, }} RIDL!{#[uuid(0x6c44df74, 0x72b9, 0x4992, 0xa1, 0xec, 0xef, 0x99, 0x6e, 0x04, 0x22, 0xd4)] interface ISpVoice(ISpVoiceVtbl): ISpEventSource(ISpEventSourceVtbl) { fn SetOutput( pUnkOutput: *mut IUnknown, fAllowFormatChanges: BOOL, ) -> HRESULT, fn GetOutputObjectToken( ppObjectToken: *mut *mut ISpObjectToken, ) -> HRESULT, fn GetOutputStream( ppStream: *mut *mut ISpStreamFormat, ) -> HRESULT, fn Pause() -> HRESULT, fn Resume() -> HRESULT, fn SetVoice( pToken: *mut ISpObjectToken, ) -> HRESULT, fn GetVoice( ppToken: *mut *mut ISpObjectToken, ) -> HRESULT, fn Speak( pwcs: LPCWSTR, dwFlags: DWORD, pulStreamNumber: *mut ULONG, ) -> HRESULT, fn SpeakStream( pStream: *mut IStream, dwFlags: DWORD, pulStreamNumber: *mut ULONG, ) -> HRESULT, fn GetStatus( pStatus: *mut SPVOICESTATUS, ppszLastBookmark: *mut LPWSTR, ) -> HRESULT, fn Skip( pItemType: LPCWSTR, lNumItems: c_long, pulNumSkipped: *mut ULONG, ) -> HRESULT, fn SetPriority( ePriority: SPVPRIORITY, ) -> HRESULT, fn GetPriority( pePriority: *mut SPVPRIORITY, ) -> HRESULT, fn SetAlertBoundary( eBoundary: SPEVENTENUM, ) -> HRESULT, fn GetAlertBoundary( peBoundary: *mut SPEVENTENUM, ) -> HRESULT, fn SetRate( RateAdjust: c_long, ) -> HRESULT, fn GetRate( pRateAdjust: *mut c_long, ) -> HRESULT, fn SetVolume( usVolume: USHORT, ) -> HRESULT, fn GetVolume( pusVolume: *mut USHORT, ) -> HRESULT, fn WaitUntilDone( msTimeout: ULONG, ) -> HRESULT, fn SetSyncSpeakTimeout( msTimeout: ULONG, ) -> HRESULT, fn GetSyncSpeakTimeout( pmsTimeout: *mut ULONG, ) -> HRESULT, fn SpeakCompleteEvent() -> HANDLE, fn IsUISupported( pszTypeOfUI: LPCWSTR, pvExtraData: *mut c_void, cbExtraData: ULONG, pfSupported: *mut BOOL, ) -> HRESULT, fn DisplayUI( hwndParent: HWND, pszTitle: LPCWSTR, pszTypeOfUI: LPCWSTR, pvExtraData: *mut c_void, cbExtraData: ULONG, ) -> HRESULT, }} RIDL!{#[uuid(0x1a5c0354, 0xb621, 0x4b5a, 0x87, 0x91, 0xd3, 0x06, 0xed, 0x37, 0x9e, 0x53)] interface ISpPhrase(ISpPhraseVtbl): IUnknown(IUnknownVtbl) { fn GetPhrase( ppCoMemPhrase: *mut *mut SPPHRASE, ) -> HRESULT, fn GetSerializedPhrase( ppCoMemPhrase: *mut *mut SPSERIALIZEDPHRASE, ) -> HRESULT, fn GetText( ulStart: ULONG, ulCount: ULONG, fUseTextReplacements: BOOL, ppszCoMemText: *mut LPWSTR, pbDisplayAttributes: *mut BYTE, ) -> HRESULT, fn Discard( dwValueTypes: DWORD, ) -> HRESULT, }} RIDL!{#[uuid(0x8fcebc98, 0x4e49, 0x4067, 0x9c, 0x6c, 0xd8, 0x6a, 0x0e, 0x09, 0x2e, 0x3d)] interface ISpPhraseAlt(ISpPhraseAltVtbl): ISpPhrase(ISpPhraseVtbl) { fn GetAltInfo( pParent: *mut *mut ISpPhrase, pulStartElementInParent: *mut ULONG, pcElementsInParent: *mut ULONG, pcElementsInAlt: *mut ULONG, ) -> HRESULT, fn Commit() -> HRESULT, }} STRUCT!{struct SPRECORESULTTIMES { ftStreamTime: FILETIME, ullLength: ULONGLONG, dwTickCount: DWORD, ullStart: ULONGLONG, }} STRUCT!{struct SPSERIALIZEDRESULT { ulSerializedSize: ULONG, }} RIDL!{#[uuid(0x20b053be, 0xe235, 0x43cd, 0x9a, 0x2a, 0x8d, 0x17, 0xa4, 0x8b, 0x78, 0x42)] interface ISpRecoResult(ISpRecoResultVtbl): ISpPhrase(ISpPhraseVtbl) { fn GetResultTimes( pTimes: *mut SPRECORESULTTIMES, ) -> HRESULT, fn GetAlternates( ulStartElement: ULONG, cElements: ULONG, ulRequestCount: ULONG, ppPhrases: *mut *mut ISpPhraseAlt, pcPhrasesReturned: *mut ULONG, ) -> HRESULT, fn GetAudio( ulStartElement: ULONG, cElements: ULONG, ppStream: *mut *mut ISpStreamFormat, ) -> HRESULT, fn SpeakAudio( ulStartElement: ULONG, cElements: ULONG, dwFlags: DWORD, pulStreamNumber: *mut ULONG, ) -> HRESULT, fn Serialize( ppCoMemSerializedResult: *mut *mut SPSERIALIZEDRESULT, ) -> HRESULT, fn ScaleAudio( pAudioFormatId: *const GUID, pWaveFormatEx: *const WAVEFORMATEX, ) -> HRESULT, fn GetRecoContext( ppRecoContext: *mut *mut ISpRecoContext, ) -> HRESULT, }} STRUCT!{struct SPTEXTSELECTIONINFO { ulStartActiveOffset: ULONG, cchActiveChars: ULONG, ulStartSelection: ULONG, cchSelection: ULONG, }} ENUM!{enum SPWORDPRONOUNCEABLE { SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE = 0, SPWP_UNKNOWN_WORD_PRONOUNCEABLE = 1, SPWP_KNOWN_WORD_PRONOUNCEABLE = 2, }} ENUM!{enum SPGRAMMARSTATE { SPGS_DISABLED = 0, SPGS_ENABLED = 1, SPGS_EXCLUSIVE = 3, }} ENUM!{enum SPCONTEXTSTATE { SPCS_DISABLED = 0, SPCS_ENABLED = 1, }} ENUM!{enum SPRULESTATE { SPRS_INACTIVE = 0, SPRS_ACTIVE = 1, SPRS_ACTIVE_WITH_AUTO_PAUSE = 3, }} pub const SP_STREAMPOS_ASAP: ULONGLONG = 0; pub const SP_STREAMPOS_REALTIME: ULONGLONG = -1i64 as u64; pub const SPRULETRANS_TEXTBUFFER: SPSTATEHANDLE = -1isize as SPSTATEHANDLE; pub const SPRULETRANS_WILDCARD: SPSTATEHANDLE = -2isize as SPSTATEHANDLE; pub const SPRULETRANS_DICTATION: SPSTATEHANDLE = -3isize as SPSTATEHANDLE; ENUM!{enum SPGRAMMARWORDTYPE { SPWT_DISPLAY, SPWT_LEXICAL, SPWT_PRONUNCIATION, SPWT_LEXICAL_NO_SPECIAL_CHARS, }} STRUCT!{struct SPPROPERTYINFO { pszName: LPCWSTR, ulId: ULONG, pszValue: LPCWSTR, vValue: VARIANT, }} ENUM!{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_AutoPause = 1 << 16, }} RIDL!{#[uuid(0x8137828f, 0x591a, 0x4a42, 0xbe, 0x58, 0x49, 0xea, 0x7e, 0xba, 0xac, 0x68)] interface ISpGrammarBuilder(ISpGrammarBuilderVtbl): IUnknown(IUnknownVtbl) { fn ResetGrammar( NewLanguage: WORD, ) -> HRESULT, fn GetRule( pszRuleName: LPCWSTR, dwRuleId: DWORD, dwAttributes: DWORD, fCreateIfNotExist: BOOL, phInitialState: *mut SPSTATEHANDLE, ) -> HRESULT, fn ClearRule( hState: SPSTATEHANDLE, ) -> HRESULT, fn CreateNewState( hState: SPSTATEHANDLE, phState: *mut SPSTATEHANDLE, ) -> HRESULT, fn AddWordTransition( hFromState: SPSTATEHANDLE, hToState: SPSTATEHANDLE, psz: LPCWSTR, pszSeparators: LPCWSTR, eWordType: SPGRAMMARWORDTYPE, Weight: c_float, pPropInfo: *const SPPROPERTYINFO, ) -> HRESULT, fn AddRuleTransition( hFromState: SPSTATEHANDLE, hToState: SPSTATEHANDLE, hRule: SPSTATEHANDLE, Weight: c_float, pPropInfo: *const SPPROPERTYINFO, ) -> HRESULT, fn AddResource( hRuleState: SPSTATEHANDLE, pszResourceName: LPCWSTR, pszResourceValue: LPCWSTR, ) -> HRESULT, fn Commit( dwReserved: DWORD, ) -> HRESULT, }} ENUM!{enum SPLOADOPTIONS { SPLO_STATIC = 0, SPLO_DYNAMIC = 1, }} RIDL!{#[uuid(0x2177db29, 0x7f45, 0x47d0, 0x85, 0x54, 0x06, 0x7e, 0x91, 0xc8, 0x05, 0x02)] interface ISpRecoGrammar(ISpRecoGrammarVtbl): ISpGrammarBuilder(ISpGrammarBuilderVtbl) { fn GetGrammarId( pullGrammarId: *mut ULONGLONG, ) -> HRESULT, fn GetRecoContext( ppRecoCtxt: *mut *mut ISpRecoContext, ) -> HRESULT, fn LoadCmdFromFile( pszFileName: LPCWSTR, Options: SPLOADOPTIONS, ) -> HRESULT, fn LoadCmdFromObject( rcid: REFCLSID, pszGrammarName: LPCWSTR, Options: SPLOADOPTIONS, ) -> HRESULT, fn LoadCmdFromResource( hModule: HMODULE, pszResourceName: LPCWSTR, pszResourceType: LPCWSTR, wLanguage: WORD, Options: SPLOADOPTIONS, ) -> HRESULT, fn LoadCmdFromMemory( pGrammar: *const SPBINARYGRAMMAR, Options: SPLOADOPTIONS, ) -> HRESULT, fn LoadCmdFromProprietaryGrammar( rguidParam: REFGUID, pszStringParam: LPCWSTR, pvDataPrarm: *const c_void, cbDataSize: ULONG, Options: SPLOADOPTIONS, ) -> HRESULT, fn SetRuleState( pszName: LPCWSTR, pReserved: *mut c_void, NewState: SPRULESTATE, ) -> HRESULT, fn SetRuleIdState( ulRuleId: ULONG, NewState: SPRULESTATE, ) -> HRESULT, fn LoadDictation( pszTopicName: LPCWSTR, Options: SPLOADOPTIONS, ) -> HRESULT, fn UnloadDictation() -> HRESULT, fn SetDictationState( NewState: SPRULESTATE, ) -> HRESULT, fn SetWordSequenceData( pText: *const WCHAR, cchText: ULONG, pInfo: *const SPTEXTSELECTIONINFO, ) -> HRESULT, fn SetTextSelection( pInfo: *const SPTEXTSELECTIONINFO, ) -> HRESULT, fn IsPronounceable( pszWord: LPCWSTR, pWordPronounceable: *mut SPWORDPRONOUNCEABLE, ) -> HRESULT, fn SetGrammarState( eGrammarState: SPGRAMMARSTATE, ) -> HRESULT, fn SaveCmd( pStream: *mut IStream, ppszCoMemErrorText: *mut LPWSTR, ) -> HRESULT, fn GetGrammarState( peGrammarState: *mut SPGRAMMARSTATE, ) -> HRESULT, }} STRUCT!{struct SPRECOCONTEXTSTATUS { eInterference: SPINTERFERENCE, szRequestTypeOfUI: [WCHAR; 255], dwReserved1: DWORD, dwReserved2: DWORD, }} ENUM!{enum SPBOOKMARKOPTIONS { SPBO_NONE = 0, SPBO_PAUSE = 1 << 0, }} ENUM!{enum SPAUDIOOPTIONS { SPAO_NONE = 0, SPAO_RETAIN_AUDIO = 1 << 0, }} RIDL!{#[uuid(0xf740a62f, 0x7c15, 0x489e, 0x82, 0x34, 0x94, 0x0a, 0x33, 0xd9, 0x27, 0x2d)] interface ISpRecoContext(ISpRecoContextVtbl): ISpEventSource(ISpEventSourceVtbl) { fn GetRecognizer( ppRecognizer: *mut *mut ISpRecognizer, ) -> HRESULT, fn CreateGrammer( ullGrammarId: ULONGLONG, ppGrammar: *mut *mut ISpRecoGrammar, ) -> HRESULT, fn GetStatus( pState: *mut SPRECOCONTEXTSTATUS, ) -> HRESULT, fn GetMaxAlternates( pcAlternates: *mut ULONG, ) -> HRESULT, fn SetMaxAlternates( cAlternates: ULONG, ) -> HRESULT, fn SetAudioOptions( Options: SPAUDIOOPTIONS, pAudioFormatId: *const GUID, pWaveFormatEx: *const WAVEFORMATEX, ) -> HRESULT, fn GetAudioOptions( pOptions: *mut SPAUDIOOPTIONS, pAudioFormatId: *mut GUID, ppCoMemWFEX: *mut *mut WAVEFORMATEX, ) -> HRESULT, fn DeserializeResult( pSerializedResult: *const SPSERIALIZEDRESULT, ppResult: *mut *mut ISpRecoResult, ) -> HRESULT, fn Bookmark( Options: SPBOOKMARKOPTIONS, ullStreamPosition: ULONGLONG, lparamEvent: LPARAM, ) -> HRESULT, fn SetAdaptionData( pAdaptionData: LPCWSTR, cch: ULONG, ) -> HRESULT, fn Pause( dwReserved: DWORD, ) -> HRESULT, fn Resume( dwReserved: DWORD, ) -> HRESULT, fn SetVoice( pVoice: *mut ISpVoice, fAllowFormatChanges: BOOL, ) -> HRESULT, fn GetVoice( ppVoice: *mut *mut ISpVoice, ) -> HRESULT, fn SetVoicePurgeEvent( ullEventIntereset: ULONGLONG, ) -> HRESULT, fn GetVoicePurgeEvent( pullEventIntereset: *mut ULONGLONG, ) -> HRESULT, fn SetContextState( eContextState: SPCONTEXTSTATE, ) -> HRESULT, fn GetContextState( peContextState: *mut SPCONTEXTSTATE, ) -> HRESULT, }} RIDL!{#[uuid(0x5b4fb971, 0xb115, 0x4de1, 0xad, 0x97, 0xe4, 0x82, 0xe3, 0xbf, 0x6e, 0xe4)] interface ISpProperties(ISpPropertiesVtbl): IUnknown(IUnknownVtbl) { fn SetPropertyNum( pName: LPCWSTR, lValue: LONG, ) -> HRESULT, fn GetPropertyNum( pName: LPCWSTR, plValue: *mut LONG, ) -> HRESULT, fn SetPropertyString( pName: LPCWSTR, pValue: LPCWSTR, ) -> HRESULT, fn GetPropertyString( pName: LPCWSTR, ppCoMemValue: *mut LPWSTR, ) -> HRESULT, }} pub const SP_MAX_LANGIDS: usize = 20; STRUCT!{struct SPRECOGNIZERSTATUS { AudioStatus: SPAUDIOSTATUS, ullRecognitionStreamPos: ULONGLONG, ulStreamNumber: ULONG, ulNumActive: ULONG, clsidEngine: CLSID, cLangIDs: ULONG, aLangID: [WORD; SP_MAX_LANGIDS], ullRecognitionStreamTime: ULONGLONG, }} ENUM!{enum SPWAVEFORMATTYPE { SPWF_INPUT, SPWF_SRENGINE, }} pub type SPSTREAMFORMATTYPE = SPWAVEFORMATTYPE; ENUM!{enum SPRECOSTATE { SPRST_INACTIVE, SPRST_ACTIVE, SPRST_ACTIVE_ALWAYS, SPRST_INACTIVE_WITH_PURGE, SPRST_NUM_STATES, }} RIDL!{#[uuid(0xc2b5f241, 0xdaa0, 0x4507, 0x9e, 0x16, 0x5a, 0x1e, 0xaa, 0x2b, 0x7a, 0x5c)] interface ISpRecognizer(ISpRecognizerVtbl): ISpProperties(ISpPropertiesVtbl) { fn SetRecognizer( pRecognizer: *mut ISpObjectToken, ) -> HRESULT, fn GetRecognizer( ppRecognizer: *mut *mut ISpObjectToken, ) -> HRESULT, fn SetInput( pUnkInput: *mut IUnknown, fAllowFormatChanges: BOOL, ) -> HRESULT, fn GetInputObjectToken( ppToken: *mut *mut ISpObjectToken, ) -> HRESULT, fn GetInputStream( ppStream: *mut *mut ISpStreamFormat, ) -> HRESULT, fn CreateRecoContext( ppNewCtxt: *mut *mut ISpRecoContext, ) -> HRESULT, fn GetRecoProfile( ppToken: *mut *mut ISpObjectToken, ) -> HRESULT, fn SetRecoProfile( pToken: *mut ISpObjectToken, ) -> HRESULT, fn IsSharedInstance() -> HRESULT, fn GetRecoState( pState: *mut SPRECOSTATE, ) -> HRESULT, fn SetRecoState( NewState: SPRECOSTATE, ) -> HRESULT, fn GetStatus( pStatus: *mut SPRECOGNIZERSTATUS, ) -> HRESULT, fn GetFormat( WaveFormatType: SPSTREAMFORMATTYPE, pFormatId: *mut GUID, ppCoMemWFEX: *mut WAVEFORMATEX, ) -> HRESULT, fn IsUISupported( pszTypeOfUI: LPCWSTR, pvExtraData: *mut c_void, cbExtraData: ULONG, pfSupported: *mut BOOL, ) -> HRESULT, fn DisplayUI( hwndParent: HWND, pszTitle: LPCWSTR, pszTypeOfUI: LPCWSTR, pvExtraData: *mut c_void, cbExtraData: ULONG, ) -> HRESULT, fn EmulateRecognition( pPhrase: *mut ISpPhrase, ) -> HRESULT, }} pub type SpeechLanguageId = c_long; ENUM!{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, }} ENUM!{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, }} ENUM!{enum SpeechDataKeyLocation { SDKLDefaultLocation = SPDKL_DefaultLocation, SDKLCurrentUser = SPDKL_CurrentUser, SDKLLocalMachine = SPDKL_LocalMachine, SDKLCurrentConfig = SPDKL_CurrentConfig, }} ENUM!{enum SpeechTokenContext { STCInprocServer = CLSCTX_INPROC_SERVER, STCInprocHandler = CLSCTX_INPROC_HANDLER, STCLocalServer = CLSCTX_LOCAL_SERVER, STCRemoteServer = CLSCTX_REMOTE_SERVER, STCAll = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, }} ENUM!{enum SpeechTokenShellFolder { STSF_AppData = 0x1a, STSF_LocalAppData = 0x1c, STSF_CommonAppData = 0x23, STSF_FlagCreate = 0x8000, }} ENUM!{enum DISPID_SpeechObjectTokens { DISPID_SOTsCount = 1, DISPID_SOTsItem = DISPID_VALUE as u32, DISPID_SOTs_NewEnum = DISPID_NEWENUM as u32, }} ENUM!{enum DISPID_SpeechObjectTokenCategory { DISPID_SOTCId = 1, DISPID_SOTCDefault, DISPID_SOTCSetId, DISPID_SOTCGetDataKey, DISPID_SOTCEnumerateTokens, }} ENUM!{enum SpeechAudioFormatType { SAFTDefault = -1i32 as u32, SAFTNoAssignedFormat = 0, SAFTText = 1, SAFTNonStandardFormat = 2, SAFTExtendedAudioFormat = 3, SAFT8kHz8BitMono = 4, SAFT8kHz8BitStereo = 5, SAFT8kHz16BitMono = 6, SAFT8kHz16BitStereo = 7, SAFT11kHz8BitMono = 8, SAFT11kHz8BitStereo = 9, SAFT11kHz16BitMono = 10, SAFT11kHz16BitStereo = 11, SAFT12kHz8BitMono = 12, SAFT12kHz8BitStereo = 13, SAFT12kHz16BitMono = 14, SAFT12kHz16BitStereo = 15, SAFT16kHz8BitMono = 16, SAFT16kHz8BitStereo = 17, SAFT16kHz16BitMono = 18, SAFT16kHz16BitStereo = 19, SAFT22kHz8BitMono = 20, SAFT22kHz8BitStereo = 21, SAFT22kHz16BitMono = 22, SAFT22kHz16BitStereo = 23, SAFT24kHz8BitMono = 24, SAFT24kHz8BitStereo = 25, SAFT24kHz16BitMono = 26, SAFT24kHz16BitStereo = 27, SAFT32kHz8BitMono = 28, SAFT32kHz8BitStereo = 29, SAFT32kHz16BitMono = 30, SAFT32kHz16BitStereo = 31, SAFT44kHz8BitMono = 32, SAFT44kHz8BitStereo = 33, SAFT44kHz16BitMono = 34, SAFT44kHz16BitStereo = 35, SAFT48kHz8BitMono = 36, SAFT48kHz8BitStereo = 37, SAFT48kHz16BitMono = 38, SAFT48kHz16BitStereo = 39, SAFTTrueSpeech_8kHz1BitMono = 40, SAFTCCITT_ALaw_8kHzMono = 41, SAFTCCITT_ALaw_8kHzStereo = 42, SAFTCCITT_ALaw_11kHzMono = 43, SAFTCCITT_ALaw_11kHzStereo = 44, SAFTCCITT_ALaw_22kHzMono = 45, SAFTCCITT_ALaw_22kHzStereo = 46, SAFTCCITT_ALaw_44kHzMono = 47, SAFTCCITT_ALaw_44kHzStereo = 48, SAFTCCITT_uLaw_8kHzMono = 49, SAFTCCITT_uLaw_8kHzStereo = 50, SAFTCCITT_uLaw_11kHzMono = 51, SAFTCCITT_uLaw_11kHzStereo = 52, SAFTCCITT_uLaw_22kHzMono = 53, SAFTCCITT_uLaw_22kHzStereo = 54, SAFTCCITT_uLaw_44kHzMono = 55, SAFTCCITT_uLaw_44kHzStereo = 56, SAFTADPCM_8kHzMono = 57, SAFTADPCM_8kHzStereo = 58, SAFTADPCM_11kHzMono = 59, SAFTADPCM_11kHzStereo = 60, SAFTADPCM_22kHzMono = 61, SAFTADPCM_22kHzStereo = 62, SAFTADPCM_44kHzMono = 63, SAFTADPCM_44kHzStereo = 64, SAFTGSM610_8kHzMono = 65, SAFTGSM610_11kHzMono = 66, SAFTGSM610_22kHzMono = 67, SAFTGSM610_44kHzMono = 68, }} ENUM!{enum DISPID_SpeechAudioFormat { DISPID_SAFType = 1, DISPID_SAFGuid, DISPID_SAFGetWaveFormatEx, DISPID_SAFSetWaveFormatEx, }} ENUM!{enum DISPID_SpeechBaseStream { DISPID_SBSFormat = 1, DISPID_SBSRead, DISPID_SBSWrite, DISPID_SBSSeek, }} ENUM!{enum SpeechStreamSeekPositionType { SSSPTRelativeToStart = STREAM_SEEK_SET, SSSPTRelativeToCurrentPosition = STREAM_SEEK_CUR, SSSPTRelativeToEnd = STREAM_SEEK_END, }} ENUM!{enum DISPID_SpeechAudio { DISPID_SAStatus = 200, DISPID_SABufferInfo, DISPID_SADefaultFormat, DISPID_SAVolume, DISPID_SABufferNotifySize, DISPID_SAEventHandle, DISPID_SASetState, }} ENUM!{enum SpeechAudioState { SASClosed = SPAS_CLOSED, SASStop = SPAS_STOP, SASPause = SPAS_PAUSE, SASRun = SPAS_RUN, }} ENUM!{enum DISPID_SpeechMMSysAudio { DISPID_SMSADeviceId = 300, DISPID_SMSALineId, DISPID_SMSAMMHandle, }} ENUM!{enum DISPID_SpeechFileStream { DISPID_SFSOpen = 100, DISPID_SFSClose, }} ENUM!{enum SpeechStreamFileMode { SSFMOpenForRead = SPFM_OPEN_READONLY, SSFMOpenReadWrite = SPFM_OPEN_READWRITE, SSFMCreate = SPFM_CREATE, SSFMCreateForWrite = SPFM_CREATE_ALWAYS, }} ENUM!{enum DISPID_SpeechCustomStream { DISPID_SCSBaseStream = 100, }} ENUM!{enum DISPID_SpeechMemoryStream { DISPID_SMSSetData = 100, DISPID_SMSGetData, }} ENUM!{enum DISPID_SpeechAudioStatus { DISPID_SASFreeBufferSpace = 1, DISPID_SASNonBlockingIO, DISPID_SASState, DISPID_SASCurrentSeekPosition, DISPID_SASCurrentDevicePosition, }} ENUM!{enum DISPID_SpeechAudioBufferInfo { DISPID_SABIMinNotification = 1, DISPID_SABIBufferSize, DISPID_SABIEventBias, }} ENUM!{enum DISPID_SpeechWaveFormatEx { DISPID_SWFEFormatTag = 1, DISPID_SWFEChannels, DISPID_SWFESamplesPerSec, DISPID_SWFEAvgBytesPerSec, DISPID_SWFEBlockAlign, DISPID_SWFEBitsPerSample, DISPID_SWFEExtraData, }} ENUM!{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, }} ENUM!{enum SpeechVoicePriority { SVPNormal = SPVPRI_NORMAL, SVPAlert = SPVPRI_ALERT, SVPOver = SPVPRI_OVER, }} ENUM!{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, SVSFNLPMask = SPF_NLP_MASK, SVSFVoiceMask = SPF_VOICE_MASK as u32, SVSFUnusedFlags = SPF_UNUSED_FLAGS as u32, }} ENUM!{enum SpeechVoiceEvents { SVEStartInputStream = 1 << 1, SVEEndInputStream = 1 << 2, SVEVoiceChange = 1 << 3, SVEBookmark = 1 << 4, SVEWordBoundary = 1 << 5, SVEPhoneme = 1 << 6, SVESentenceBoundary = 1 << 7, SVEViseme = 1 << 8, SVEAudioLevel = 1 << 9, SVEPrivate = 1 << 15, SVEAllEvents = 0x83fe, }} ENUM!{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, }} ENUM!{enum SpeechRunState { SRSEDone = SPRS_DONE, SRSEIsSpeaking = SPRS_IS_SPEAKING, }} ENUM!{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, }} ENUM!{enum SpeechVisemeFeature { SVF_None = 0, SVF_Stressed = SPVFEATURE_STRESSED, SVF_Emphasis = SPVFEATURE_EMPHASIS, }} ENUM!{enum DISPID_SpeechVoiceEvent { DISPID_SVEStreamStart = 1, DISPID_SVEStreamEnd, DISPID_SVEVoiceChange, DISPID_SVEBookmark, DISPID_SVEWord, DISPID_SVEPhoneme, DISPID_SVESentenceBoundary, DISPID_SVEViseme, DISPID_SVEAudioLevel, DISPID_SVEEnginePrivate, }} ENUM!{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, }} ENUM!{enum SpeechRecognizerState { SRSInactive = SPRST_INACTIVE, SRSActive = SPRST_ACTIVE, SRSActiveAlways = SPRST_ACTIVE_ALWAYS, SRSInactiveWithPurge = SPRST_INACTIVE_WITH_PURGE, }} ENUM!{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, }} ENUM!{enum SpeechFormatType { SFTInput = SPWF_INPUT, SFTSREngine = SPWF_SRENGINE, }} ENUM!{enum DISPID_SpeechRecognizerStatus { DISPID_SRSAudioStatus = 1, DISPID_SRSCurrentStreamPosition, DISPID_SRSCurrentStreamNumber, DISPID_SRSNumberOfActiveRules, DISPID_SRSClsidEngine, DISPID_SRSSupportedLanguages, }} ENUM!{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, }} ENUM!{enum SpeechRetainedAudioOptions { SRAONone = SPAO_NONE, SRAORetainAudio = SPAO_RETAIN_AUDIO, }} ENUM!{enum SpeechBookmarkOptions { SBONone = SPBO_NONE, SBOPause = SPBO_PAUSE, }} ENUM!{enum SpeechInterference { SINone = SPINTERFERENCE_NONE, SINoise = SPINTERFERENCE_NOISE, SINoSignal = SPINTERFERENCE_NOSIGNAL, SITooLoud = SPINTERFERENCE_TOOLOUD, SITooQuiet = SPINTERFERENCE_TOOQUIET, SITooFast = SPINTERFERENCE_TOOFAST, SITooSlow = SPINTERFERENCE_TOOSLOW, }} ENUM!{enum SpeechRecoEvents { SREStreamEnd = 1 << 0, SRESoundStart = 1 << 1, SRESoundEnd = 1 << 2, SREPhraseStart = 1 << 3, SRERecognition = 1 << 4, SREHypothesis = 1 << 5, SREBookmark = 1 << 6, SREPropertyNumChange = 1 << 7, SREPropertyStringChange = 1 << 8, SREFalseRecognition = 1 << 9, SREInterference = 1 << 10, SRERequestUI = 1 << 11, SREStateChange = 1 << 12, SREAdaptation = 1 << 13, SREStreamStart = 1 << 14, SRERecoOtherContext = 1 << 15, SREAudioLevel = 1 << 16, SREPrivate = 1 << 18, SREAllEvents = 0x5ffff, }} ENUM!{enum SpeechRecoContextState { SRCS_Disabled = SPCS_DISABLED, SRCS_Enabled = SPCS_ENABLED, }} ENUM!{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, }} ENUM!{enum SpeechLoadOption { SLOStatic = SPLO_STATIC, SLODynamic = SPLO_DYNAMIC, }} ENUM!{enum SpeechWordPronounceable { SWPUnknownWordUnpronounceable = SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE, SWPUnknownWordPronounceable = SPWP_UNKNOWN_WORD_PRONOUNCEABLE, SWPKnownWordPronounceable = SPWP_KNOWN_WORD_PRONOUNCEABLE, }} ENUM!{enum SpeechGrammarState { SGSEnabled = SPGS_ENABLED, SGSDisabled = SPGS_DISABLED, SGSExclusive = SPGS_EXCLUSIVE, }} ENUM!{enum SpeechRuleState { SGDSInactive = SPRS_INACTIVE, SGDSActive = SPRS_ACTIVE, SGDSActiveWithAutoPause = SPRS_ACTIVE_WITH_AUTO_PAUSE, }} ENUM!{enum SpeechRuleAttributes { SRATopLevel = SPRAF_TopLevel, SRADefaultToActive = SPRAF_Active, SRAExport = SPRAF_Export, SRAImport = SPRAF_Import, SRAInterpreter = SPRAF_Interpreter, SRADynamic = SPRAF_Dynamic, }} ENUM!{enum SpeechGrammarWordType { SGDisplay = SPWT_DISPLAY, SGLexical = SPWT_LEXICAL, SGPronounciation = SPWT_PRONUNCIATION, }} ENUM!{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, }} ENUM!{enum SpeechRecognitionType { SRTStandard = 0, SRTAutopause = SPREF_AutoPause, SRTEmulated = SPREF_Emulated, }} ENUM!{enum DISPID_SpeechGrammarRule { DISPID_SGRAttributes = 1, DISPID_SGRInitialState, DISPID_SGRName, DISPID_SGRId, DISPID_SGRClear, DISPID_SGRAddResource, DISPID_SGRAddState, }} ENUM!{enum DISPID_SpeechGrammarRules { DISPID_SGRsCount = 1, DISPID_SGRsDynamic, DISPID_SGRsAdd, DISPID_SGRsCommit, DISPID_SGRsCommitAndSave, DISPID_SGRsFindRule, DISPID_SGRsItem = DISPID_VALUE as u32, DISPID_SGRs_NewEnum = DISPID_NEWENUM as u32, }} ENUM!{enum DISPID_SpeechGrammarRuleState { DISPID_SGRSRule = 1, DISPID_SGRSTransitions, DISPID_SGRSAddWordTransition, DISPID_SGRSAddRuleTransition, DISPID_SGRSAddSpecialTransition, }} ENUM!{enum SpeechSpecialTransitionType { SSTTWildcard = 1, SSTTDictation, SSTTTextBuffer, }} ENUM!{enum DISPID_SpeechGrammarRuleStateTransitions { DISPID_SGRSTsCount = 1, DISPID_SGRSTsItem = DISPID_VALUE as u32, DISPID_SGRSTs_NewEnum = DISPID_NEWENUM as u32, }} ENUM!{enum DISPID_SpeechGrammarRuleStateTransition { DISPID_SGRSTType = 1, DISPID_SGRSTText, DISPID_SGRSTRule, DISPID_SGRSTWeight, DISPID_SGRSTPropertyName, DISPID_SGRSTPropertyId, DISPID_SGRSTPropertyValue, DISPID_SGRSTNextState, }} ENUM!{enum SpeechGrammarRuleStateTransitionType { SGRSTTEpsilon = 0, SGRSTTWord, SGRSTTRule, SGRSTTDictation, SGRSTTWildcard, SGRSTTTextBuffer, }} ENUM!{enum DISPIDSPTSI { DISPIDSPTSI_ActiveOffset = 1, DISPIDSPTSI_ActiveLength, DISPIDSPTSI_SelectionOffset, DISPIDSPTSI_SelectionLength, }} ENUM!{enum DISPID_SpeechRecoResult { DISPID_SRRRecoContext = 1, DISPID_SRRTimes, DISPID_SRRAudioFormat, DISPID_SRRPhraseInfo, DISPID_SRRAlternates, DISPID_SRRAudio, DISPID_SRRSpeakAudio, DISPID_SRRSaveToMemory, DISPID_SRRDiscardResultInfo, }} ENUM!{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, }} ENUM!{enum DISPID_SpeechPhraseBuilder { DISPID_SPPBRestorePhraseFromMemory = 1, }} ENUM!{enum DISPID_SpeechRecoResultTimes { DISPID_SRRTStreamTime = 1, DISPID_SRRTLength, DISPID_SRRTTickCount, DISPID_SRRTOffsetFromStart, }} ENUM!{enum DISPID_SpeechPhraseAlternate { DISPID_SPARecoResult = 1, DISPID_SPAStartElementInResult, DISPID_SPANumberOfElementsInResult, DISPID_SPAPhraseInfo, DISPID_SPACommit, }} ENUM!{enum DISPID_SpeechPhraseAlternates { DISPID_SPAsCount = 1, DISPID_SPAsItem = DISPID_VALUE as u32, DISPID_SPAs_NewEnum = DISPID_NEWENUM as u32, }} ENUM!{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, }} ENUM!{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, }} ENUM!{enum SpeechEngineConfidence { SECLowConfidence = -1i32 as u32, SECNormalConfidence = 0, SECHighConfidence = 1, }} ENUM!{enum DISPID_SpeechPhraseElements { DISPID_SPEsCount = 1, DISPID_SPEsItem = DISPID_VALUE as u32, DISPID_SPEs_NewEnum = DISPID_NEWENUM as u32, }} ENUM!{enum DISPID_SpeechPhraseReplacement { DISPID_SPRDisplayAttributes = 1, DISPID_SPRText, DISPID_SPRFirstElement, DISPID_SPRNumberOfElements, }} ENUM!{enum DISPID_SpeechPhraseReplacements { DISPID_SPRsCount = 1, DISPID_SPRsItem = DISPID_VALUE as u32, DISPID_SPRs_NewEnum = DISPID_NEWENUM as u32, }} ENUM!{enum DISPID_SpeechPhraseProperty { DISPID_SPPName = 1, DISPID_SPPId, DISPID_SPPValue, DISPID_SPPFirstElement, DISPID_SPPNumberOfElements, DISPID_SPPEngineConfidence, DISPID_SPPConfidence, DISPID_SPPParent, DISPID_SPPChildren, }} ENUM!{enum DISPID_SpeechPhraseProperties { DISPID_SPPsCount = 1, DISPID_SPPsItem = DISPID_VALUE as u32, DISPID_SPPs_NewEnum = DISPID_NEWENUM as u32, }} ENUM!{enum DISPID_SpeechPhraseRule { DISPID_SPRuleName = 1, DISPID_SPRuleId, DISPID_SPRuleFirstElement, DISPID_SPRuleNumberOfElements, DISPID_SPRuleParent, DISPID_SPRuleChildren, DISPID_SPRuleConfidence, DISPID_SPRuleEngineConfidence, }} ENUM!{enum DISPID_SpeechPhraseRules { DISPID_SPRulesCount = 1, DISPID_SPRulesItem = DISPID_VALUE as u32, DISPID_SPRules_NewEnum = DISPID_NEWENUM as u32, }} ENUM!{enum DISPID_SpeechLexicon { DISPID_SLGenerationId = 1, DISPID_SLGetWords, DISPID_SLAddPronunciation, DISPID_SLAddPronunciationByPhoneIds, DISPID_SLRemovePronunciation, DISPID_SLRemovePronunciationByPhoneIds, DISPID_SLGetPronunciations, DISPID_SLGetGenerationChange, }} ENUM!{enum SpeechLexiconType { SLTUser = eLEXTYPE_USER, SLTApp = eLEXTYPE_APP, }} ENUM!{enum SpeechPartOfSpeech { SPSNotOverriden = SPPS_NotOverriden, SPSUnknown = SPPS_Unknown, SPSNoun = SPPS_Noun, SPSVerb = SPPS_Verb, SPSModifier = SPPS_Modifier, SPSFunction = SPPS_Function, SPSInterjection = SPPS_Interjection, }} ENUM!{enum DISPID_SpeechLexiconWords { DISPID_SLWsCount = 1, DISPID_SLWsItem = DISPID_VALUE as u32, DISPID_SLWs_NewEnum = DISPID_NEWENUM as u32, }} ENUM!{enum SpeechWordType { SWTAdded = eWORDTYPE_ADDED, SWTDeleted = eWORDTYPE_DELETED, }} ENUM!{enum DISPID_SpeechLexiconWord { DISPID_SLWLangId = 1, DISPID_SLWType, DISPID_SLWWord, DISPID_SLWPronunciations, }} ENUM!{enum DISPID_SpeechLexiconProns { DISPID_SLPsCount = 1, DISPID_SLPsItem = DISPID_VALUE as u32, DISPID_SLPs_NewEnum = DISPID_NEWENUM as u32, }} ENUM!{enum DISPID_SpeechLexiconPronunciation { DISPID_SLPType = 1, DISPID_SLPLangId, DISPID_SLPPartOfSpeech, DISPID_SLPPhoneIds, DISPID_SLPSymbolic, }} ENUM!{enum DISPID_SpeechPhoneConverter { DISPID_SPCLangId = 1, DISPID_SPCPhoneToId, DISPID_SPCIdToPhone, }} extern { pub static LIBID_SpeechLib: IID; } RIDL!{#[uuid(0xce17c09b, 0x4efa, 0x44d5, 0xa4, 0xc9, 0x59, 0xd9, 0x58, 0x5a, 0xb0, 0xcd)] interface ISpeechDataKey(ISpeechDataKeyVtbl): IDispatch(IDispatchVtbl) { fn SetBinaryValue( ValueName: BSTR, Value: VARIANT, ) -> HRESULT, fn GetBinaryValue( ValueName: BSTR, Value: *mut VARIANT, ) -> HRESULT, fn SetStringValue( ValueName: BSTR, Value: BSTR, ) -> HRESULT, fn GetStringValue( ValueName: BSTR, Value: *mut BSTR, ) -> HRESULT, fn SetLongValue( ValueName: BSTR, Value: c_long, ) -> HRESULT, fn GetLongValue( ValueName: BSTR, Value: *mut c_long, ) -> HRESULT, fn OpenKey( SubKeyName: BSTR, SubKey: *mut *mut ISpeechDataKey, ) -> HRESULT, fn CreateKey( SubKeyName: BSTR, SubKey: *mut *mut ISpeechDataKey, ) -> HRESULT, fn DeleteKey( SubKeyName: BSTR, ) -> HRESULT, fn DeleteValue( ValueName: BSTR, ) -> HRESULT, fn EnumKeys( Index: c_long, SubKeyName: *mut BSTR, ) -> HRESULT, fn EnumValues( Index: c_long, ValueName: *mut BSTR, ) -> HRESULT, }} RIDL!{#[uuid(0xc74a3adc, 0xb727, 0x4500, 0xa8, 0x4a, 0xb5, 0x26, 0x72, 0x1c, 0x8b, 0x8c)] interface ISpeechObjectToken(ISpeechObjectTokenVtbl): IDispatch(IDispatchVtbl) { fn get_Id( ObjectId: *mut BSTR, ) -> HRESULT, fn get_DataKey( DataKey: *mut *mut ISpeechDataKey, ) -> HRESULT, fn get_Category( Category: *mut *mut ISpeechObjectTokenCategory, ) -> HRESULT, fn GetDescription( Locale: c_long, Description: *mut BSTR, ) -> HRESULT, fn SetId( Id: BSTR, CategoryId: BSTR, CreateIfNotExist: VARIANT_BOOL, ) -> HRESULT, fn GetAttribute( AttributeName: BSTR, AttributeValue: *mut BSTR, ) -> HRESULT, fn CreateInstance( pUnkOuter: *mut IUnknown, ClsContext: SpeechTokenContext, Object: *mut *mut IUnknown, ) -> HRESULT, fn Remove( ObjectStorageCLSID: BSTR, ) -> HRESULT, fn GetStorageFileName( ObjectStorageCLSID: BSTR, KeyName: BSTR, FileName: BSTR, Folder: BSTR, FilePath: *mut BSTR, ) -> HRESULT, fn RemoveStorageFileName( ObjectStorageCLSID: BSTR, KeyName: BSTR, DeleteFile: VARIANT_BOOL, ) -> HRESULT, fn IsUISupported( TypeOfUI: BSTR, ExtraData: *const VARIANT, Object: *mut IUnknown, Supported: *mut VARIANT_BOOL, ) -> HRESULT, fn DisplayUI( hWnd: c_long, Title: BSTR, TypeOfUI: BSTR, ExtraData: *const VARIANT, Object: *mut IUnknown, ) -> HRESULT, fn MatchesAttributes( Attributes: BSTR, Matches: *mut VARIANT_BOOL, ) -> HRESULT, }} RIDL!{#[uuid(0x9285b776, 0x2e7b, 0x4bc0, 0xb5, 0x3e, 0x58, 0x0e, 0xb6, 0xfa, 0x96, 0x7f)] interface ISpeechObjectTokens(ISpeechObjectTokensVtbl): IDispatch(IDispatchVtbl) { fn get_Count( Count: *mut c_long, ) -> HRESULT, fn Item( Index: c_long, Token: *mut *mut ISpeechObjectToken, ) -> HRESULT, fn get__NewEnum( ppEnumVARIANT: *mut *mut IUnknown, ) -> HRESULT, }} RIDL!{#[uuid(0xca7eac50, 0x2d01, 0x4145, 0x86, 0xd4, 0x5a, 0xe7, 0xd7, 0x0f, 0x44, 0x69)] interface ISpeechObjectTokenCategory(ISpeechObjectTokenCategoryVtbl): IDispatch(IDispatchVtbl) { fn get_Id( Id: *mut BSTR, ) -> HRESULT, fn put_Default( TokenId: BSTR, ) -> HRESULT, fn get_Default( TokenId: *mut BSTR, ) -> HRESULT, fn SetId( Id: BSTR, CreateIfNotExist: VARIANT_BOOL, ) -> HRESULT, fn GetDataKey( Location: SpeechDataKeyLocation, DataKey: *mut *mut ISpeechDataKey, ) -> HRESULT, fn EnumerateTokens( RequiredAttributes: BSTR, OptionalAttributes: BSTR, Tokens: *mut *mut ISpeechObjectTokens, ) -> HRESULT, }} RIDL!{#[uuid(0x11b103d8, 0x1142, 0x4edf, 0xa0, 0x93, 0x82, 0xfb, 0x39, 0x15, 0xf8, 0xcc)] interface ISpeechAudioBufferInfo(ISpeechAudioBufferInfoVtbl): IDispatch(IDispatchVtbl) { fn get_MinNotification( MinNotification: *mut c_long, ) -> HRESULT, fn put_MinNotification( MinNotification: c_long, ) -> HRESULT, fn get_BufferSize( BufferSize: *mut c_long, ) -> HRESULT, fn put_BufferSize( BufferSize: c_long, ) -> HRESULT, fn get_EventBias( EventBias: *mut c_long, ) -> HRESULT, fn put_EventBias( EventBias: c_long, ) -> HRESULT, }} RIDL!{#[uuid(0xc62d9c91, 0x7458, 0x47f6, 0x86, 0x2d, 0x1e, 0xf8, 0x6f, 0xb0, 0xb2, 0x78)] interface ISpeechAudioStatus(ISpeechAudioStatusVtbl): IDispatch(IDispatchVtbl) { fn get_FreeBufferSpace( FreeBufferSpace: *mut c_long, ) -> HRESULT, fn get_NonBlockingIO( NonBlockingIO: *mut c_long, ) -> HRESULT, fn get_State( State: *mut SpeechAudioState, ) -> HRESULT, fn get_CurrentSeekPosition( CurrentSeekPosition: *mut VARIANT, ) -> HRESULT, fn get_CurrentDevicePosition( CurrentDevicePosition: *mut VARIANT, ) -> HRESULT, }} RIDL!{#[uuid(0xe6e9c590, 0x3e18, 0x40e3, 0x82, 0x99, 0x06, 0x1f, 0x98, 0xbd, 0xe7, 0xc7)] interface ISpeechAudioFormat(ISpeechAudioFormatVtbl): IDispatch(IDispatchVtbl) { fn get_Type( AudioFormat: *mut SpeechAudioFormatType, ) -> HRESULT, fn put_Type( AudioFormat: SpeechAudioFormatType, ) -> HRESULT, fn get_Guid( Guid: *mut BSTR, ) -> HRESULT, fn put_Guid( Guid: BSTR, ) -> HRESULT, fn GetWaveFormatEx( SpeechWaveFormatEx: *mut *mut ISpeechWaveFormatEx, ) -> HRESULT, fn SetWaveFormatEx( SpeechWaveFormatEx: *mut ISpeechWaveFormatEx, ) -> HRESULT, }} RIDL!{#[uuid(0x7a1ef0d5, 0x1581, 0x4741, 0x88, 0xe4, 0x20, 0x9a, 0x49, 0xf1, 0x1a, 0x10)] interface ISpeechWaveFormatEx(ISpeechWaveFormatExVtbl): IDispatch(IDispatchVtbl) { fn get_FormatTag( FormatTag: *mut c_short, ) -> HRESULT, fn put_FormatTag( FormatTag: c_short, ) -> HRESULT, fn get_Channels( Channels: *mut c_short, ) -> HRESULT, fn put_Channels( Channels: c_short, ) -> HRESULT, fn get_SamplesPerSec( SamplesPerSec: *mut c_long, ) -> HRESULT, fn put_SamplesPerSec( SamplesPerSec: c_long, ) -> HRESULT, fn get_AvgBytesPerSec( AvgBytesPerSec: *mut c_long, ) -> HRESULT, fn put_AvgBytesPerSec( AvgBytesPerSec: c_long, ) -> HRESULT, fn get_BlockAlign( BlockAlign: *mut c_short, ) -> HRESULT, fn put_BlockAlign( BlockAlign: c_short, ) -> HRESULT, fn get_BitsPerSample( BitsPerSample: *mut c_short, ) -> HRESULT, fn put_BitsPerSample( BitsPerSample: c_short, ) -> HRESULT, fn get_ExtraData( ExtraData: *mut VARIANT, ) -> HRESULT, fn put_ExtraData( ExtraData: VARIANT, ) -> HRESULT, }} RIDL!{#[uuid(0x6450336f, 0x7d49, 0x4ced, 0x80, 0x97, 0x49, 0xd6, 0xde, 0xe3, 0x72, 0x94)] interface ISpeechBaseStream(ISpeechBaseStreamVtbl): IDispatch(IDispatchVtbl) { fn get_Format( AudioFormat: *mut *mut ISpeechAudioFormat, ) -> HRESULT, fn putref_Format( AudioFormat: *mut ISpeechAudioFormat, ) -> HRESULT, fn Read( Buffer: *mut VARIANT, NumberOfBytes: c_long, BytesRead: *mut c_long, ) -> HRESULT, fn Write( Buffer: VARIANT, BytesWritten: *mut c_long, ) -> HRESULT, fn Seek( Position: VARIANT, Origin: SpeechStreamSeekPositionType, NewPosition: *mut VARIANT, ) -> HRESULT, }} RIDL!{#[uuid(0xaf67f125, 0xab39, 0x4e93, 0xb4, 0xa2, 0xcc, 0x2e, 0x66, 0xe1, 0x82, 0xa7)] interface ISpeechFileStream(ISpeechFileStreamVtbl): ISpeechBaseStream(ISpeechBaseStreamVtbl) { fn Open( FileName: BSTR, FileMode: SpeechStreamFileMode, DoEvents: VARIANT_BOOL, ) -> HRESULT, fn Close() -> HRESULT, }} RIDL!{#[uuid(0xeeb14b68, 0x808b, 0x4abe, 0xa5, 0xea, 0xb5, 0x1d, 0xa7, 0x58, 0x80, 0x08)] interface ISpeechMemoryStream(ISpeechMemoryStreamVtbl): ISpeechBaseStream(ISpeechBaseStreamVtbl) { fn SetData( Data: VARIANT, ) -> HRESULT, fn GetData( pData: *mut VARIANT, ) -> HRESULT, }} RIDL!{#[uuid(0x1a9e9f4f, 0x104f, 0x4db8, 0xa1, 0x15, 0xef, 0xd7, 0xfd, 0x0c, 0x97, 0xae)] interface ISpeechCustomStream(ISpeechCustomStreamVtbl): ISpeechBaseStream(ISpeechBaseStreamVtbl) { fn get_BaseStream( ppUnkStream: *mut *mut IUnknown, ) -> HRESULT, fn putref_BaseStream( pUnkStream: *mut IUnknown, ) -> HRESULT, }} RIDL!{#[uuid(0xcff8e175, 0x019e, 0x11d3, 0xa0, 0x8e, 0x00, 0xc0, 0x4f, 0x8e, 0xf9, 0xb5)] interface ISpeechAudio(ISpeechAudioVtbl): ISpeechBaseStream(ISpeechBaseStreamVtbl) { fn get_Status( Status: *mut *mut ISpeechAudioStatus, ) -> HRESULT, fn get_BufferInfo( BufferInfo: *mut *mut ISpeechAudioBufferInfo, ) -> HRESULT, fn get_DefaultFormat( StreamFormat: *mut *mut ISpeechAudioFormat, ) -> HRESULT, fn get_Volume( Volume: *mut c_long, ) -> HRESULT, fn put_Volume( Volume: c_long, ) -> HRESULT, fn get_BufferNotifySize( BufferNotifySize: *mut c_long, ) -> HRESULT, fn put_BufferNotifySize( BufferNotifySize: c_long, ) -> HRESULT, fn get_EventHandle( EventHandle: *mut c_long, ) -> HRESULT, fn SetState( State: SpeechAudioState, ) -> HRESULT, }} RIDL!{#[uuid(0x3c76af6d, 0x1fd7, 0x4831, 0x81, 0xd1, 0x3b, 0x71, 0xd5, 0xa1, 0x3c, 0x44)] interface ISpeechMMSysAudio(ISpeechMMSysAudioVtbl): ISpeechAudio(ISpeechAudioVtbl) { fn get_DeviceId( DeviceId: *mut c_long, ) -> HRESULT, fn put_DeviceId( DeviceId: c_long, ) -> HRESULT, fn get_LineId( LineId: *mut c_long, ) -> HRESULT, fn put_LineId( LineId: c_long, ) -> HRESULT, fn get_MMHandle( Handle: *mut c_long, ) -> HRESULT, }} RIDL!{#[uuid(0x269316d8, 0x57bd, 0x11d2, 0x9e, 0xee, 0x00, 0xc0, 0x4f, 0x79, 0x73, 0x96)] interface ISpeechVoice(ISpeechVoiceVtbl): IDispatch(IDispatchVtbl) { fn get_Status( Status: *mut *mut ISpeechVoiceStatus, ) -> HRESULT, fn get_Voice( Voice: *mut *mut ISpeechObjectToken, ) -> HRESULT, fn putref_Voice( Voice: *mut ISpeechObjectToken, ) -> HRESULT, fn get_AudioOutput( AudioOutput: *mut *mut ISpeechObjectToken, ) -> HRESULT, fn putref_AudioOutput( AudioOutput: *mut ISpeechObjectToken, ) -> HRESULT, fn get_AudioOutputStream( AudioOutputStream: *mut *mut ISpeechBaseStream, ) -> HRESULT, fn putref_AudioOutputStream( AudioOutputStream: *mut ISpeechBaseStream, ) -> HRESULT, fn get_Rate( Rate: *mut c_long, ) -> HRESULT, fn put_Rate( Rate: c_long, ) -> HRESULT, fn get_Volume( Volume: *mut c_long, ) -> HRESULT, fn put_Volume( Volume: c_long, ) -> HRESULT, fn put_AllowAudioOutputFormatChangesOnNextSet( Allow: VARIANT_BOOL, ) -> HRESULT, fn get_AllowAudioOutputFormatChangesOnNextSet( Allow: *mut VARIANT_BOOL, ) -> HRESULT, fn get_EventInterests( EventInterestFlags: *mut SpeechVoiceEvents, ) -> HRESULT, fn put_EventInterests( EventInterestFlags: SpeechVoiceEvents, ) -> HRESULT, fn put_Priority( Priority: SpeechVoicePriority, ) -> HRESULT, fn get_Priority( Priority: *mut SpeechVoicePriority, ) -> HRESULT, fn put_AlertBoundary( Boundary: SpeechVoiceEvents, ) -> HRESULT, fn get_AlertBoundary( Boundary: *mut SpeechVoiceEvents, ) -> HRESULT, fn put_SynchronousSpeakTimeout( msTimeout: c_long, ) -> HRESULT, fn get_SynchronousSpeakTimeout( msTimeOut: *mut c_long, ) -> HRESULT, fn Speak( Text: BSTR, Flags: SpeechVoiceSpeakFlags, StreamNumber: *mut c_long, ) -> HRESULT, fn SpeakStream( Stream: *mut ISpeechBaseStream, Flags: SpeechVoiceSpeakFlags, StreamNumber: *mut c_long, ) -> HRESULT, fn Pause() -> HRESULT, fn Resume() -> HRESULT, fn Skip( Type: BSTR, NumItems: c_long, NumSkipped: c_long, ) -> HRESULT, fn GetVoices( RequiredAttributes: BSTR, OptionalAttributes: BSTR, ObjectTokens: *mut *mut ISpeechObjectTokens, ) -> HRESULT, fn GetAudioOutputs( RequiredAttributes: BSTR, OptionalAttributes: BSTR, ObjectTokens: *mut *mut ISpeechObjectTokens, ) -> HRESULT, fn WaitUntilDone( msTimeout: c_long, Done: *mut VARIANT_BOOL, ) -> HRESULT, fn SpeakCompleteEvent( Handle: *mut c_long, ) -> HRESULT, fn IsUISupported( TypeOfUI: BSTR, ExtraData: *const VARIANT, Supported: *mut VARIANT_BOOL, ) -> HRESULT, fn DisplayUI( hWndParent: c_long, Title: BSTR, TypeOfUI: BSTR, ExtraData: *const VARIANT, ) -> HRESULT, }} RIDL!{#[uuid(0x8be47b07, 0x57f6, 0x11d2, 0x9e, 0xee, 0x00, 0xc0, 0x4f, 0x79, 0x73, 0x96)] interface ISpeechVoiceStatus(ISpeechVoiceStatusVtbl): IDispatch(IDispatchVtbl) { fn get_CurrentStreamNumber( StreamNumber: *mut c_long, ) -> HRESULT, fn get_LastStreamNumberQueued( StreamNumber: *mut c_long, ) -> HRESULT, fn get_LastHResult( HResult: *mut c_long, ) -> HRESULT, fn get_RunningState( State: *mut SpeechRunState, ) -> HRESULT, fn get_InputWordPosition( Position: *mut c_long, ) -> HRESULT, fn get_InputWordLength( Length: *mut c_long, ) -> HRESULT, fn get_InputSentencePosition( Position: *mut c_long, ) -> HRESULT, fn get_InputSentenceLength( Length: *mut c_long, ) -> HRESULT, fn get_LastBookmark( Bookmark: *mut BSTR, ) -> HRESULT, fn get_LastBookmarkId( BookmarkId: *mut c_long, ) -> HRESULT, fn get_PhonemeId( PhoneId: *mut c_short, ) -> HRESULT, fn get_VisemeId( VisemeId: *mut c_short, ) -> HRESULT, }} RIDL!{#[uuid(0xa372acd1, 0x3bef, 0x4bbd, 0x8f, 0xfb, 0xcb, 0x3e, 0x2b, 0x41, 0x6a, 0xf8)] interface _ISpeechVoiceEvents(_ISpeechVoiceEventsVtbl): IDispatch(IDispatchVtbl) {}} RIDL!{#[uuid(0x2d5f1c0c, 0xbd75, 0x4b08, 0x94, 0x78, 0x3b, 0x11, 0xfe, 0xa2, 0x58, 0x6c)] interface ISpeechRecognizer(ISpeechRecognizerVtbl): IDispatch(IDispatchVtbl) { fn putref_Recognizer( Recognizer: *mut ISpeechObjectToken, ) -> HRESULT, fn get_Recognizer( Recognizer: *mut *mut ISpeechObjectToken, ) -> HRESULT, fn put_AllowAudioInputFormatChangesOnNextSet( Allow: VARIANT_BOOL, ) -> HRESULT, fn get_AllowAudioInputFormatChangesOnNextSet( Allow: *mut VARIANT_BOOL, ) -> HRESULT, fn putref_AudioInput( AudioInput: *mut ISpeechObjectToken, ) -> HRESULT, fn get_AudioInput( AudioInput: *mut *mut ISpeechObjectToken, ) -> HRESULT, fn putref_AudioInputStream( AudioInputStream: *mut ISpeechBaseStream, ) -> HRESULT, fn get_AudioInputStream( AudioInputStream: *mut *mut ISpeechBaseStream, ) -> HRESULT, fn get_IsShared( Shared: *mut VARIANT_BOOL, ) -> HRESULT, fn put_State( State: SpeechRecognizerState, ) -> HRESULT, fn get_State( State: *mut SpeechRecognizerState, ) -> HRESULT, fn get_Status( Status: *mut *mut ISpeechRecognizerStatus, ) -> HRESULT, fn putref_Profile( Profile: *mut ISpeechObjectToken, ) -> HRESULT, fn get_Profile( Profile: *mut *mut ISpeechObjectToken, ) -> HRESULT, fn EmulateRecognition( TextElements: VARIANT, ElementDisplayAttributes: *mut VARIANT, LanguageId: c_long, ) -> HRESULT, fn CreateRecoContext( NewContext: *mut *mut ISpeechRecoContext, ) -> HRESULT, fn GetFormat( Type: SpeechFormatType, Format: *mut *mut ISpeechAudioFormat, ) -> HRESULT, fn SetPropertyNumber( Name: BSTR, Value: c_long, Supported: *mut VARIANT_BOOL, ) -> HRESULT, fn GetPropertyNumber( Name: BSTR, Value: *mut c_long, Supported: *mut VARIANT_BOOL, ) -> HRESULT, fn SetPropertyString( Name: BSTR, Value: BSTR, Supported: *mut VARIANT_BOOL, ) -> HRESULT, fn GetPropertyString( Name: BSTR, Value: *mut BSTR, Supported: *mut VARIANT_BOOL, ) -> HRESULT, fn IsUISupported( TypeOfUI: BSTR, ExtraData: *const VARIANT, Supported: *mut VARIANT_BOOL, ) -> HRESULT, fn DisplayUI( hWndParent: c_long, Title: BSTR, TypeOfUI: BSTR, ExtraData: *const VARIANT, ) -> HRESULT, fn GetRecognizers( RequiredAttributes: BSTR, OptionalAttributes: BSTR, ObjectTokens: *mut *mut ISpeechObjectTokens, ) -> HRESULT, fn GetAudioInputs( RequiredAttributes: BSTR, OptionalAttributes: BSTR, ObjectTokens: *mut *mut ISpeechObjectTokens, ) -> HRESULT, fn GetProfiles( RequiredAttributes: BSTR, OptionalAttributes: BSTR, ObjectTokens: *mut *mut ISpeechObjectTokens, ) -> HRESULT, }} RIDL!{#[uuid(0xbff9e781, 0x53ec, 0x484e, 0xbb, 0x8a, 0x0e, 0x1b, 0x55, 0x51, 0xe3, 0x5c)] interface ISpeechRecognizerStatus(ISpeechRecognizerStatusVtbl): IDispatch(IDispatchVtbl) { fn get_AudioStatus( AudioStatus: *mut *mut ISpeechAudioStatus, ) -> HRESULT, fn get_CurrentStreamPosition( pCurrentStreamPos: *mut VARIANT, ) -> HRESULT, fn get_CurrentStreamNumber( StreamNumber: *mut c_long, ) -> HRESULT, fn get_NumberOfActiveRules( NumberOfActiveRules: *mut c_long, ) -> HRESULT, fn get_ClsidEngine( ClsidEngine: *mut BSTR, ) -> HRESULT, fn get_SupportedLanguages( SupportedLanguages: *mut VARIANT, ) -> HRESULT, }} RIDL!{#[uuid(0x580aa49d, 0x7e1e, 0x4809, 0xb8, 0xe2, 0x57, 0xda, 0x80, 0x61, 0x04, 0xb8)] interface ISpeechRecoContext(ISpeechRecoContextVtbl): IDispatch(IDispatchVtbl) { fn get_Recognizer( Recognizer: *mut *mut ISpeechRecognizer, ) -> HRESULT, fn get_AudioInputInterferenceStatus( Interference: *mut SpeechInterference, ) -> HRESULT, fn get_RequestedUIType( UIType: *mut BSTR, ) -> HRESULT, fn putref_Voice( Voice: *mut ISpeechVoice, ) -> HRESULT, fn get_Voice( Voice: *mut *mut ISpeechVoice, ) -> HRESULT, fn put_AllowVoiceFormatMatchingOnNextSet( Allow: VARIANT_BOOL, ) -> HRESULT, fn get_AllowVoiceFormatMatchingOnNextSet( Allow: *mut VARIANT_BOOL, ) -> HRESULT, fn put_VoicePurgeEvent( EventInterest: SpeechRecoEvents, ) -> HRESULT, fn get_VoicePurgeEvent( EventInterest: *mut SpeechRecoEvents, ) -> HRESULT, fn put_EventInterests( EventInterest: SpeechRecoEvents, ) -> HRESULT, fn get_EventInterests( EventInterest: *mut SpeechRecoEvents, ) -> HRESULT, fn put_CmdMaxAlternates( MaxAlternates: c_long, ) -> HRESULT, fn get_CmdMaxAlternates( MaxAlternates: *mut c_long, ) -> HRESULT, fn put_State( State: SpeechRecoContextState, ) -> HRESULT, fn get_State( State: *mut SpeechRecoContextState, ) -> HRESULT, fn put_RetainedAudio( Option: SpeechRetainedAudioOptions, ) -> HRESULT, fn get_RetainedAudio( Option: *mut SpeechRetainedAudioOptions, ) -> HRESULT, fn putref_RetainedAudioFormat( Format: *mut ISpeechAudioFormat, ) -> HRESULT, fn get_RetainedAudioFormat( Format: *mut *mut ISpeechAudioFormat, ) -> HRESULT, fn Pause() -> HRESULT, fn Resume() -> HRESULT, fn CreateGrammar( GrammarId: VARIANT, Grammar: *mut *mut ISpeechRecoGrammar, ) -> HRESULT, fn CreateResultFromMemory( ResultBlock: *mut VARIANT, Result: *mut *mut ISpeechRecoResult, ) -> HRESULT, fn Bookmark( Options: SpeechBookmarkOptions, StreamPos: VARIANT, BookmarkId: VARIANT, ) -> HRESULT, fn SetAdaptationData( AdaptationString: BSTR, ) -> HRESULT, }} RIDL!{#[uuid(0xb6d6f79f, 0x2158, 0x4e50, 0xb5, 0xbc, 0x9a, 0x9c, 0xcd, 0x85, 0x2a, 0x09)] interface ISpeechRecoGrammar(ISpeechRecoGrammarVtbl): IDispatch(IDispatchVtbl) { fn get_Id( Id: *mut VARIANT, ) -> HRESULT, fn get_RecoContext( RecoContext: *mut *mut ISpeechRecoContext, ) -> HRESULT, fn put_State( State: SpeechGrammarState, ) -> HRESULT, fn get_State( State: *mut SpeechGrammarState, ) -> HRESULT, fn get_Rules( Rules: *mut *mut ISpeechGrammarRules, ) -> HRESULT, fn Reset( NewLanguage: SpeechLanguageId, ) -> HRESULT, fn CmdLoadFromFile( FileName: BSTR, LoadOption: SpeechLoadOption, ) -> HRESULT, fn CmdLoadFromObject( ClassId: BSTR, GrammarName: BSTR, LoadOption: SpeechLoadOption, ) -> HRESULT, fn CmdLoadFromResource( hModule: c_long, ResourceName: VARIANT, ResourceType: VARIANT, LanguageId: SpeechLanguageId, LoadOption: SpeechLoadOption, ) -> HRESULT, fn CmdLoadFromMemory( GrammarData: VARIANT, LoadOption: SpeechLoadOption, ) -> HRESULT, fn CmdLoadFromProprietaryGrammar( ProprietaryGuid: BSTR, PriorietaryString: BSTR, ProprietaryData: VARIANT, LoadOption: SpeechLoadOption, ) -> HRESULT, fn CmdSetRuleState( Name: BSTR, State: SpeechRuleState, ) -> HRESULT, fn CmdSetRuleIdState( RuleId: c_long, State: SpeechRuleState, ) -> HRESULT, fn DictationLoad( TopicName: BSTR, LoadOption: SpeechLoadOption, ) -> HRESULT, fn DictationUnload() -> HRESULT, fn DictationSetState( State: SpeechRuleState, ) -> HRESULT, fn SetWordSequenceData( Text: BSTR, TextLength: c_long, Info: *mut ISpeechTextSelectionInformation, ) -> HRESULT, fn SetTextSelection( Info: *mut ISpeechTextSelectionInformation, ) -> HRESULT, fn IsPronounceable( Word: BSTR, WordPronounceable: *mut SpeechWordPronounceable, ) -> HRESULT, }} RIDL!{#[uuid(0x7b8fcb42, 0x0e9d, 0x4f00, 0xa0, 0x48, 0x7b, 0x04, 0xd6, 0x17, 0x9d, 0x3d)] interface _ISpeechRecoContextEvents(_ISpeechRecoContextEventsVtbl): IDispatch(IDispatchVtbl) {}} RIDL!{#[uuid(0xafe719cf, 0x5dd1, 0x44f2, 0x99, 0x9c, 0x7a, 0x39, 0x9f, 0x1c, 0xfc, 0xcc)] interface ISpeechGrammarRule(ISpeechGrammarRuleVtbl): IDispatch(IDispatchVtbl) { fn get_Attributes( Attributes: *mut SpeechRuleAttributes, ) -> HRESULT, fn get_InitialState( State: *mut *mut ISpeechGrammarRuleState, ) -> HRESULT, fn get_Name( Name: *mut BSTR, ) -> HRESULT, fn get_Id( Id: *mut c_long, ) -> HRESULT, fn Clear() -> HRESULT, fn AddResource( ResourceName: BSTR, ResourceValue: BSTR, ) -> HRESULT, fn AddState( State: *mut *mut ISpeechGrammarRuleState, ) -> HRESULT, }} RIDL!{#[uuid(0x6ffa3b44, 0xfc2d, 0x40d1, 0x8a, 0xfc, 0x32, 0x91, 0x1c, 0x7f, 0x1a, 0xd1)] interface ISpeechGrammarRules(ISpeechGrammarRulesVtbl): IDispatch(IDispatchVtbl) { fn get_Count( Count: *mut c_long, ) -> HRESULT, fn FindRule( RuleNameOrId: VARIANT, Rule: *mut *mut ISpeechGrammarRule, ) -> HRESULT, fn Item( Index: c_long, Rule: *mut *mut ISpeechGrammarRule, ) -> HRESULT, fn get__NewEnum( EnumVARIANT: *mut *mut IUnknown, ) -> HRESULT, fn get_Dynamic( Dynamic: *mut VARIANT_BOOL, ) -> HRESULT, fn Add( RuleName: BSTR, Attributes: SpeechRuleAttributes, RuleId: c_long, Rule: *mut *mut ISpeechGrammarRule, ) -> HRESULT, fn Commit() -> HRESULT, fn CommitAndSave( ErrorText: *mut BSTR, SaveStream: *mut VARIANT, ) -> HRESULT, }} RIDL!{#[uuid(0xd4286f2c, 0xee67, 0x45ae, 0xb9, 0x28, 0x28, 0xd6, 0x95, 0x36, 0x2e, 0xda)] interface ISpeechGrammarRuleState(ISpeechGrammarRuleStateVtbl): IDispatch(IDispatchVtbl) { fn get_Rule( Rule: *mut *mut ISpeechGrammarRule, ) -> HRESULT, fn get_Transitions( Transitions: *mut *mut ISpeechGrammarRuleStateTransitions, ) -> HRESULT, fn AddWordTransition( DestState: *mut ISpeechGrammarRuleState, Words: BSTR, Separators: BSTR, Type: SpeechGrammarWordType, PropertyName: BSTR, PropertyId: c_long, PropertyValue: *mut VARIANT, Weight: c_float, ) -> HRESULT, fn AddRuleTransition( DestinationState: *mut ISpeechGrammarRuleState, Rule: *mut ISpeechGrammarRule, PropertyName: BSTR, PropertyId: c_long, PropertyValue: *mut VARIANT, Weight: c_float, ) -> HRESULT, fn AddSpecialTransition( DestinationState: *mut ISpeechGrammarRuleState, Type: SpeechSpecialTransitionType, PropertyName: BSTR, PropertyId: c_long, PropertyValue: *mut VARIANT, Weight: c_float, ) -> HRESULT, }} RIDL!{#[uuid(0xcafd1db1, 0x41d1, 0x4a06, 0x98, 0x63, 0xe2, 0xe8, 0x1d, 0xa1, 0x7a, 0x9a)] interface ISpeechGrammarRuleStateTransition(ISpeechGrammarRuleStateTransitionVtbl): IDispatch(IDispatchVtbl) { fn get_Type( Type: *mut SpeechGrammarRuleStateTransitionType, ) -> HRESULT, fn get_Text( Text: *mut BSTR, ) -> HRESULT, fn get_Rule( Rule: *mut *mut ISpeechGrammarRule, ) -> HRESULT, fn get_Weight( Weight: *mut VARIANT, ) -> HRESULT, fn get_PropertyName( PropertyName: *mut BSTR, ) -> HRESULT, fn get_PropertyId( PropertyId: *mut c_long, ) -> HRESULT, fn get_PropertyValue( PropertyValue: *mut VARIANT, ) -> HRESULT, fn get_NextState( NextState: *mut *mut ISpeechGrammarRuleState, ) -> HRESULT, }} RIDL!{#[uuid(0xeabce657, 0x75bc, 0x44a2, 0xaa, 0x7f, 0xc5, 0x64, 0x76, 0x74, 0x29, 0x63)] interface ISpeechGrammarRuleStateTransitions(ISpeechGrammarRuleStateTransitionsVtbl): IDispatch(IDispatchVtbl) { fn get_Count( Count: *mut c_long, ) -> HRESULT, fn Item( Index: c_long, Transition: *mut *mut ISpeechGrammarRuleStateTransition, ) -> HRESULT, fn get__NewEnum( EnumVARIANT: *mut *mut IUnknown, ) -> HRESULT, }} RIDL!{#[uuid(0x3b9c7e7a, 0x6eee, 0x4ded, 0x90, 0x92, 0x11, 0x65, 0x72, 0x79, 0xad, 0xbe)] interface ISpeechTextSelectionInformation(ISpeechTextSelectionInformationVtbl): IDispatch(IDispatchVtbl) { fn put_ActiveOffset( ActiveOffset: c_long, ) -> HRESULT, fn get_ActiveOffset( ActiveOffset: *mut c_long, ) -> HRESULT, fn put_ActiveLength( ActiveLength: c_long, ) -> HRESULT, fn get_ActiveLength( ActiveLength: *mut c_long, ) -> HRESULT, fn put_SelectionOffset( SelectionOffset: c_long, ) -> HRESULT, fn get_SelectionOffset( SelectionOffset: *mut c_long, ) -> HRESULT, fn put_SelectionLength( SelectionLength: c_long, ) -> HRESULT, fn get_SelectionLength( SelectionLength: *mut c_long, ) -> HRESULT, }} RIDL!{#[uuid(0xed2879cf, 0xced9, 0x4ee6, 0xa5, 0x34, 0xde, 0x01, 0x91, 0xd5, 0x46, 0x8d)] interface ISpeechRecoResult(ISpeechRecoResultVtbl): IDispatch(IDispatchVtbl) { fn get_RecoContext( RecoContext: *mut *mut ISpeechRecoContext, ) -> HRESULT, fn get_Times( Times: *mut *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, }} RIDL!{#[uuid(0x62b3b8fb, 0xf6e7, 0x41be, 0xbd, 0xcb, 0x05, 0x6b, 0x1c, 0x29, 0xef, 0xc0)] interface ISpeechRecoResultTimes(ISpeechRecoResultTimesVtbl): IDispatch(IDispatchVtbl) { fn get_StreamTime( Time: *mut VARIANT, ) -> HRESULT, fn get_Length( Length: *mut VARIANT, ) -> HRESULT, fn get_TickCount( TickCount: *mut c_long, ) -> HRESULT, fn get_OffsetFromStart( OffsetFromStart: *mut VARIANT, ) -> HRESULT, }} RIDL!{#[uuid(0x27864a2a, 0x2b9f, 0x4cb8, 0x92, 0xd3, 0x0d, 0x27, 0x22, 0xfd, 0x1e, 0x73)] interface ISpeechPhraseAlternate(ISpeechPhraseAlternateVtbl): IDispatch(IDispatchVtbl) { fn get_RecoResult( RecoResult: *mut *mut ISpeechRecoResult, ) -> HRESULT, fn get_StartElementInResult( StartElement: *mut c_long, ) -> HRESULT, fn get_NumberOfElementsInResult( NumberOfElements: *mut c_long, ) -> HRESULT, fn get_PhraseInfo( PhraseInfo: *mut *mut ISpeechPhraseInfo, ) -> HRESULT, fn Commit() -> HRESULT, }} RIDL!{#[uuid(0xb238b6d5, 0xf276, 0x4c3d, 0xa6, 0xc1, 0x29, 0x74, 0x80, 0x1c, 0x3c, 0xc2)] interface ISpeechPhraseAlternates(ISpeechPhraseAlternatesVtbl): IDispatch(IDispatchVtbl) { fn get_Count( Count: *mut c_long, ) -> HRESULT, fn Item( Index: c_long, PhraseAlternate: *mut *mut ISpeechPhraseAlternate, ) -> HRESULT, fn get__NewEnum( EnumVARIANT: *mut *mut IUnknown, ) -> HRESULT, }} RIDL!{#[uuid(0x961559cf, 0x4e67, 0x4662, 0x8b, 0xf0, 0xd9, 0x3f, 0x1f, 0xcd, 0x61, 0xb3)] interface ISpeechPhraseInfo(ISpeechPhraseInfoVtbl): IDispatch(IDispatchVtbl) { fn get_LanguageId( LanguageId: *mut c_long, ) -> HRESULT, fn get_GrammarId( GrammarId: *mut VARIANT, ) -> HRESULT, fn get_StartTime( StartTime: *mut VARIANT, ) -> HRESULT, fn get_AudioStreamPosition( AudioStreamPosition: *mut VARIANT, ) -> HRESULT, fn get_AudioSizeBytes( pAudioSizeBytes: *mut c_long, ) -> HRESULT, fn get_RetainedSizeBytes( RetainedSizeBytes: *mut c_long, ) -> HRESULT, fn get_AudioSizeTime( AudioSizeTime: *mut c_long, ) -> HRESULT, fn get_Rule( Rule: *mut *mut ISpeechPhraseRule, ) -> HRESULT, fn get_Properties( Properties: *mut *mut ISpeechPhraseProperties, ) -> HRESULT, fn get_Elements( Elements: *mut *mut ISpeechPhraseElements, ) -> HRESULT, fn get_Replacements( Replacements: *mut *mut ISpeechPhraseReplacements, ) -> HRESULT, fn get_EngineId( EngineIdGuid: *mut BSTR, ) -> HRESULT, fn get_EnginePrivateData( PrivateData: *mut VARIANT, ) -> HRESULT, fn SaveToMemory( PhraseBlock: *mut VARIANT, ) -> HRESULT, fn GetText( StartElement: c_long, Elements: c_long, UseReplacements: VARIANT_BOOL, Text: *mut BSTR, ) -> HRESULT, fn GetDisplayAttributes( StartElement: c_long, Elements: c_long, UseReplacements: VARIANT_BOOL, DisplayAttributes: *mut SpeechDisplayAttributes, ) -> HRESULT, }} RIDL!{#[uuid(0xe6176f96, 0xe373, 0x4801, 0xb2, 0x23, 0x3b, 0x62, 0xc0, 0x68, 0xc0, 0xb4)] interface ISpeechPhraseElement(ISpeechPhraseElementVtbl): IDispatch(IDispatchVtbl) { fn get_AudioTimeOffset( AudioTimeOffset: *mut c_long, ) -> HRESULT, fn get_AudioSizeTime( AudioSizeTime: *mut c_long, ) -> HRESULT, fn get_AudioStreamOffset( AudioStreamOffset: *mut c_long, ) -> HRESULT, fn get_AudioSizeBytes( AudioSizeBytes: *mut c_long, ) -> HRESULT, fn get_RetainedStreamOffset( RetainedStreamOffset: *mut c_long, ) -> HRESULT, fn get_RetainedSizeBytes( RetainedSizeBytes: *mut c_long, ) -> HRESULT, fn get_DisplayText( DisplayText: *mut BSTR, ) -> HRESULT, fn get_LexicalForm( LexicalForm: *mut BSTR, ) -> HRESULT, fn get_Pronunciation( Pronunciation: *mut VARIANT, ) -> HRESULT, fn get_DisplayAttributes( DisplayAttributes: *mut SpeechDisplayAttributes, ) -> HRESULT, fn get_RequiredConfidence( RequiredConfidence: *mut SpeechEngineConfidence, ) -> HRESULT, fn get_ActualConfidence( ActualConfidence: *mut SpeechEngineConfidence, ) -> HRESULT, fn get_EngineConfidence( EngineConfident: *mut c_float, ) -> HRESULT, }} RIDL!{#[uuid(0x0626b328, 0x3478, 0x467d, 0xa0, 0xb3, 0xd0, 0x85, 0x3b, 0x93, 0xdd, 0xa3)] interface ISpeechPhraseElements(ISpeechPhraseElementsVtbl): IDispatch(IDispatchVtbl) { fn get_Count( Count: *mut c_long, ) -> HRESULT, fn Item( Index: c_long, Element: *mut *mut ISpeechPhraseElement, ) -> HRESULT, fn get__NewEnum( EnumVARIANT: *mut *mut IUnknown, ) -> HRESULT, }} RIDL!{#[uuid(0x2890a410, 0x53a7, 0x4fb5, 0x94, 0xec, 0x06, 0xd4, 0x99, 0x8e, 0x3d, 0x02)] interface ISpeechPhraseReplacement(ISpeechPhraseReplacementVtbl): IDispatch(IDispatchVtbl) { fn get_DisplayAttributes( DisplayAttributes: *mut SpeechDisplayAttributes, ) -> HRESULT, fn get_Text( Text: *mut BSTR, ) -> HRESULT, fn get_FirstElement( FirstElement: *mut c_long, ) -> HRESULT, fn get_NumberOfElements( NumberOfElements: *mut c_long, ) -> HRESULT, }} RIDL!{#[uuid(0x38bc662f, 0x2257, 0x4525, 0x95, 0x9e, 0x20, 0x69, 0xd2, 0x59, 0x6c, 0x05)] interface ISpeechPhraseReplacements(ISpeechPhraseReplacementsVtbl): IDispatch(IDispatchVtbl) { fn get_Count( Count: *mut c_long, ) -> HRESULT, fn Item( Index: c_long, Reps: *mut *mut ISpeechPhraseReplacement, ) -> HRESULT, fn get__NewEnum( EnumVARIANT: *mut *mut IUnknown, ) -> HRESULT, }} RIDL!{#[uuid(0xce563d48, 0x961e, 0x4732, 0xa2, 0xe1, 0x37, 0x8a, 0x42, 0xb4, 0x30, 0xbe)] interface ISpeechPhraseProperty(ISpeechPhrasePropertyVtbl): IDispatch(IDispatchVtbl) { fn get_Name( Name: *mut BSTR, ) -> HRESULT, fn get_Id( Id: *mut c_long, ) -> HRESULT, fn get_Value( Value: *mut VARIANT, ) -> HRESULT, fn get_FirstElement( FirstElement: *mut c_long, ) -> HRESULT, fn get_NumberOfElements( NumberOfElements: *mut c_long, ) -> HRESULT, fn get_EngineConfidence( Confidence: *mut c_float, ) -> HRESULT, fn get_Confidence( Confidence: *mut SpeechEngineConfidence, ) -> HRESULT, fn get_Parent( ParentProperty: *mut *mut ISpeechPhraseProperty, ) -> HRESULT, fn get_Children( Children: *mut *mut ISpeechPhraseProperties, ) -> HRESULT, }} RIDL!{#[uuid(0x08166b47, 0x102e, 0x4b23, 0xa5, 0x99, 0xbd, 0xb9, 0x8d, 0xbf, 0xd1, 0xf4)] interface ISpeechPhraseProperties(ISpeechPhrasePropertiesVtbl): IDispatch(IDispatchVtbl) { fn get_Count( Count: *mut c_long, ) -> HRESULT, fn Item( Index: c_long, Property: *mut *mut ISpeechPhraseProperty, ) -> HRESULT, fn get__NewEnum( EnumVARIANT: *mut *mut IUnknown, ) -> HRESULT, }} RIDL!{#[uuid(0xa7bfe112, 0xa4a0, 0x48d9, 0xb6, 0x02, 0xc3, 0x13, 0x84, 0x3f, 0x69, 0x64)] interface ISpeechPhraseRule(ISpeechPhraseRuleVtbl): IDispatch(IDispatchVtbl) { fn get_Name( Name: *mut BSTR, ) -> HRESULT, fn get_Id( Id: *mut c_long, ) -> HRESULT, fn get_FirstElement( FirstElement: *mut c_long, ) -> HRESULT, fn get_NumberOfElements( NumberOfElements: *mut c_long, ) -> HRESULT, fn get_Parent( Parent: *mut *mut ISpeechPhraseRule, ) -> HRESULT, fn get_Children( Children: *mut *mut ISpeechPhraseRules, ) -> HRESULT, fn get_Confidence( ActualConfidence: *mut SpeechEngineConfidence, ) -> HRESULT, fn get_EngineConfidence( Confidence: *mut c_float, ) -> HRESULT, }} RIDL!{#[uuid(0x9047d593, 0x01dd, 0x4b72, 0x81, 0xa3, 0xe4, 0xa0, 0xca, 0x69, 0xf4, 0x07)] interface ISpeechPhraseRules(ISpeechPhraseRulesVtbl): IDispatch(IDispatchVtbl) { fn get_Count( Count: *mut c_long, ) -> HRESULT, fn Item( Index: c_long, Rule: *mut *mut ISpeechPhraseRule, ) -> HRESULT, fn get__NewEnum( EnumVARIANT: *mut *mut IUnknown, ) -> HRESULT, }} RIDL!{#[uuid(0x3da7627a, 0xc7ae, 0x4b23, 0x87, 0x08, 0x63, 0x8c, 0x50, 0x36, 0x2c, 0x25)] interface ISpeechLexicon(ISpeechLexiconVtbl): IDispatch(IDispatchVtbl) { fn get_GenerationId( GenerationId: *mut c_long, ) -> HRESULT, fn GetWords( Flags: SpeechLexiconType, GenerationID: *mut c_long, Words: *mut *mut ISpeechLexiconWords, ) -> HRESULT, fn AddPronunciation( bstrWord: BSTR, LangId: SpeechLanguageId, PartOfSpeech: SpeechPartOfSpeech, bstrPronunciation: BSTR, ) -> HRESULT, fn AddPronunciationByPhoneIds( bstrWord: BSTR, LangId: SpeechLanguageId, PartOfSpeech: SpeechPartOfSpeech, PhoneIds: *mut VARIANT, ) -> HRESULT, fn RemovePronunciation( bstrWord: BSTR, LangId: SpeechLanguageId, PartOfSpeech: SpeechPartOfSpeech, bstrPronunciation: BSTR, ) -> HRESULT, fn RemovePronunciationByPhoneIds( bstrWord: BSTR, LangId: SpeechLanguageId, PartOfSpeech: SpeechPartOfSpeech, PhoneIds: *mut VARIANT, ) -> HRESULT, fn GetPronunciations( bstrWord: BSTR, LangId: SpeechLanguageId, TypeFlags: SpeechLexiconType, ppPronunciations: *mut *mut ISpeechLexiconPronunciations, ) -> HRESULT, fn GetGenerationChange( GenerationID: *mut c_long, ppWords: *mut *mut ISpeechLexiconWords, ) -> HRESULT, }} RIDL!{#[uuid(0x8d199862, 0x415e, 0x47d5, 0xac, 0x4f, 0xfa, 0xa6, 0x08, 0xb4, 0x24, 0xe6)] interface ISpeechLexiconWords(ISpeechLexiconWordsVtbl): IDispatch(IDispatchVtbl) { fn get_Count( Count: *mut c_long, ) -> HRESULT, fn Item( Index: c_long, Word: *mut *mut ISpeechLexiconWord, ) -> HRESULT, fn get__NewEnum( EnumVARIANT: *mut *mut IUnknown, ) -> HRESULT, }} RIDL!{#[uuid(0x4e5b933c, 0xc9be, 0x48ed, 0x88, 0x42, 0x1e, 0xe5, 0x1b, 0xb1, 0xd4, 0xff)] interface ISpeechLexiconWord(ISpeechLexiconWordVtbl): IDispatch(IDispatchVtbl) { fn get_LangId( LangId: *mut SpeechLanguageId, ) -> HRESULT, fn get_Type( WordType: *mut SpeechWordType, ) -> HRESULT, fn get_Word( Word: *mut BSTR, ) -> HRESULT, fn get_Pronunciations( Pronunciations: *mut *mut ISpeechLexiconPronunciations, ) -> HRESULT, }} RIDL!{#[uuid(0x72829128, 0x5682, 0x4704, 0xa0, 0xd4, 0x3e, 0x2b, 0xb6, 0xf2, 0xea, 0xd3)] interface ISpeechLexiconPronunciations(ISpeechLexiconPronunciationsVtbl): IDispatch(IDispatchVtbl) { fn get_Count( Count: *mut c_long, ) -> HRESULT, fn Item( Index: c_long, Pronunciation: *mut *mut ISpeechLexiconPronunciation, ) -> HRESULT, fn get__NewEnum( EnumVARIANT: *mut *mut IUnknown, ) -> HRESULT, }} RIDL!{#[uuid(0x95252c5d, 0x9e43, 0x4f4a, 0x98, 0x99, 0x48, 0xee, 0x73, 0x35, 0x2f, 0x9f)] interface ISpeechLexiconPronunciation(ISpeechLexiconPronunciationVtbl): IDispatch(IDispatchVtbl) { fn get_Type( LexiconType: *mut SpeechLexiconType, ) -> HRESULT, fn get_LangId( LangId: *mut SpeechLanguageId, ) -> HRESULT, fn get_PartOfSpeech( PartOfSpeech: *mut SpeechPartOfSpeech, ) -> HRESULT, fn get_PhoneIds( PhoneIds: *mut VARIANT, ) -> HRESULT, fn get_Symbolic( Symbolic: *mut BSTR, ) -> HRESULT, }} pub const Speech_Default_Weight: c_float = DEFAULT_WEIGHT; pub const Speech_Max_Word_Length: LONG = SP_MAX_WORD_LENGTH as i32; pub const Speech_Max_Pron_Length: LONG = SP_MAX_PRON_LENGTH as i32; pub const Speech_StreamPos_Asap: LONG = SP_STREAMPOS_ASAP as i32; pub const Speech_StreamPos_RealTime: LONG = SP_STREAMPOS_REALTIME as i32; pub const SpeechAllElements: LONG = SPPR_ALL_ELEMENTS as i32; RIDL!{#[uuid(0x3b151836, 0xdf3a, 0x4e0a, 0x84, 0x6c, 0xd2, 0xad, 0xc9, 0x33, 0x43, 0x33)] interface ISpeechPhraseInfoBuilder(ISpeechPhraseInfoBuilderVtbl): IDispatch(IDispatchVtbl) { fn RestorePhraseFromMemory( PhraseInMemory: *mut VARIANT, PhraseInfo: *mut *mut ISpeechPhraseInfo, ) -> HRESULT, }} RIDL!{#[uuid(0xc3e4f353, 0x433f, 0x43d6, 0x89, 0xa1, 0x6a, 0x62, 0xa7, 0x05, 0x4c, 0x3d)] interface ISpeechPhoneConverter(ISpeechPhoneConverterVtbl): IDispatch(IDispatchVtbl) { fn get_LanguageId( LanguageId: *mut SpeechLanguageId, ) -> HRESULT, fn put_LanguageId( LanguageId: SpeechLanguageId, ) -> HRESULT, fn PhoneToId( Phonemes: BSTR, IdArray: *mut VARIANT, ) -> HRESULT, fn IdToPhone( IdArray: VARIANT, Phonemes: *mut BSTR, ) -> HRESULT, }} extern { pub static CLSID_SpNotifyTranslator: CLSID; pub static CLSID_SpObjectTokenCategory: CLSID; pub static CLSID_SpObjectToken: CLSID; pub static CLSID_SpResourceManager: CLSID; pub static CLSID_SpStreamFormatConverter: CLSID; pub static CLSID_SpMMAudioEnum: CLSID; pub static CLSID_SpMMAudioIn: CLSID; pub static CLSID_SpMMAudioOut: CLSID; pub static CLSID_SpStream: CLSID; pub static CLSID_SpVoice: CLSID; pub static CLSID_SpSharedRecoContext: CLSID; pub static CLSID_SpInprocRecognizer: CLSID; pub static CLSID_SpSharedRecognizer: CLSID; pub static CLSID_SpLexicon: CLSID; pub static CLSID_SpUnCompressedLexicon: CLSID; pub static CLSID_SpCompressedLexicon: CLSID; pub static CLSID_SpPhoneConverter: CLSID; pub static CLSID_SpNullPhoneConverter: CLSID; pub static CLSID_SpTextSelectionInformation: CLSID; pub static CLSID_SpPhraseInfoBuilder: CLSID; pub static CLSID_SpAudioFormat: CLSID; pub static CLSID_SpWaveFormatEx: CLSID; pub static CLSID_SpInProcRecoContext: CLSID; pub static CLSID_SpCustomStream: CLSID; pub static CLSID_SpFileStream: CLSID; pub static CLSID_SpMemoryStream: CLSID; }