Eine aufbereitete Darstellung der Quelle

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

Benutzer

Quelle  sapi53.rs

  Sprache: Rust
 

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

Messung V0.5 in Prozent
C=100 H=100 G=100

¤ Dauer der Verarbeitung: 0.18 Sekunden  (vorverarbeitet am  2026-06-22) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik