winapi_ui_automation/um/
sapi53.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6//! SAPI 5.3 definitions
7use ctypes::{c_float, c_int, c_long};
8use shared::guiddef::{CLSID, GUID};
9use shared::minwindef::{BOOL, BYTE, DWORD, LPARAM, UINT, ULONG, WORD, WPARAM};
10use shared::wtypes::{BSTR, VARIANT_BOOL};
11use um::oaidl::{IDispatch, IDispatchVtbl, VARIANT};
12use um::unknwnbase::{IUnknown, IUnknownVtbl};
13use um::urlmon::IInternetSecurityManager;
14use um::winnt::{HRESULT, LPCWSTR, LPWSTR, ULONGLONG, WCHAR};
15pub use um::sapi51::{
16    SPDATAKEYLOCATION,
17    SPDKL_DefaultLocation,
18    SPDKL_CurrentUser,
19    SPDKL_LocalMachine,
20    SPDKL_CurrentConfig,
21    SPDUI_EngineProperties,
22    SPDUI_AddRemoveWord,
23    SPDUI_UserTraining,
24    SPDUI_MicTraining,
25    SPDUI_RecoProfileProperties,
26    SPDUI_AudioProperties,
27    SPDUI_AudioVolume,
28    SPDUI_UserEnrollment,
29    SPDUI_ShareData,
30    SPDUI_Tutorial,
31    SPSTREAMFORMAT,
32    SPSF_Default,
33    SPSF_NoAssignedFormat,
34    SPSF_Text,
35    SPSF_NonStandardFormat,
36    SPSF_ExtendedAudioFormat,
37    SPSF_8kHz8BitMono,
38    SPSF_8kHz8BitStereo,
39    SPSF_8kHz16BitMono,
40    SPSF_8kHz16BitStereo,
41    SPSF_11kHz8BitMono,
42    SPSF_11kHz8BitStereo,
43    SPSF_11kHz16BitMono,
44    SPSF_11kHz16BitStereo,
45    SPSF_12kHz8BitMono,
46    SPSF_12kHz8BitStereo,
47    SPSF_12kHz16BitMono,
48    SPSF_12kHz16BitStereo,
49    SPSF_16kHz8BitMono,
50    SPSF_16kHz8BitStereo,
51    SPSF_16kHz16BitMono,
52    SPSF_16kHz16BitStereo,
53    SPSF_22kHz8BitMono,
54    SPSF_22kHz8BitStereo,
55    SPSF_22kHz16BitMono,
56    SPSF_22kHz16BitStereo,
57    SPSF_24kHz8BitMono,
58    SPSF_24kHz8BitStereo,
59    SPSF_24kHz16BitMono,
60    SPSF_24kHz16BitStereo,
61    SPSF_32kHz8BitMono,
62    SPSF_32kHz8BitStereo,
63    SPSF_32kHz16BitMono,
64    SPSF_32kHz16BitStereo,
65    SPSF_44kHz8BitMono,
66    SPSF_44kHz8BitStereo,
67    SPSF_44kHz16BitMono,
68    SPSF_44kHz16BitStereo,
69    SPSF_48kHz8BitMono,
70    SPSF_48kHz8BitStereo,
71    SPSF_48kHz16BitMono,
72    SPSF_48kHz16BitStereo,
73    SPSF_TrueSpeech_8kHz1BitMono,
74    SPSF_CCITT_ALaw_8kHzMono,
75    SPSF_CCITT_ALaw_8kHzStereo,
76    SPSF_CCITT_ALaw_11kHzMono,
77    SPSF_CCITT_ALaw_11kHzStereo,
78    SPSF_CCITT_ALaw_22kHzMono,
79    SPSF_CCITT_ALaw_22kHzStereo,
80    SPSF_CCITT_ALaw_44kHzMono,
81    SPSF_CCITT_ALaw_44kHzStereo,
82    SPSF_CCITT_uLaw_8kHzMono,
83    SPSF_CCITT_uLaw_8kHzStereo,
84    SPSF_CCITT_uLaw_11kHzMono,
85    SPSF_CCITT_uLaw_11kHzStereo,
86    SPSF_CCITT_uLaw_22kHzMono,
87    SPSF_CCITT_uLaw_22kHzStereo,
88    SPSF_CCITT_uLaw_44kHzMono,
89    SPSF_CCITT_uLaw_44kHzStereo,
90    SPSF_ADPCM_8kHzMono,
91    SPSF_ADPCM_8kHzStereo,
92    SPSF_ADPCM_11kHzMono,
93    SPSF_ADPCM_11kHzStereo,
94    SPSF_ADPCM_22kHzMono,
95    SPSF_ADPCM_22kHzStereo,
96    SPSF_ADPCM_44kHzMono,
97    SPSF_ADPCM_44kHzStereo,
98    SPSF_GSM610_8kHzMono,
99    SPSF_GSM610_11kHzMono,
100    SPSF_GSM610_22kHzMono,
101    SPSF_GSM610_44kHzMono,
102    SPSF_NUM_FORMATS,
103    SPDFID_Text,
104    SPDFID_WaveFormatEx,
105    SPREG_USER_ROOT,
106    SPREG_LOCAL_MACHINE_ROOT,
107    SPCAT_AUDIOOUT,
108    SPCAT_AUDIOIN,
109    SPCAT_VOICES,
110    SPCAT_RECOGNIZERS,
111    SPCAT_APPLEXICONS,
112    SPCAT_PHONECONVERTERS,
113    SPCAT_TEXTNORMALIZERS,
114    SPCAT_RECOPROFILES,
115    SPMMSYS_AUDIO_IN_TOKEN_ID,
116    SPMMSYS_AUDIO_OUT_TOKEN_ID,
117    SPCURRENT_USER_LEXICON_TOKEN_ID,
118    SPTOKENVALUE_CLSID,
119    SPTOKENKEY_FILES,
120    SPTOKENKEY_UI,
121    SPTOKENKEY_ATTRIBUTES
122};
123pub const SPTOKENKEY_RETAINEDAUDIO: &'static str = "SecondsPerRetainedAudioEvent";
124pub const SPTOKENKEY_AUDIO_LATENCY_WARNING: &'static str = "LatencyWarningThreshold";
125pub const SPTOKENKEY_AUDIO_LATENCY_TRUNCATE: &'static str = "LatencyTruncateThreshold";
126pub const SPTOKENKEY_AUDIO_LATENCY_UPDATE_INTERVAL: &'static str = "LatencyUpdateInterval";
127pub use um::sapi51::{
128    SPVOICECATEGORY_TTSRATE,
129    SPPROP_RESOURCE_USAGE,
130    SPPROP_HIGH_CONFIDENCE_THRESHOLD,
131    SPPROP_NORMAL_CONFIDENCE_THRESHOLD,
132    SPPROP_LOW_CONFIDENCE_THRESHOLD,
133    SPPROP_RESPONSE_SPEED,
134    SPPROP_COMPLEX_RESPONSE_SPEED,
135    SPPROP_ADAPTATION_ON,
136    SPPROP_PERSISTED_BACKGROUND_ADAPTATION,
137    SPPROP_PERSISTED_LANGUAGE_MODEL_ADAPTATION,
138    SPPROP_UX_IS_LISTENING,
139    SPTOPIC_SPELLING,
140    SPWILDCARD,
141    SPDICTATION
142};
143pub const SPREG_SAFE_USER_TOKENS: &'static str
144    = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\UserTokens";
145pub use um::sapi51::{
146    SPINFDICTATION,
147    SP_LOW_CONFIDENCE,
148    SP_NORMAL_CONFIDENCE,
149    SP_HIGH_CONFIDENCE,
150    DEFAULT_WEIGHT,
151    SP_MAX_WORD_LENGTH,
152    SP_MAX_PRON_LENGTH
153};
154pub const SP_EMULATE_RESULT: ULONG = 0x40000000;
155pub use um::sapi51::{
156    ISpNotifyCallback,
157    SPNOTIFYCALLBACK,
158    ISpNotifySource, ISpNotifySourceVtbl,
159    ISpNotifySink, ISpNotifySinkVtbl,
160    ISpNotifyTranslator, ISpNotifyTranslatorVtbl,
161    ISpDataKey, ISpDataKeyVtbl,
162    ISpRegDataKey, ISpRegDataKeyVtbl,
163    ISpObjectTokenCategory, ISpObjectTokenCategoryVtbl,
164    ISpObjectToken, ISpObjectTokenVtbl,
165    ISpObjectTokenInit, ISpObjectTokenInitVtbl,
166    IEnumSpObjectTokens, IEnumSpObjectTokensVtbl,
167    ISpObjectWithToken, ISpObjectWithTokenVtbl,
168    ISpResourceManager, ISpResourceManagerVtbl,
169    SPEVENTLPARAMTYPE,
170    SPET_LPARAM_IS_UNDEFINED,
171    SPET_LPARAM_IS_TOKEN,
172    SPET_LPARAM_IS_OBJECT,
173    SPET_LPARAM_IS_POINTER,
174    SPET_LPARAM_IS_STRING,
175    SPEVENTENUM,
176    SPEI_UNDEFINED,
177    SPEI_START_INPUT_STREAM,
178    SPEI_END_INPUT_STREAM,
179    SPEI_VOICE_CHANGE,
180    SPEI_TTS_BOOKMARK,
181    SPEI_WORD_BOUNDARY,
182    SPEI_PHONEME,
183    SPEI_SENTENCE_BOUNDARY,
184    SPEI_VISEME,
185    SPEI_TTS_AUDIO_LEVEL,
186    SPEI_TTS_PRIVATE,
187    SPEI_MIN_TTS,
188    SPEI_MAX_TTS,
189    SPEI_END_SR_STREAM,
190    SPEI_SOUND_START,
191    SPEI_SOUND_END,
192    SPEI_PHRASE_START,
193    SPEI_RECOGNITION,
194    SPEI_HYPOTHESIS,
195    SPEI_SR_BOOKMARK,
196    SPEI_PROPERTY_NUM_CHANGE,
197    SPEI_PROPERTY_STRING_CHANGE,
198    SPEI_FALSE_RECOGNITION,
199    SPEI_INTERFERENCE,
200    SPEI_REQUEST_UI,
201    SPEI_RECO_STATE_CHANGE,
202    SPEI_ADAPTATION,
203    SPEI_START_SR_STREAM,
204    SPEI_RECO_OTHER_CONTEXT,
205    SPEI_SR_AUDIO_LEVEL
206};
207pub const SPEI_SR_RETAINEDAUDIO: SPEVENTENUM = 51;
208pub use um::sapi51::SPEI_SR_PRIVATE;
209pub const SPEI_RESERVED4: SPEVENTENUM = 53;
210pub const SPEI_RESERVED5: SPEVENTENUM = 54;
211pub const SPEI_RESERVED6: SPEVENTENUM = 55;
212pub use um::sapi51::SPEI_MIN_SR;
213pub const SPEI_MAX_SR: SPEVENTENUM = 55;
214pub use um::sapi51::{
215    SPEI_RESERVED1,
216    SPEI_RESERVED2,
217    SPEI_RESERVED3,
218    SPFEI_FLAGCHECK,
219    SPFEI_ALL_TTS_EVENTS,
220    SPFEI_ALL_SR_EVENTS,
221    SPFEI_ALL_EVENTS,
222    SPFEI,
223    SPEVENT,
224    SPSERIALIZEDEVENT,
225    SPSERIALIZEDEVENT64
226};
227STRUCT!{struct SPEVENTEX {
228    eEventId: WORD,
229    elParamType: WORD,
230    ulStreamNum: ULONG,
231    ullAudioStreamOffset: ULONGLONG,
232    wParam: WPARAM,
233    lParam: LPARAM,
234    ullAudioTimeOffset: ULONGLONG,
235}}
236pub use um::sapi51::{
237    SPINTERFERENCE,
238    SPINTERFERENCE_NONE,
239    SPINTERFERENCE_NOISE,
240    SPINTERFERENCE_NOSIGNAL,
241    SPINTERFERENCE_TOOLOUD,
242    SPINTERFERENCE_TOOQUIET,
243    SPINTERFERENCE_TOOFAST,
244    SPINTERFERENCE_TOOSLOW,
245    SPINTERFERENCE_LATENCY_WARNING,
246    SPINTERFERENCE_LATENCY_TRUNCATE_BEGIN,
247    SPINTERFERENCE_LATENCY_TRUNCATE_END,
248    SPENDSRSTREAMFLAGS,
249    SPESF_NONE,
250    SPESF_STREAM_RELEASED
251};
252pub const SPESF_EMULATED: SPENDSRSTREAMFLAGS = 1 << 1;
253pub use um::sapi51::{
254    SPVFEATURE,
255    SPVFEATURE_STRESSED,
256    SPVFEATURE_EMPHASIS,
257    SPVISEMES,
258    SP_VISEME_0,
259    SP_VISEME_1,
260    SP_VISEME_2,
261    SP_VISEME_3,
262    SP_VISEME_4,
263    SP_VISEME_5,
264    SP_VISEME_6,
265    SP_VISEME_7,
266    SP_VISEME_8,
267    SP_VISEME_9,
268    SP_VISEME_10,
269    SP_VISEME_11,
270    SP_VISEME_12,
271    SP_VISEME_13,
272    SP_VISEME_14,
273    SP_VISEME_15,
274    SP_VISEME_16,
275    SP_VISEME_17,
276    SP_VISEME_18,
277    SP_VISEME_19,
278    SP_VISEME_20,
279    SP_VISEME_21,
280    SPEVENTSOURCEINFO,
281    ISpEventSource, ISpEventSourceVtbl,
282};
283RIDL!{#[uuid(0x2373a435, 0x6a4b, 0x429e, 0xa6, 0xac, 0xd4, 0x23, 0x1a, 0x61, 0x97, 0x5b)]
284interface ISpEventSource2(ISpEventSource2Vtbl): ISpEventSource(ISpEventSourceVtbl) {
285    fn GetEventsEx(
286        ulCount: ULONG,
287        pEventArray: *mut SPEVENTEX,
288        pulFetched: *mut ULONG,
289    ) -> HRESULT,
290}}
291pub use um::sapi51::{
292    ISpEventSink, ISpEventSinkVtbl,
293    ISpStreamFormat, ISpStreamFormatVtbl,
294    SPFILEMODE,
295    SPFM_OPEN_READONLY,
296    SPFM_OPEN_READWRITE,
297    SPFM_CREATE,
298    SPFM_CREATE_ALWAYS,
299    SPFM_NUM_MODES,
300    ISpStream, ISpStreamVtbl,
301    ISpStreamFormatConverter, ISpStreamFormatConverterVtbl,
302    SPAUDIOSTATE,
303    SPAS_CLOSED,
304    SPAS_STOP,
305    SPAS_PAUSE,
306    SPAS_RUN,
307    SPAUDIOSTATUS,
308    SPAUDIOBUFFERINFO,
309    ISpAudio, ISpAudioVtbl,
310    ISpMMSysAudio, ISpMMSysAudioVtbl,
311    ISpTranscript, ISpTranscriptVtbl,
312    SPDISPLAYATTRIBUTES,
313    SPAF_ONE_TRAILING_SPACE,
314    SPAF_TWO_TRAILING_SPACES,
315    SPAF_CONSUME_LEADING_SPACES
316};
317pub const SPAF_BUFFER_POSITION: SPDISPLAYATTRIBUTES = 0x10;
318pub const SPAF_ALL: SPDISPLAYATTRIBUTES = 0x1f;
319pub const SPAF_USER_SPECIFIED: SPDISPLAYATTRIBUTES = 0x80;
320pub use um::sapi51::{
321    SPPHONEID,
322    PSPPHONEID,
323    PCSPPHONEID,
324    SPPHRASEELEMENT,
325    SPPHRASERULE,
326    SPPHRASEPROPERTYUNIONTYPE,
327    SPPPUT_UNUSED,
328    SPPPUT_ARRAY_INDEX,
329    SPPHRASEPROPERTY,
330    SPPHRASEREPLACEMENT
331};
332STRUCT!{struct SPSEMANTICERRORINFO {
333    ulLineNumber: ULONG,
334    pszScriptLine: LPWSTR,
335    pszSource: LPWSTR,
336    pszDescription: LPWSTR,
337    hrResultCode: HRESULT,
338}}
339ENUM!{enum SPSEMANTICFORMAT {
340    SPSMF_SAPI_PROPERTIES = 0,
341    SPSMF_SRGS_SEMANTICINTERPRETATION_MS = 1,
342    SPSMF_SRGS_SAPIPROPERTIES = 2,
343    SPSMF_UPS = 4,
344    SPSMF_SRGS_SEMANTICINTERPRETATION_W3C = 8,
345}}
346pub use um::sapi51::SPPHRASE as SPPHRASE_50;
347// TODO: pub const SP_SPPHRASESIZE_500: usize = mem::size_of::<SPPHRASE_50>();
348STRUCT!{struct SPPHRASE {
349    cbSize: ULONG,
350    LangID: WORD,
351    wHomophoneGroupId: WORD,
352    ullGrammarID: ULONGLONG,
353    ftStartTime: ULONGLONG,
354    ullAudioStreamPosition: ULONGLONG,
355    ulAudioSizeBytes: ULONG,
356    ulRetainedSizeBytes: ULONG,
357    ulAudioSizeTime: ULONG,
358    Rule: SPPHRASERULE,
359    pProperties: *const SPPHRASEPROPERTY,
360    pElements: *const SPPHRASEELEMENT,
361    cReplacements: ULONG,
362    pReplacements: *const SPPHRASEREPLACEMENT,
363    SREngineID: GUID,
364    ulSREnginePrivateDataSize: ULONG,
365    pSREnginePrivateData: *const BYTE,
366    pSML: LPWSTR,
367    pSemanticErrorInfo: *mut SPSEMANTICERRORINFO,
368}}
369pub use um::sapi51::SPSERIALIZEDPHRASE;
370STRUCT!{struct SPRULE {
371    pszRuleName: LPCWSTR,
372    ulRuleId: ULONG,
373    dwAttributes: DWORD,
374}}
375pub use um::sapi51::{
376    SPVALUETYPE,
377    SPDF_PROPERTY,
378    SPDF_REPLACEMENT,
379    SPDF_RULE,
380    SPDF_DISPLAYTEXT,
381    SPDF_LEXICALFORM ,
382    SPDF_PRONUNCIATION,
383    SPDF_AUDIO,
384    SPDF_ALTERNATES,
385    SPDF_ALL,
386    SPBINARYGRAMMAR,
387    SPPHRASERNG,
388    SPPR_ALL_ELEMENTS,
389    SP_GETWHOLEPHRASE,
390    SPRR_ALL_ELEMENTS,
391    SPSTATEHANDLE,
392    SPRECOEVENTFLAGS,
393    SPREF_AutoPause,
394    SPREF_Emulated
395};
396pub const SPREF_SMLTimeout: SPRECOEVENTFLAGS = 1 << 2;
397pub const SPREF_ExtendableParse: SPRECOEVENTFLAGS = 1 << 3;
398pub const SPREF_ReSent: SPRECOEVENTFLAGS = 1 << 4;
399pub const SPREF_Hypothesis: SPRECOEVENTFLAGS = 1 << 5;
400pub const SPREF_FalseRecognition: SPRECOEVENTFLAGS = 1 << 6;
401pub use um::sapi51::{
402    SPPARTOFSPEECH,
403    SPPS_NotOverriden,
404    SPPS_Unknown,
405    SPPS_Noun,
406    SPPS_Verb,
407    SPPS_Modifier,
408    SPPS_Function,
409    SPPS_Interjection
410};
411pub const SPPS_Noncontent: SPPARTOFSPEECH = 0x6000;
412pub const SPPS_LMA: SPPARTOFSPEECH = 0x7000;
413pub const SPPS_SuppressWord: SPPARTOFSPEECH = 0xf000;
414pub use um::sapi51::{
415    SPLEXICONTYPE,
416    eLEXTYPE_USER,
417    eLEXTYPE_APP,
418    eLEXTYPE_VENDORLEXICON,
419    eLEXTYPE_LETTERTOSOUND,
420    eLEXTYPE_MORPHOLOGY,
421    eLEXTYPE_RESERVED4,
422    eLEXTYPE_USER_SHORTCUT,
423    eLEXTYPE_RESERVED6,
424    eLEXTYPE_RESERVED7,
425    eLEXTYPE_RESERVED8,
426    eLEXTYPE_RESERVED9,
427    eLEXTYPE_RESERVED10,
428    eLEXTYPE_PRIVATE1,
429    eLEXTYPE_PRIVATE2,
430    eLEXTYPE_PRIVATE3,
431    eLEXTYPE_PRIVATE4,
432    eLEXTYPE_PRIVATE5,
433    eLEXTYPE_PRIVATE6,
434    eLEXTYPE_PRIVATE7,
435    eLEXTYPE_PRIVATE8,
436    eLEXTYPE_PRIVATE9,
437    eLEXTYPE_PRIVATE10,
438    eLEXTYPE_PRIVATE11,
439    eLEXTYPE_PRIVATE12,
440    eLEXTYPE_PRIVATE13,
441    eLEXTYPE_PRIVATE14,
442    eLEXTYPE_PRIVATE15,
443    eLEXTYPE_PRIVATE16,
444    eLEXTYPE_PRIVATE17,
445    eLEXTYPE_PRIVATE18,
446    eLEXTYPE_PRIVATE19,
447    eLEXTYPE_PRIVATE20,
448    SPWORDTYPE,
449    eWORDTYPE_ADDED,
450    eWORDTYPE_DELETED
451};
452ENUM!{enum SPPRONUNCIATIONFLAGS {
453    ePRONFLAG_USED = 1 << 0,
454}}
455pub use um::sapi51::{
456    SPWORDPRONUNCIATION,
457    SPWORDPRONUNCIATIONLIST,
458    SPWORD,
459    SPWORDLIST,
460    ISpLexicon, ISpLexiconVtbl,
461    ISpContainerLexicon, ISpContainerLexiconVtbl,
462};
463ENUM!{enum SPSHORTCUTTYPE {
464    SPSHT_NotOverriden = -1i32 as u32,
465    SPSHT_Unknown = 0,
466    SPSHT_EMAIL = 0x1000,
467    SPSHT_OTHER = 0x2000,
468    SPPS_RESERVED1 = 0x3000,
469    SPPS_RESERVED2 = 0x4000,
470    SPPS_RESERVED3 = 0x5000,
471    SPPS_RESERVED4 = 0xf000,
472}}
473STRUCT!{struct SPSHORTCUTPAIR {
474    pNextSHORTCUTPAIR: *mut SPSHORTCUTPAIR,
475    LangID: WORD,
476    shType: SPSHORTCUTTYPE,
477    pszDisplay: LPWSTR,
478    pszSpoken: LPWSTR,
479}}
480STRUCT!{struct SPSHORTCUTPAIRLIST {
481    ulSize: ULONG,
482    pvBuffer: *mut BYTE,
483    pFirstShortcutPair: *mut SPSHORTCUTPAIR,
484}}
485RIDL!{#[uuid(0x3df681e2, 0xea56, 0x11d9, 0x8b, 0xde, 0xf6, 0x6b, 0xad, 0x1e, 0x3f, 0x3a)]
486interface ISpShortcut(ISpShortcutVtbl): IUnknown(IUnknownVtbl) {
487    fn AddShortcut(
488        pszDisplay: LPCWSTR,
489        LangID: WORD,
490        pszSpoken: LPCWSTR,
491        shType: SPSHORTCUTTYPE,
492    ) -> HRESULT,
493    fn RemoveShortcut(
494        pszDisplay: LPCWSTR,
495        LangID: WORD,
496        pszSpoken: LPCWSTR,
497        shType: SPSHORTCUTTYPE,
498    ) -> HRESULT,
499    fn GetShortcuts(
500        LangId: WORD,
501        pShortcutpairList: *mut SPSHORTCUTPAIRLIST,
502    ) -> HRESULT,
503    fn GetGeneration(
504        pdwGeneration: *mut DWORD,
505    ) -> HRESULT,
506    fn GetWordsFromGenerationChange(
507        pdwGeneration: *mut DWORD,
508        pWordList: *mut SPWORDLIST,
509    ) -> HRESULT,
510    fn GetWords(
511        pdwGeneration: *mut DWORD,
512        pdwCookie: *mut DWORD,
513        pWordList: *mut SPWORDLIST,
514    ) -> HRESULT,
515    fn GetShortcutsForGeneration(
516        pdwGeneration: *mut DWORD,
517        pdwCookie: *mut DWORD,
518        pShortcutpairList: *mut SPSHORTCUTPAIRLIST,
519    ) -> HRESULT,
520    fn GetGenerationChange(
521        pdwGeneration: *mut DWORD,
522        pShortcutpairList: *mut SPSHORTCUTPAIRLIST,
523    ) -> HRESULT,
524}}
525pub use um::sapi51::{ISpPhoneConverter, ISpPhoneConverterVtbl};
526RIDL!{#[uuid(0x133adcd4, 0x19b4, 0x4020, 0x9f, 0xdc, 0x84, 0x2e, 0x78, 0x25, 0x3b, 0x17)]
527interface ISpPhoneticAlphabetConverter(ISpPhoneticAlphabetConverterVtbl): IUnknown(IUnknownVtbl) {
528    fn GetLangId(
529        pLangID: *mut WORD,
530    ) -> HRESULT,
531    fn SetLangId(
532        LangID: WORD,
533    ) -> HRESULT,
534    fn SAPI2UPS(
535        pszSAPIId: *const SPPHONEID,
536        pszUPSId: *mut SPPHONEID,
537        cMaxLength: DWORD,
538    ) -> HRESULT,
539    fn UPS2SAPI(
540        pszUPSId: *const SPPHONEID,
541        pszSAPIId: *mut SPPHONEID,
542        cMaxLength: DWORD,
543    ) -> HRESULT,
544    fn GetMaxConvertLength(
545        cSrcLength: DWORD,
546        bSAPI2UPS: BOOL,
547        pcMaxDestLength: *mut DWORD,
548    ) -> HRESULT,
549}}
550RIDL!{#[uuid(0xb2745efd, 0x42ce, 0x48ca, 0x81, 0xf1, 0xa9, 0x6e, 0x02, 0x53, 0x8a, 0x90)]
551interface ISpPhoneticAlphabetSelection(ISpPhoneticAlphabetSelectionVtbl): IUnknown(IUnknownVtbl) {
552    fn IsAlphabetUPS(
553        pfIsUPS: *mut BOOL,
554    ) -> HRESULT,
555    fn SetAlphabetToUPS(
556        fForceUPS: BOOL,
557    ) -> HRESULT,
558}}
559pub use um::sapi51::{
560    SPVPITCH,
561    SPVACTIONS,
562    SPVA_Speak,
563    SPVA_Silence,
564    SPVA_Pronounce,
565    SPVA_Bookmark,
566    SPVA_SpellOut,
567    SPVA_Section,
568    SPVA_ParseUnknownTag,
569    SPVCONTEXT,
570    SPVSTATE,
571    SPRUNSTATE,
572    SPRS_DONE,
573    SPRS_IS_SPEAKING,
574    SPVLIMITS,
575    SPMIN_VOLUME,
576    SPMAX_VOLUME,
577    SPMIN_RATE,
578    SPMAX_RATE,
579    SPVPRIORITY,
580    SPVPRI_NORMAL,
581    SPVPRI_ALERT,
582    SPVPRI_OVER,
583    SPVOICESTATUS,
584    SPEAKFLAGS,
585    SPF_DEFAULT,
586    SPF_ASYNC,
587    SPF_PURGEBEFORESPEAK,
588    SPF_IS_FILENAME,
589    SPF_IS_XML,
590    SPF_IS_NOT_XML,
591    SPF_PERSIST_XML,
592    SPF_NLP_SPEAK_PUNC,
593};
594pub const SPF_PARSE_SAPI: SPEAKFLAGS = 1 << 7;
595pub const SPF_PARSE_SSML: SPEAKFLAGS = 1 << 8;
596pub const SPF_PARSE_AUTODETECT: SPEAKFLAGS = 0;
597pub use um::sapi51::SPF_NLP_MASK;
598pub const SPF_PARSE_MASK: SPEAKFLAGS = SPF_PARSE_SAPI | SPF_PARSE_SSML;
599pub const SPF_VOICE_MASK: SPEAKFLAGS = ::um::sapi51::SPF_VOICE_MASK | SPF_PARSE_MASK;
600pub const SPF_UNUSED_FLAGS: SPEAKFLAGS = !SPF_VOICE_MASK;
601pub use um::sapi51::{
602    ISpVoice, ISpVoiceVtbl,
603    ISpPhrase, ISpPhraseVtbl,
604    ISpPhraseAlt, ISpPhraseAltVtbl,
605};
606ENUM!{enum SPXMLRESULTOPTIONS {
607    SPXRO_SML = 0,
608    SPXRO_Alternates_SML = 1,
609}}
610RIDL!{#[uuid(0xf264da52, 0xe457, 0x4696, 0xb8, 0x56, 0xa7, 0x37, 0xb7, 0x17, 0xaf, 0x79)]
611interface ISpPhrase2(ISpPhrase2Vtbl): ISpPhrase(ISpPhraseVtbl) {
612    fn GetXMLResult(
613        ppszCoMemXMLResult: *mut LPWSTR,
614        Options: SPXMLRESULTOPTIONS,
615    ) -> HRESULT,
616    fn GetXMLErrorInfo(
617        pSemanticErrorInfo: *mut SPSEMANTICERRORINFO,
618    ) -> HRESULT,
619    fn GetAudio(
620        ulStartElement: ULONG,
621        cElements: ULONG,
622        ppStream: *mut *mut ISpStreamFormat,
623    ) -> HRESULT,
624}}
625pub use um::sapi51::{
626    SPRECORESULTTIMES,
627    SPSERIALIZEDRESULT,
628    ISpRecoResult, ISpRecoResultVtbl,
629};
630ENUM!{enum SPCOMMITFLAGS {
631    SPCF_NONE = 0,
632    SPCF_ADD_TO_USER_LEXICON = 1 << 0,
633    SPCF_DEFINITE_CORRECTION = 1 << 1,
634}}
635RIDL!{#[uuid(0x27cac6c4, 0x88f2, 0x41f2, 0x88, 0x17, 0x0c, 0x95, 0xe5, 0x9f, 0x1e, 0x6e)]
636interface ISpRecoResult2(ISpRecoResult2Vtbl): ISpRecoResult(ISpRecoResultVtbl) {
637    fn CommitAlternate(
638        pPhraseAlt: *mut ISpPhraseAlt,
639        ppNewResult: *mut *mut ISpRecoResult,
640    ) -> HRESULT,
641    fn CommitText(
642        ulStartElement: ULONG,
643        cElements: ULONG,
644        pszCorrectedData: LPCWSTR,
645        eCommitFlags: DWORD,
646    ) -> HRESULT,
647    fn SetTextFeedback(
648        pszFeedback: LPCWSTR,
649        fSuccessful: BOOL,
650    ) -> HRESULT,
651}}
652RIDL!{#[uuid(0xae39362b, 0x45a8, 0x4074, 0x9b, 0x9e, 0xcc, 0xf4, 0x9a, 0xa2, 0xd0, 0xb6)]
653interface ISpXMLRecoResult(ISpXMLRecoResultVtbl): ISpRecoResult(ISpRecoResultVtbl) {
654    fn GetXMLResult(
655        ppszCoMemXMLResult: *mut LPWSTR,
656        Options: SPXMLRESULTOPTIONS,
657    ) -> HRESULT,
658    fn GetXMLErrorInfo(
659        pSemanticErrorInfo: *mut SPSEMANTICERRORINFO,
660    ) -> HRESULT,
661}}
662pub use um::sapi51::{
663    SPTEXTSELECTIONINFO,
664    SPWORDPRONOUNCEABLE,
665    SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE,
666    SPWP_UNKNOWN_WORD_PRONOUNCEABLE,
667    SPWP_KNOWN_WORD_PRONOUNCEABLE,
668    SPGRAMMARSTATE,
669    SPGS_DISABLED,
670    SPGS_ENABLED,
671    SPGS_EXCLUSIVE,
672    SPCONTEXTSTATE,
673    SPCS_DISABLED,
674    SPCS_ENABLED,
675    SPRULESTATE,
676    SPRS_INACTIVE,
677    SPRS_ACTIVE,
678    SPRS_ACTIVE_WITH_AUTO_PAUSE,
679};
680pub const SPRS_ACTIVE_USER_DELIMITED: SPRULESTATE = 4;
681pub use um::sapi51::{
682    SP_STREAMPOS_ASAP,
683    SP_STREAMPOS_REALTIME,
684    SPRULETRANS_TEXTBUFFER,
685    SPRULETRANS_WILDCARD,
686    SPRULETRANS_DICTATION,
687    SPGRAMMARWORDTYPE,
688    SPWT_DISPLAY,
689    SPWT_LEXICAL,
690    SPWT_PRONUNCIATION,
691};
692pub const SPWT_LEXICAL_NO_SPECIAL_CHARS: SPGRAMMARWORDTYPE = SPWT_PRONUNCIATION + 1;
693pub use um::sapi51::{
694    SPPROPERTYINFO,
695    SPCFGRULEATTRIBUTES,
696    SPRAF_TopLevel,
697    SPRAF_Active,
698    SPRAF_Export,
699    SPRAF_Import,
700    SPRAF_Interpreter,
701    SPRAF_Dynamic,
702};
703pub const SPRAF_Root: SPCFGRULEATTRIBUTES = 1 << 6;
704pub use um::sapi51::SPRAF_AutoPause;
705pub const SPRAF_UserDelimited: SPCFGRULEATTRIBUTES = 1 << 17;
706pub use um::sapi51::{
707    ISpGrammarBuilder, ISpGrammarBuilderVtbl,
708    SPLOADOPTIONS,
709    SPLO_STATIC,
710    SPLO_DYNAMIC,
711    ISpRecoGrammar, ISpRecoGrammarVtbl,
712};
713ENUM!{enum SPMATCHINGMODE {
714    AllWords = 0,
715    Subsequence = 1,
716    OrderedSubset = 3,
717    SubsequenceContentRequired = 5,
718    OrderedSubsetContentRequired = 7,
719}}
720ENUM!{enum PHONETICALPHABET {
721    PA_Ipa = 0,
722    PA_Ups = 1,
723    PA_Sapi = 2,
724}}
725RIDL!{#[uuid(0x8ab10026, 0x20cc, 0x4b20, 0x8c, 0x22, 0xa4, 0x9c, 0x9b, 0xa7, 0x8f, 0x60)]
726interface ISpGrammarBuilder2(ISpGrammarBuilder2Vtbl): IUnknown(IUnknownVtbl) {
727    fn AddTextSubset(
728        hFromState: SPSTATEHANDLE,
729        hToState: SPSTATEHANDLE,
730        psz: LPCWSTR,
731        eMatchMode: SPMATCHINGMODE,
732    ) -> HRESULT,
733    fn SetPhoneticAlphabet(
734        phoneticALphabet: PHONETICALPHABET,
735    ) -> HRESULT,
736}}
737pub const SPRP_NORMAL: i32 = 0; // TODO: Unknown purpose and type
738RIDL!{#[uuid(0x4b37bc9e, 0x9ed6, 0x44a3, 0x93, 0xd3, 0x18, 0xf0, 0x22, 0xb7, 0x9e, 0xc3)]
739interface ISpRecoGrammar2(ISpRecoGrammar2Vtbl): IUnknown(IUnknownVtbl) {
740    fn GetRules(
741        ppCoMemRules: *mut *mut SPRULE,
742        puNumRules: *mut UINT,
743    ) -> HRESULT,
744    fn LoadCmdFromFile2(
745        pszFileName: LPCWSTR,
746        Options: SPLOADOPTIONS,
747        pszSharingUri: LPCWSTR,
748        pszBaseUri: LPCWSTR,
749    ) -> HRESULT,
750    fn LoadCmdFromMemory2(
751        pGrammar: *const SPBINARYGRAMMAR,
752        Options: SPLOADOPTIONS,
753        pszSharingUri: LPCWSTR,
754        pszBaseUri: LPCWSTR,
755    ) -> HRESULT,
756    fn SetRulePriority(
757        pszRuleName: LPCWSTR,
758        ulRuleId: ULONG,
759        nRulePriority: c_int,
760    ) -> HRESULT,
761    fn SetRuleWeight(
762        pszRuleName: LPCWSTR,
763        ulRuleId: ULONG,
764        flWeight: c_float,
765    ) -> HRESULT,
766    fn SetDictationWeight(
767        flWeight: c_float,
768    ) -> HRESULT,
769    fn SetGrammarLoader(
770        pLoader: *mut ISpeechResourceLoader,
771    ) -> HRESULT,
772    fn SetSMLSecurityManager(
773        pSMLSecurityManager: *mut IInternetSecurityManager,
774    ) -> HRESULT,
775}}
776RIDL!{#[uuid(0xb9ac5783, 0xfcd0, 0x4b21, 0xb1, 0x19, 0xb4, 0xf8, 0xda, 0x8f, 0xd2, 0xc3)]
777interface ISpeechResourceLoader(ISpeechResourceLoaderVtbl): IDispatch(IDispatchVtbl) {
778    fn LoadResource(
779        bstrResourceUri: BSTR,
780        fAlwaysReload: VARIANT_BOOL,
781        pStream: *mut *mut IUnknown,
782        pbstrMIMEType: *mut BSTR,
783        pfModified: *mut VARIANT_BOOL,
784        pbstrRedirectUrl: *mut BSTR,
785    ) -> HRESULT,
786    fn GetLocalCopy(
787        bstrResourceUri: BSTR,
788        pbstrLocalPath: *mut BSTR,
789        pbstrMIMEType: *mut BSTR,
790        pbstrRedirectUrl: *mut BSTR,
791    ) -> HRESULT,
792    fn ReleaseLocalCopy(
793        pbstrLocalPath: BSTR,
794    ) -> HRESULT,
795}}
796pub use um::sapi51::{
797    SPRECOCONTEXTSTATUS,
798    SPBOOKMARKOPTIONS,
799    SPBO_NONE,
800    SPBO_PAUSE,
801};
802pub const SPBO_AHEAD: SPBOOKMARKOPTIONS = 1 << 1;
803pub const SPBO_TIME_UNITS: SPBOOKMARKOPTIONS = 1 << 2;
804pub use um::sapi51::{
805    SPAUDIOOPTIONS,
806    SPAO_NONE,
807    SPAO_RETAIN_AUDIO,
808    ISpRecoContext, ISpRecoContextVtbl,
809};
810ENUM!{enum SPGRAMMAROPTIONS {
811    SPGO_SAPI = 0x1,
812    SPGO_SRGS = 0x2,
813    SPGO_UPS = 0x4,
814    SPGO_SRGS_MS_SCRIPT = 0x8,
815    SPGO_SRGS_W3C_SCRIPT = 0x100,
816    SPGO_SRGS_STG_SCRIPT = 0x200,
817    SPGO_SRGS_SCRIPT = SPGO_SRGS | SPGO_SRGS_MS_SCRIPT
818        | SPGO_SRGS_W3C_SCRIPT | SPGO_SRGS_STG_SCRIPT,
819    SPGO_FILE = 0x10,
820    SPGO_HTTP = 0x20,
821    SPGO_RES = 0x40,
822    SPGO_OBJECT = 0x80,
823    SPGO_DEFAULT = 0x3fb,
824    SPGO_ALL = 0x3ff,
825}}
826ENUM!{enum SPADAPTATIONSETTINGS {
827    SPADS_Default = 0,
828    SPADS_CurrentRecognizer = 0x1,
829    SPADS_RecoProfile = 0x2,
830    SPADS_Immediate = 0x4,
831    SPADS_Reset = 0x8,
832    SPADS_HighVolumeDataSource = 0x10,
833}}
834ENUM!{enum SPADAPTATIONRELEVANCE {
835    SPAR_Unknown = 0,
836    SPAR_Low = 1,
837    SPAR_Medium = 2,
838    SPAR_High = 3,
839}}
840RIDL!{#[uuid(0xbead311c, 0x52ff, 0x437f, 0x94, 0x64, 0x6b, 0x21, 0x05, 0x4c, 0xa7, 0x3d)]
841interface ISpRecoContext2(ISpRecoContext2Vtbl): IUnknown(IUnknownVtbl) {
842    fn SetGrammarOptions(
843        eGrammarOptions: DWORD,
844    ) -> HRESULT,
845    fn GetGrammarOptions(
846        peGrammarOptions: *mut DWORD,
847    ) -> HRESULT,
848    fn SetAdaptationData2(
849        pAdaptationData: LPCWSTR,
850        cch: ULONG,
851        pTopicName: LPCWSTR,
852        eAdaptationSettings: DWORD,
853        eRelevance: SPADAPTATIONRELEVANCE,
854    ) -> HRESULT,
855}}
856pub use um::sapi51::{
857    ISpProperties, ISpPropertiesVtbl,
858    SP_MAX_LANGIDS,
859    SPRECOGNIZERSTATUS,
860    SPWAVEFORMATTYPE,
861    SPWF_INPUT,
862    SPWF_SRENGINE,
863    SPSTREAMFORMATTYPE,
864    SPRECOSTATE,
865    SPRST_INACTIVE,
866    SPRST_ACTIVE,
867    SPRST_ACTIVE_ALWAYS,
868    SPRST_INACTIVE_WITH_PURGE,
869    SPRST_NUM_STATES,
870    ISpRecognizer, ISpRecognizerVtbl,
871};
872RIDL!{#[uuid(0x21b501a0, 0x0ec7, 0x46c9, 0x92, 0xc3, 0xa2, 0xbc, 0x78, 0x4c, 0x54, 0xb9)]
873interface ISpSerializeState(ISpSerializeStateVtbl): IUnknown(IUnknownVtbl) {
874    fn GetSerializedState(
875        ppbData: *mut *mut BYTE,
876        pulSize: *mut ULONG,
877        dwReserved: DWORD,
878    ) -> HRESULT,
879    fn SetSerializedState(
880        pbData: *mut BYTE,
881        ulSize: ULONG,
882        dwReserved: DWORD,
883    ) -> HRESULT,
884}}
885RIDL!{#[uuid(0x8fc6d974, 0xc81e, 0x4098, 0x93, 0xc5, 0x01, 0x47, 0xf6, 0x1e, 0xd4, 0xd3)]
886interface ISpRecognizer2(ISpRecognizer2Vtbl): IUnknown(IUnknownVtbl) {
887    fn EmulateRecognitionEx(
888        pPhrase: *mut ISpPhrase,
889        dwCompareFlags: DWORD,
890    ) -> HRESULT,
891    fn SetTrainingState(
892        fDoingTraining: BOOL,
893        fAdaptFromTrainingData: BOOL,
894    ) -> HRESULT,
895    fn ResetAcousticModelAdaptation() -> HRESULT,
896}}
897STRUCT!{struct SPNORMALIZATIONLIST {
898    ulSize: ULONG,
899    ppszzNormalizedList: *mut *mut WCHAR,
900}}
901RIDL!{#[uuid(0xc360ce4b, 0x76d1, 0x4214, 0xad, 0x68, 0x52, 0x65, 0x7d, 0x50, 0x83, 0xda)]
902interface ISpEnginePronunciation(ISpEnginePronunciationVtbl): IUnknown(IUnknownVtbl) {
903    fn Normalize(
904        pszWord: LPCWSTR,
905        pszLeftContext: LPCWSTR,
906        pszRightContext: LPCWSTR,
907        LangID: WORD,
908        pNormalizationList: *mut SPNORMALIZATIONLIST,
909    ) -> HRESULT,
910    fn GetPronunciations(
911        pszWord: LPCWSTR,
912        pszLeftContext: LPCWSTR,
913        pszRightContext: LPCWSTR,
914        LangID: WORD,
915        pEnginePronunciationList: *mut SPWORDPRONUNCIATIONLIST,
916    ) -> HRESULT,
917}}
918STRUCT!{struct SPDISPLAYTOKEN {
919    pszLexical: *const WCHAR,
920    pszDisplay: *const WCHAR,
921    bDisplayAttributes: BYTE,
922}}
923STRUCT!{struct SPDISPLAYPHRASE {
924    ulNumTokens: ULONG,
925    pTokens: *mut SPDISPLAYTOKEN,
926}}
927RIDL!{#[uuid(0xc8d7c7e2, 0x0dde, 0x44b7, 0xaf, 0xe3, 0xb0, 0xc9, 0x91, 0xfb, 0xeb, 0x5e)]
928interface ISpDisplayAlternates(ISpDisplayAlternatesVtbl): IUnknown(IUnknownVtbl) {
929    fn GetDisplayAlternates(
930        pPhrase: *const SPDISPLAYPHRASE,
931        cRequestCount: ULONG,
932        ppCoMemPhrases: *mut *mut SPDISPLAYPHRASE,
933        pcPhrasesReturned: *mut ULONG,
934    ) -> HRESULT,
935    fn SetFullStopTrailSpace(
936        ulTrailSpace: ULONG,
937    ) -> HRESULT,
938}}
939pub use um::sapi51::{
940    SpeechLanguageId,
941    DISPID_SpeechDataKey,
942    DISPID_SDKSetBinaryValue,
943    DISPID_SDKGetBinaryValue,
944    DISPID_SDKSetStringValue,
945    DISPID_SDKGetStringValue,
946    DISPID_SDKSetLongValue,
947    DISPID_SDKGetlongValue,
948    DISPID_SDKOpenKey,
949    DISPID_SDKCreateKey,
950    DISPID_SDKDeleteKey,
951    DISPID_SDKDeleteValue,
952    DISPID_SDKEnumKeys,
953    DISPID_SDKEnumValues,
954    DISPID_SpeechObjectToken,
955    DISPID_SOTId,
956    DISPID_SOTDataKey,
957    DISPID_SOTCategory,
958    DISPID_SOTGetDescription,
959    DISPID_SOTSetId,
960    DISPID_SOTGetAttribute,
961    DISPID_SOTCreateInstance,
962    DISPID_SOTRemove,
963    DISPID_SOTGetStorageFileName,
964    DISPID_SOTRemoveStorageFileName,
965    DISPID_SOTIsUISupported,
966    DISPID_SOTDisplayUI,
967    DISPID_SOTMatchesAttributes,
968    SpeechDataKeyLocation,
969    SDKLDefaultLocation,
970    SDKLCurrentUser,
971    SDKLLocalMachine,
972    SDKLCurrentConfig,
973    SpeechTokenContext,
974    STCInprocServer,
975    STCInprocHandler ,
976    STCLocalServer,
977    STCRemoteServer,
978    STCAll,
979    SpeechTokenShellFolder,
980    STSF_AppData,
981    STSF_LocalAppData,
982    STSF_CommonAppData,
983    STSF_FlagCreate,
984    DISPID_SpeechObjectTokens,
985    DISPID_SOTsCount,
986    DISPID_SOTsItem,
987    DISPID_SOTs_NewEnum,
988    DISPID_SpeechObjectTokenCategory,
989    DISPID_SOTCId,
990    DISPID_SOTCDefault,
991    DISPID_SOTCSetId,
992    DISPID_SOTCGetDataKey,
993    DISPID_SOTCEnumerateTokens,
994    SpeechAudioFormatType,
995    SAFTDefault,
996    SAFTNoAssignedFormat,
997    SAFTText,
998    SAFTNonStandardFormat,
999    SAFTExtendedAudioFormat,
1000    SAFT8kHz8BitMono,
1001    SAFT8kHz8BitStereo,
1002    SAFT8kHz16BitMono,
1003    SAFT8kHz16BitStereo,
1004    SAFT11kHz8BitMono,
1005    SAFT11kHz8BitStereo,
1006    SAFT11kHz16BitMono,
1007    SAFT11kHz16BitStereo,
1008    SAFT12kHz8BitMono,
1009    SAFT12kHz8BitStereo,
1010    SAFT12kHz16BitMono,
1011    SAFT12kHz16BitStereo,
1012    SAFT16kHz8BitMono,
1013    SAFT16kHz8BitStereo,
1014    SAFT16kHz16BitMono,
1015    SAFT16kHz16BitStereo,
1016    SAFT22kHz8BitMono,
1017    SAFT22kHz8BitStereo,
1018    SAFT22kHz16BitMono,
1019    SAFT22kHz16BitStereo,
1020    SAFT24kHz8BitMono,
1021    SAFT24kHz8BitStereo,
1022    SAFT24kHz16BitMono,
1023    SAFT24kHz16BitStereo,
1024    SAFT32kHz8BitMono,
1025    SAFT32kHz8BitStereo,
1026    SAFT32kHz16BitMono,
1027    SAFT32kHz16BitStereo,
1028    SAFT44kHz8BitMono,
1029    SAFT44kHz8BitStereo,
1030    SAFT44kHz16BitMono,
1031    SAFT44kHz16BitStereo,
1032    SAFT48kHz8BitMono,
1033    SAFT48kHz8BitStereo,
1034    SAFT48kHz16BitMono,
1035    SAFT48kHz16BitStereo,
1036    SAFTTrueSpeech_8kHz1BitMono,
1037    SAFTCCITT_ALaw_8kHzMono,
1038    SAFTCCITT_ALaw_8kHzStereo,
1039    SAFTCCITT_ALaw_11kHzMono,
1040    SAFTCCITT_ALaw_11kHzStereo,
1041    SAFTCCITT_ALaw_22kHzMono,
1042    SAFTCCITT_ALaw_22kHzStereo,
1043    SAFTCCITT_ALaw_44kHzMono,
1044    SAFTCCITT_ALaw_44kHzStereo,
1045    SAFTCCITT_uLaw_8kHzMono,
1046    SAFTCCITT_uLaw_8kHzStereo,
1047    SAFTCCITT_uLaw_11kHzMono,
1048    SAFTCCITT_uLaw_11kHzStereo,
1049    SAFTCCITT_uLaw_22kHzMono,
1050    SAFTCCITT_uLaw_22kHzStereo,
1051    SAFTCCITT_uLaw_44kHzMono,
1052    SAFTCCITT_uLaw_44kHzStereo,
1053    SAFTADPCM_8kHzMono,
1054    SAFTADPCM_8kHzStereo,
1055    SAFTADPCM_11kHzMono,
1056    SAFTADPCM_11kHzStereo,
1057    SAFTADPCM_22kHzMono,
1058    SAFTADPCM_22kHzStereo,
1059    SAFTADPCM_44kHzMono,
1060    SAFTADPCM_44kHzStereo,
1061    SAFTGSM610_8kHzMono,
1062    SAFTGSM610_11kHzMono,
1063    SAFTGSM610_22kHzMono,
1064    SAFTGSM610_44kHzMono,
1065    DISPID_SpeechAudioFormat,
1066    DISPID_SAFType,
1067    DISPID_SAFGuid,
1068    DISPID_SAFGetWaveFormatEx,
1069    DISPID_SAFSetWaveFormatEx,
1070    DISPID_SpeechBaseStream,
1071    DISPID_SBSFormat,
1072    DISPID_SBSRead,
1073    DISPID_SBSWrite,
1074    DISPID_SBSSeek,
1075    SpeechStreamSeekPositionType,
1076    SSSPTRelativeToStart,
1077    SSSPTRelativeToCurrentPosition,
1078    SSSPTRelativeToEnd,
1079    DISPID_SpeechAudio,
1080    DISPID_SAStatus,
1081    DISPID_SABufferInfo,
1082    DISPID_SADefaultFormat,
1083    DISPID_SAVolume,
1084    DISPID_SABufferNotifySize,
1085    DISPID_SAEventHandle,
1086    DISPID_SASetState,
1087    SpeechAudioState,
1088    SASClosed,
1089    SASStop,
1090    SASPause,
1091    SASRun,
1092    DISPID_SpeechMMSysAudio,
1093    DISPID_SMSADeviceId,
1094    DISPID_SMSALineId,
1095    DISPID_SMSAMMHandle,
1096    DISPID_SpeechFileStream,
1097    DISPID_SFSOpen,
1098    DISPID_SFSClose,
1099    SpeechStreamFileMode,
1100    SSFMOpenForRead,
1101    SSFMOpenReadWrite,
1102    SSFMCreate,
1103    SSFMCreateForWrite,
1104    DISPID_SpeechCustomStream,
1105    DISPID_SCSBaseStream,
1106    DISPID_SpeechMemoryStream,
1107    DISPID_SMSSetData,
1108    DISPID_SMSGetData,
1109    DISPID_SpeechAudioStatus,
1110    DISPID_SASFreeBufferSpace,
1111    DISPID_SASNonBlockingIO,
1112    DISPID_SASState,
1113    DISPID_SASCurrentSeekPosition,
1114    DISPID_SASCurrentDevicePosition,
1115    DISPID_SpeechAudioBufferInfo,
1116    DISPID_SABIMinNotification,
1117    DISPID_SABIBufferSize,
1118    DISPID_SABIEventBias,
1119    DISPID_SpeechWaveFormatEx,
1120    DISPID_SWFEFormatTag,
1121    DISPID_SWFEChannels,
1122    DISPID_SWFESamplesPerSec,
1123    DISPID_SWFEAvgBytesPerSec,
1124    DISPID_SWFEBlockAlign,
1125    DISPID_SWFEBitsPerSample,
1126    DISPID_SWFEExtraData,
1127    DISPID_SpeechVoice,
1128    DISPID_SVStatus,
1129    DISPID_SVVoice,
1130    DISPID_SVAudioOutput,
1131    DISPID_SVAudioOutputStream,
1132    DISPID_SVRate,
1133    DISPID_SVVolume,
1134    DISPID_SVAllowAudioOuputFormatChangesOnNextSet,
1135    DISPID_SVEventInterests,
1136    DISPID_SVPriority,
1137    DISPID_SVAlertBoundary,
1138    DISPID_SVSyncronousSpeakTimeout,
1139    DISPID_SVSpeak,
1140    DISPID_SVSpeakStream,
1141    DISPID_SVPause,
1142    DISPID_SVResume,
1143    DISPID_SVSkip,
1144    DISPID_SVGetVoices,
1145    DISPID_SVGetAudioOutputs,
1146    DISPID_SVWaitUntilDone,
1147    DISPID_SVSpeakCompleteEvent,
1148    DISPID_SVIsUISupported,
1149    DISPID_SVDisplayUI,
1150    SpeechVoicePriority,
1151    SVPNormal,
1152    SVPAlert,
1153    SVPOver,
1154    SpeechVoiceSpeakFlags,
1155    SVSFDefault,
1156    SVSFlagsAsync,
1157    SVSFPurgeBeforeSpeak,
1158    SVSFIsFilename,
1159    SVSFIsXML,
1160    SVSFIsNotXML,
1161    SVSFPersistXML,
1162    SVSFNLPSpeakPunc,
1163};
1164pub const SVSFParseSapi: SpeechVoiceSpeakFlags = SPF_PARSE_SAPI;
1165pub const SVSFParseSsml: SpeechVoiceSpeakFlags = SPF_PARSE_SSML;
1166pub const SVSFParseAutodetect: SpeechVoiceSpeakFlags = SPF_PARSE_AUTODETECT;
1167pub use um::sapi51::SVSFNLPMask;
1168pub const SVSFParseMask: SpeechVoiceSpeakFlags = SPF_PARSE_MASK as u32;
1169pub use um::sapi51::{
1170    SVSFVoiceMask,
1171    SVSFUnusedFlags,
1172    SpeechVoiceEvents,
1173    SVEStartInputStream,
1174    SVEEndInputStream,
1175    SVEVoiceChange,
1176    SVEBookmark,
1177    SVEWordBoundary,
1178    SVEPhoneme,
1179    SVESentenceBoundary,
1180    SVEViseme,
1181    SVEAudioLevel,
1182    SVEPrivate,
1183    SVEAllEvents,
1184    DISPID_SpeechVoiceStatus,
1185    DISPID_SVSCurrentStreamNumber,
1186    DISPID_SVSLastStreamNumberQueued,
1187    DISPID_SVSLastResult,
1188    DISPID_SVSRunningState,
1189    DISPID_SVSInputWordPosition,
1190    DISPID_SVSInputWordLength,
1191    DISPID_SVSInputSentencePosition,
1192    DISPID_SVSInputSentenceLength,
1193    DISPID_SVSLastBookmark,
1194    DISPID_SVSLastBookmarkId,
1195    DISPID_SVSPhonemeId,
1196    DISPID_SVSVisemeId,
1197    SpeechRunState,
1198    SRSEDone,
1199    SRSEIsSpeaking,
1200    SpeechVisemeType,
1201    SVP_0,
1202    SVP_1,
1203    SVP_2,
1204    SVP_3,
1205    SVP_4,
1206    SVP_5,
1207    SVP_6,
1208    SVP_7,
1209    SVP_8,
1210    SVP_9,
1211    SVP_10,
1212    SVP_11,
1213    SVP_12,
1214    SVP_13,
1215    SVP_14,
1216    SVP_15,
1217    SVP_16,
1218    SVP_17,
1219    SVP_18,
1220    SVP_19,
1221    SVP_20,
1222    SVP_21,
1223    SpeechVisemeFeature,
1224    SVF_None,
1225    SVF_Stressed,
1226    SVF_Emphasis,
1227    DISPID_SpeechVoiceEvent,
1228    DISPID_SVEStreamStart,
1229    DISPID_SVEStreamEnd,
1230    DISPID_SVEVoiceChange,
1231    DISPID_SVEBookmark,
1232    DISPID_SVEWord,
1233    DISPID_SVEPhoneme,
1234    DISPID_SVESentenceBoundary,
1235    DISPID_SVEViseme,
1236    DISPID_SVEAudioLevel,
1237    DISPID_SVEEnginePrivate,
1238    DISPID_SpeechRecognizer,
1239    DISPID_SRRecognizer,
1240    DISPID_SRAllowAudioInputFormatChangesOnNextSet,
1241    DISPID_SRAudioInput,
1242    DISPID_SRAudioInputStream,
1243    DISPID_SRIsShared,
1244    DISPID_SRState,
1245    DISPID_SRStatus,
1246    DISPID_SRProfile,
1247    DISPID_SREmulateRecognition,
1248    DISPID_SRCreateRecoContext,
1249    DISPID_SRGetFormat,
1250    DISPID_SRSetPropertyNumber,
1251    DISPID_SRGetPropertyNumber,
1252    DISPID_SRSetPropertyString,
1253    DISPID_SRGetPropertyString,
1254    DISPID_SRIsUISupported,
1255    DISPID_SRDisplayUI,
1256    DISPID_SRGetRecognizers,
1257    DISPID_SVGetAudioInputs,
1258    DISPID_SVGetProfiles,
1259    SpeechRecognizerState,
1260    SRSInactive,
1261    SRSActive,
1262    SRSActiveAlways,
1263    SRSInactiveWithPurge,
1264    SpeechDisplayAttributes,
1265    SDA_No_Trailing_Space,
1266    SDA_One_Trailing_Space,
1267    SDA_Two_Trailing_Spaces,
1268    SDA_Consume_Leading_Spaces,
1269    SpeechFormatType,
1270    SFTInput,
1271    SFTSREngine,
1272};
1273ENUM!{enum SpeechEmulationCompareFlags {
1274    SECFIgnoreCase = 0x1,
1275    SECFIgnoreKanaType = 0x10000,
1276    SECFIgnoreWidth = 0x20000,
1277    SECFNoSpecialChars = 0x20000000,
1278    SECFEmulateResult = 0x40000000,
1279    SECFDefault = SECFIgnoreCase | SECFIgnoreKanaType | SECFIgnoreWidth,
1280}}
1281pub use um::sapi51::{
1282    DISPID_SpeechRecognizerStatus,
1283    DISPID_SRSAudioStatus,
1284    DISPID_SRSCurrentStreamPosition,
1285    DISPID_SRSCurrentStreamNumber,
1286    DISPID_SRSNumberOfActiveRules,
1287    DISPID_SRSClsidEngine,
1288    DISPID_SRSSupportedLanguages,
1289    DISPID_SpeechRecoContext,
1290    DISPID_SRCRecognizer,
1291    DISPID_SRCAudioInInterferenceStatus,
1292    DISPID_SRCRequestedUIType,
1293    DISPID_SRCVoice,
1294    DISPID_SRAllowVoiceFormatMatchingOnNextSet,
1295    DISPID_SRCVoicePurgeEvent,
1296    DISPID_SRCEventInterests,
1297    DISPID_SRCCmdMaxAlternates,
1298    DISPID_SRCState,
1299    DISPID_SRCRetainedAudio,
1300    DISPID_SRCRetainedAudioFormat,
1301    DISPID_SRCPause,
1302    DISPID_SRCResume,
1303    DISPID_SRCCreateGrammar,
1304    DISPID_SRCCreateResultFromMemory,
1305    DISPID_SRCBookmark,
1306    DISPID_SRCSetAdaptationData,
1307    SpeechRetainedAudioOptions,
1308    SRAONone,
1309    SRAORetainAudio,
1310    SpeechBookmarkOptions,
1311    SBONone,
1312    SBOPause,
1313    SpeechInterference,
1314    SINone,
1315    SINoise,
1316    SINoSignal,
1317    SITooLoud,
1318    SITooQuiet,
1319    SITooFast,
1320    SITooSlow,
1321    SpeechRecoEvents,
1322    SREStreamEnd,
1323    SRESoundStart,
1324    SRESoundEnd,
1325    SREPhraseStart,
1326    SRERecognition,
1327    SREHypothesis,
1328    SREBookmark,
1329    SREPropertyNumChange,
1330    SREPropertyStringChange,
1331    SREFalseRecognition,
1332    SREInterference,
1333    SRERequestUI,
1334    SREStateChange,
1335    SREAdaptation,
1336    SREStreamStart,
1337    SRERecoOtherContext,
1338    SREAudioLevel,
1339    SREPrivate,
1340    SREAllEvents,
1341    SpeechRecoContextState,
1342    SRCS_Disabled,
1343    SRCS_Enabled,
1344    DISPIDSPRG,
1345    DISPID_SRGId,
1346    DISPID_SRGRecoContext,
1347    DISPID_SRGState,
1348    DISPID_SRGRules,
1349    DISPID_SRGReset,
1350    DISPID_SRGCommit,
1351    DISPID_SRGCmdLoadFromFile,
1352    DISPID_SRGCmdLoadFromObject,
1353    DISPID_SRGCmdLoadFromResource,
1354    DISPID_SRGCmdLoadFromMemory,
1355    DISPID_SRGCmdLoadFromProprietaryGrammar,
1356    DISPID_SRGCmdSetRuleState,
1357    DISPID_SRGCmdSetRuleIdState,
1358    DISPID_SRGDictationLoad,
1359    DISPID_SRGDictationUnload,
1360    DISPID_SRGDictationSetState,
1361    DISPID_SRGSetWordSequenceData,
1362    DISPID_SRGSetTextSelection,
1363    DISPID_SRGIsPronounceable,
1364    SpeechLoadOption,
1365    SLOStatic,
1366    SLODynamic,
1367    SpeechWordPronounceable,
1368    SWPUnknownWordUnpronounceable,
1369    SWPUnknownWordPronounceable,
1370    SWPKnownWordPronounceable,
1371    SpeechGrammarState,
1372    SGSEnabled,
1373    SGSDisabled,
1374    SGSExclusive,
1375    SpeechRuleState,
1376    SGDSInactive,
1377    SGDSActive,
1378    SGDSActiveWithAutoPause,
1379};
1380pub const SGDSActiveUserDelimited: SpeechRuleState = SPRS_ACTIVE_USER_DELIMITED;
1381pub use um::sapi51::{
1382    SpeechRuleAttributes,
1383    SRATopLevel,
1384    SRADefaultToActive,
1385    SRAExport,
1386    SRAImport,
1387    SRAInterpreter,
1388    SRADynamic,
1389};
1390pub const SRARoot: SpeechRuleAttributes = SPRAF_Root;
1391pub use um::sapi51::{
1392    SpeechGrammarWordType,
1393    SGDisplay,
1394    SGLexical,
1395    SGPronounciation,
1396};
1397pub const SGLexicalNoSpecialChars: SpeechGrammarWordType = SPWT_LEXICAL_NO_SPECIAL_CHARS;
1398pub use um::sapi51::{
1399    DISPID_SpeechRecoContextEvents,
1400    DISPID_SRCEStartStream,
1401    DISPID_SRCEEndStream,
1402    DISPID_SRCEBookmark,
1403    DISPID_SRCESoundStart,
1404    DISPID_SRCESoundEnd,
1405    DISPID_SRCEPhraseStart,
1406    DISPID_SRCERecognition,
1407    DISPID_SRCEHypothesis,
1408    DISPID_SRCEPropertyNumberChange,
1409    DISPID_SRCEPropertyStringChange,
1410    DISPID_SRCEFalseRecognition,
1411    DISPID_SRCEInterference,
1412    DISPID_SRCERequestUI,
1413    DISPID_SRCERecognizerStateChange,
1414    DISPID_SRCEAdaptation,
1415    DISPID_SRCERecognitionForOtherContext,
1416    DISPID_SRCEAudioLevel,
1417    DISPID_SRCEEnginePrivate,
1418    SpeechRecognitionType,
1419    SRTStandard,
1420    SRTAutopause,
1421    SRTEmulated,
1422};
1423pub const SRTSMLTimeout: SpeechRecognitionType = SPREF_SMLTimeout;
1424pub const SRTExtendableParse: SpeechRecognitionType = SPREF_ExtendableParse;
1425pub const SRTReSent: SpeechRecognitionType = SPREF_ReSent;
1426pub use um::sapi51::{
1427    DISPID_SpeechGrammarRule,
1428    DISPID_SGRAttributes,
1429    DISPID_SGRInitialState,
1430    DISPID_SGRName,
1431    DISPID_SGRId,
1432    DISPID_SGRClear,
1433    DISPID_SGRAddResource,
1434    DISPID_SGRAddState,
1435    DISPID_SpeechGrammarRules,
1436    DISPID_SGRsCount,
1437    DISPID_SGRsDynamic,
1438    DISPID_SGRsAdd,
1439    DISPID_SGRsCommit,
1440    DISPID_SGRsCommitAndSave,
1441    DISPID_SGRsFindRule,
1442    DISPID_SGRsItem,
1443    DISPID_SGRs_NewEnum,
1444    DISPID_SpeechGrammarRuleState,
1445    DISPID_SGRSRule,
1446    DISPID_SGRSTransitions,
1447    DISPID_SGRSAddWordTransition,
1448    DISPID_SGRSAddRuleTransition,
1449    DISPID_SGRSAddSpecialTransition,
1450    SpeechSpecialTransitionType,
1451    SSTTWildcard,
1452    SSTTDictation,
1453    SSTTTextBuffer,
1454    DISPID_SpeechGrammarRuleStateTransitions,
1455    DISPID_SGRSTsCount,
1456    DISPID_SGRSTsItem,
1457    DISPID_SGRSTs_NewEnum,
1458    DISPID_SpeechGrammarRuleStateTransition,
1459    DISPID_SGRSTType,
1460    DISPID_SGRSTText,
1461    DISPID_SGRSTRule,
1462    DISPID_SGRSTWeight,
1463    DISPID_SGRSTPropertyName,
1464    DISPID_SGRSTPropertyId,
1465    DISPID_SGRSTPropertyValue,
1466    DISPID_SGRSTNextState,
1467    SpeechGrammarRuleStateTransitionType,
1468    SGRSTTEpsilon,
1469    SGRSTTWord,
1470    SGRSTTRule,
1471    SGRSTTDictation,
1472    SGRSTTWildcard,
1473    SGRSTTTextBuffer,
1474    DISPIDSPTSI,
1475    DISPIDSPTSI_ActiveOffset,
1476    DISPIDSPTSI_ActiveLength,
1477    DISPIDSPTSI_SelectionOffset,
1478    DISPIDSPTSI_SelectionLength,
1479    DISPID_SpeechRecoResult,
1480    DISPID_SRRRecoContext,
1481    DISPID_SRRTimes,
1482    DISPID_SRRAudioFormat,
1483    DISPID_SRRPhraseInfo,
1484    DISPID_SRRAlternates,
1485    DISPID_SRRAudio,
1486    DISPID_SRRSpeakAudio,
1487    DISPID_SRRSaveToMemory,
1488    DISPID_SRRDiscardResultInfo,
1489    SpeechDiscardType,
1490    SDTProperty,
1491    SDTReplacement,
1492    SDTRule,
1493    SDTDisplayText,
1494    SDTLexicalForm,
1495    SDTPronunciation,
1496    SDTAudio,
1497    SDTAlternates,
1498    SDTAll,
1499};
1500ENUM!{enum DISPID_SpeechXMLRecoResult {
1501    DISPID_SRRGetXMLResult,
1502    DISPID_SRRGetXMLErrorInfo,
1503}}
1504ENUM!{enum DISPID_SpeechRecoResult2 {
1505    DISPID_SRRSetTextFeedback,
1506}}
1507pub use um::sapi51::{
1508    DISPID_SpeechPhraseBuilder,
1509    DISPID_SPPBRestorePhraseFromMemory,
1510    DISPID_SpeechRecoResultTimes,
1511    DISPID_SRRTStreamTime,
1512    DISPID_SRRTLength,
1513    DISPID_SRRTTickCount,
1514    DISPID_SRRTOffsetFromStart,
1515    DISPID_SpeechPhraseAlternate,
1516    DISPID_SPARecoResult,
1517    DISPID_SPAStartElementInResult,
1518    DISPID_SPANumberOfElementsInResult,
1519    DISPID_SPAPhraseInfo,
1520    DISPID_SPACommit,
1521    DISPID_SpeechPhraseAlternates,
1522    DISPID_SPAsCount,
1523    DISPID_SPAsItem,
1524    DISPID_SPAs_NewEnum,
1525    DISPID_SpeechPhraseInfo,
1526    DISPID_SPILanguageId,
1527    DISPID_SPIGrammarId,
1528    DISPID_SPIStartTime,
1529    DISPID_SPIAudioStreamPosition,
1530    DISPID_SPIAudioSizeBytes,
1531    DISPID_SPIRetainedSizeBytes,
1532    DISPID_SPIAudioSizeTime,
1533    DISPID_SPIRule,
1534    DISPID_SPIProperties,
1535    DISPID_SPIElements,
1536    DISPID_SPIReplacements,
1537    DISPID_SPIEngineId,
1538    DISPID_SPIEnginePrivateData,
1539    DISPID_SPISaveToMemory,
1540    DISPID_SPIGetText,
1541    DISPID_SPIGetDisplayAttributes,
1542    DISPID_SpeechPhraseElement,
1543    DISPID_SPEAudioTimeOffset,
1544    DISPID_SPEAudioSizeTime,
1545    DISPID_SPEAudioStreamOffset,
1546    DISPID_SPEAudioSizeBytes,
1547    DISPID_SPERetainedStreamOffset,
1548    DISPID_SPERetainedSizeBytes,
1549    DISPID_SPEDisplayText,
1550    DISPID_SPELexicalForm,
1551    DISPID_SPEPronunciation,
1552    DISPID_SPEDisplayAttributes,
1553    DISPID_SPERequiredConfidence,
1554    DISPID_SPEActualConfidence,
1555    DISPID_SPEEngineConfidence,
1556    SpeechEngineConfidence,
1557    SECLowConfidence,
1558    SECNormalConfidence,
1559    SECHighConfidence,
1560    DISPID_SpeechPhraseElements,
1561    DISPID_SPEsCount,
1562    DISPID_SPEsItem,
1563    DISPID_SPEs_NewEnum,
1564    DISPID_SpeechPhraseReplacement,
1565    DISPID_SPRDisplayAttributes,
1566    DISPID_SPRText,
1567    DISPID_SPRFirstElement,
1568    DISPID_SPRNumberOfElements,
1569    DISPID_SpeechPhraseReplacements,
1570    DISPID_SPRsCount,
1571    DISPID_SPRsItem,
1572    DISPID_SPRs_NewEnum,
1573    DISPID_SpeechPhraseProperty,
1574    DISPID_SPPName,
1575    DISPID_SPPId,
1576    DISPID_SPPValue,
1577    DISPID_SPPFirstElement,
1578    DISPID_SPPNumberOfElements,
1579    DISPID_SPPEngineConfidence,
1580    DISPID_SPPConfidence,
1581    DISPID_SPPParent,
1582    DISPID_SPPChildren,
1583    DISPID_SpeechPhraseProperties,
1584    DISPID_SPPsCount,
1585    DISPID_SPPsItem,
1586    DISPID_SPPs_NewEnum,
1587    DISPID_SpeechPhraseRule,
1588    DISPID_SPRuleName,
1589    DISPID_SPRuleId,
1590    DISPID_SPRuleFirstElement,
1591    DISPID_SPRuleNumberOfElements,
1592    DISPID_SPRuleParent,
1593    DISPID_SPRuleChildren,
1594    DISPID_SPRuleConfidence,
1595    DISPID_SPRuleEngineConfidence,
1596    DISPID_SpeechPhraseRules,
1597    DISPID_SPRulesCount,
1598    DISPID_SPRulesItem,
1599    DISPID_SPRules_NewEnum,
1600    DISPID_SpeechLexicon,
1601    DISPID_SLGenerationId,
1602    DISPID_SLGetWords,
1603    DISPID_SLAddPronunciation,
1604    DISPID_SLAddPronunciationByPhoneIds,
1605    DISPID_SLRemovePronunciation,
1606    DISPID_SLRemovePronunciationByPhoneIds,
1607    DISPID_SLGetPronunciations,
1608    DISPID_SLGetGenerationChange,
1609    SpeechLexiconType,
1610    SLTUser,
1611    SLTApp,
1612    SpeechPartOfSpeech,
1613    SPSNotOverriden,
1614    SPSUnknown,
1615    SPSNoun,
1616    SPSVerb,
1617    SPSModifier,
1618    SPSFunction,
1619    SPSInterjection,
1620};
1621pub const SPSLMA: SpeechPartOfSpeech = SPPS_LMA;
1622pub const SPSSuppressWord: SpeechPartOfSpeech = SPPS_SuppressWord;
1623pub use um::sapi51::{
1624    DISPID_SpeechLexiconWords,
1625    DISPID_SLWsCount,
1626    DISPID_SLWsItem,
1627    DISPID_SLWs_NewEnum,
1628    SpeechWordType,
1629    SWTAdded,
1630    SWTDeleted,
1631    DISPID_SpeechLexiconWord,
1632    DISPID_SLWLangId,
1633    DISPID_SLWType,
1634    DISPID_SLWWord,
1635    DISPID_SLWPronunciations,
1636    DISPID_SpeechLexiconProns,
1637    DISPID_SLPsCount,
1638    DISPID_SLPsItem,
1639    DISPID_SLPs_NewEnum,
1640    DISPID_SpeechLexiconPronunciation,
1641    DISPID_SLPType,
1642    DISPID_SLPLangId,
1643    DISPID_SLPPartOfSpeech,
1644    DISPID_SLPPhoneIds,
1645    DISPID_SLPSymbolic,
1646    DISPID_SpeechPhoneConverter,
1647    DISPID_SPCLangId,
1648    DISPID_SPCPhoneToId,
1649    DISPID_SPCIdToPhone,
1650    LIBID_SpeechLib,
1651    ISpeechDataKey, ISpeechDataKeyVtbl,
1652    ISpeechObjectToken, ISpeechObjectTokenVtbl,
1653    ISpeechObjectTokens, ISpeechObjectTokensVtbl,
1654    ISpeechObjectTokenCategory, ISpeechObjectTokenCategoryVtbl,
1655    ISpeechAudioBufferInfo, ISpeechAudioBufferInfoVtbl,
1656    ISpeechAudioStatus, ISpeechAudioStatusVtbl,
1657    ISpeechAudioFormat, ISpeechAudioFormatVtbl,
1658    ISpeechWaveFormatEx, ISpeechWaveFormatExVtbl,
1659    ISpeechBaseStream, ISpeechBaseStreamVtbl,
1660    ISpeechFileStream, ISpeechFileStreamVtbl,
1661    ISpeechMemoryStream, ISpeechMemoryStreamVtbl,
1662    ISpeechCustomStream, ISpeechCustomStreamVtbl,
1663    ISpeechAudio, ISpeechAudioVtbl,
1664    ISpeechMMSysAudio, ISpeechMMSysAudioVtbl,
1665    ISpeechVoice, ISpeechVoiceVtbl,
1666    ISpeechVoiceStatus, ISpeechVoiceStatusVtbl,
1667    _ISpeechVoiceEvents, _ISpeechVoiceEventsVtbl,
1668    ISpeechRecognizer, ISpeechRecognizerVtbl,
1669    ISpeechRecognizerStatus, ISpeechRecognizerStatusVtbl,
1670    ISpeechRecoContext, ISpeechRecoContextVtbl,
1671    ISpeechRecoGrammar, ISpeechRecoGrammarVtbl,
1672    _ISpeechRecoContextEvents, _ISpeechRecoContextEventsVtbl,
1673    ISpeechGrammarRule, ISpeechGrammarRuleVtbl,
1674    ISpeechGrammarRules, ISpeechGrammarRulesVtbl,
1675    ISpeechGrammarRuleState, ISpeechGrammarRuleStateVtbl,
1676    ISpeechGrammarRuleStateTransition, ISpeechGrammarRuleStateTransitionVtbl,
1677    ISpeechGrammarRuleStateTransitions, ISpeechGrammarRuleStateTransitionsVtbl,
1678    ISpeechTextSelectionInformation, ISpeechTextSelectionInformationVtbl,
1679    ISpeechRecoResult, ISpeechRecoResultVtbl,
1680};
1681RIDL!{#[uuid(0x8e0a246d, 0xd3c8, 0x45de, 0x86, 0x57, 0x04, 0x29, 0x0c, 0x45, 0x8c, 0x3c)]
1682interface ISpeechRecoResult2(ISpeechRecoResult2Vtbl): ISpeechRecoResult(ISpeechRecoResultVtbl) {
1683    fn SetTextFeedback(
1684        Feedback: BSTR,
1685        WasSuccessful: VARIANT_BOOL,
1686    ) -> HRESULT,
1687}}
1688pub use um::sapi51::{
1689    ISpeechRecoResultTimes, ISpeechRecoResultTimesVtbl,
1690    ISpeechPhraseAlternate, ISpeechPhraseAlternateVtbl,
1691    ISpeechPhraseAlternates, ISpeechPhraseAlternatesVtbl,
1692    ISpeechPhraseInfo, ISpeechPhraseInfoVtbl,
1693    ISpeechPhraseElement, ISpeechPhraseElementVtbl,
1694    ISpeechPhraseElements, ISpeechPhraseElementsVtbl,
1695    ISpeechPhraseReplacement, ISpeechPhraseReplacementVtbl,
1696    ISpeechPhraseReplacements, ISpeechPhraseReplacementsVtbl,
1697    ISpeechPhraseProperty, ISpeechPhrasePropertyVtbl,
1698    ISpeechPhraseProperties, ISpeechPhrasePropertiesVtbl,
1699    ISpeechPhraseRule, ISpeechPhraseRuleVtbl,
1700    ISpeechPhraseRules, ISpeechPhraseRulesVtbl,
1701    ISpeechLexicon, ISpeechLexiconVtbl,
1702    ISpeechLexiconWords, ISpeechLexiconWordsVtbl,
1703    ISpeechLexiconWord, ISpeechLexiconWordVtbl,
1704    ISpeechLexiconPronunciations, ISpeechLexiconPronunciationsVtbl,
1705    ISpeechLexiconPronunciation, ISpeechLexiconPronunciationVtbl,
1706    Speech_Default_Weight,
1707    Speech_Max_Word_Length,
1708    Speech_Max_Pron_Length,
1709    Speech_StreamPos_Asap,
1710    Speech_StreamPos_RealTime,
1711    SpeechAllElements,
1712};
1713RIDL!{#[uuid(0xaaec54af, 0x8f85, 0x4924, 0x94, 0x4d, 0xb7, 0x9d, 0x39, 0xd7, 0x2e, 0x19)]
1714interface ISpeechXMLRecoResult(ISpeechXMLRecoResultVtbl):
1715    ISpeechRecoResult(ISpeechRecoResultVtbl) {
1716    fn GetXMLResult(
1717        Options: SPXMLRESULTOPTIONS,
1718        pResult: *mut BSTR,
1719    ) -> HRESULT,
1720    fn GetXMLErrorInfo(
1721        LineNumber: *mut c_long,
1722        ScriptLine: *mut BSTR,
1723        Source: *mut BSTR,
1724        Description: *mut BSTR,
1725        ResultCode: *mut c_long,
1726        IsError: *mut VARIANT_BOOL,
1727    ) -> HRESULT,
1728}}
1729RIDL!{#[uuid(0x6d60eb64, 0xaced, 0x40a6, 0xbb, 0xf3, 0x4e, 0x55, 0x7f, 0x71, 0xde, 0xe2)]
1730interface ISpeechRecoResultDispatch(ISpeechRecoResultDispatchVtbl): IDispatch(IDispatchVtbl) {
1731    fn get_RecoContext(
1732        RecoContext: *mut ISpeechRecoContext,
1733    ) -> HRESULT,
1734    fn get_Times(
1735        Times: *mut ISpeechRecoResultTimes,
1736    ) -> HRESULT,
1737    fn putref_AudioFormat(
1738        Format: *mut ISpeechAudioFormat,
1739    ) -> HRESULT,
1740    fn get_AudioFormat(
1741        Format: *mut *mut ISpeechAudioFormat,
1742    ) -> HRESULT,
1743    fn get_PhraseInfo(
1744        PhraseInfo: *mut *mut ISpeechPhraseInfo,
1745    ) -> HRESULT,
1746    fn Alternates(
1747        RequestCount: c_long,
1748        StartElement: c_long,
1749        Elements: c_long,
1750        Alternates: *mut *mut ISpeechPhraseAlternates,
1751    ) -> HRESULT,
1752    fn Audio(
1753        StartElement: c_long,
1754        Elements: c_long,
1755        Stream: *mut *mut ISpeechMemoryStream,
1756    ) -> HRESULT,
1757    fn SpeakAudio(
1758        StartElement: c_long,
1759        Elements: c_long,
1760        Flags: SpeechVoiceSpeakFlags,
1761        StreamNumber: *mut c_long,
1762    ) -> HRESULT,
1763    fn SaveToMemory(
1764        ResultBlock: *mut VARIANT,
1765    ) -> HRESULT,
1766    fn DiscardResultInfo(
1767        ValueTypes: SpeechDiscardType,
1768    ) -> HRESULT,
1769    fn GetXMLResult(
1770        Options: SPXMLRESULTOPTIONS,
1771        pResult: *mut BSTR,
1772    ) -> HRESULT,
1773    fn GetXMLErrorInfo(
1774        LineNumber: *mut c_long,
1775        ScriptLine: *mut BSTR,
1776        Source: *mut BSTR,
1777        Description: *mut BSTR,
1778        ResultCode: *mut HRESULT,
1779        IsError: *mut VARIANT_BOOL,
1780    ) -> HRESULT,
1781    fn SetTextFeedback(
1782        Feedback: BSTR,
1783        WasSuccessful: VARIANT_BOOL,
1784    ) -> HRESULT,
1785}}
1786pub use um::sapi51::{
1787    ISpeechPhraseInfoBuilder, ISpeechPhraseInfoBuilderVtbl,
1788    ISpeechPhoneConverter, ISpeechPhoneConverterVtbl,
1789    CLSID_SpNotifyTranslator,
1790    CLSID_SpObjectTokenCategory,
1791    CLSID_SpObjectToken,
1792    CLSID_SpResourceManager,
1793    CLSID_SpStreamFormatConverter,
1794    CLSID_SpMMAudioEnum,
1795    CLSID_SpMMAudioIn,
1796    CLSID_SpMMAudioOut,
1797    CLSID_SpStream,
1798    CLSID_SpVoice,
1799    CLSID_SpSharedRecoContext,
1800    CLSID_SpInprocRecognizer,
1801    CLSID_SpSharedRecognizer,
1802    CLSID_SpLexicon,
1803    CLSID_SpUnCompressedLexicon,
1804    CLSID_SpCompressedLexicon,
1805};
1806extern {
1807    pub static CLSID_SpShortcut: CLSID;
1808}
1809pub use um::sapi51::CLSID_SpPhoneConverter;
1810extern {
1811    pub static CLSID_SpPhoneticAlphabetConverter: CLSID;
1812}
1813pub use um::sapi51::{
1814    CLSID_SpNullPhoneConverter,
1815    CLSID_SpTextSelectionInformation,
1816    CLSID_SpPhraseInfoBuilder,
1817    CLSID_SpAudioFormat,
1818    CLSID_SpWaveFormatEx,
1819    CLSID_SpInProcRecoContext,
1820    CLSID_SpCustomStream,
1821    CLSID_SpFileStream,
1822    CLSID_SpMemoryStream,
1823};