Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  sapi51.rs   Sprache: unbekannt

 
Spracherkennung für: .rs vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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;
}

[zur Elbe Produktseite wechseln0.74QuellennavigatorsAnalyse erneut starten2026-04-25]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge