Revision control
Copy as Markdown
Other Tools
// Licensed under the Apache License, Version 2.0
// 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,
};