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
7 use ctypes::{c_float, c_int, c_long};
8 use shared::guiddef::{CLSID, GUID};
9 use shared::minwindef::{BOOL, BYTE, DWORD, LPARAM, UINT, ULONG, WORD, WPARAM};
10 use shared::wtypes::{BSTR, VARIANT_BOOL};
11 use um::oaidl::{IDispatch, IDispatchVtbl, VARIANT};
12 use um::unknwnbase::{IUnknown, IUnknownVtbl};
13 use um::urlmon::IInternetSecurityManager;
14 use um::winnt::{HRESULT, LPCWSTR, LPWSTR, ULONGLONG, WCHAR};
15 pub 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 };
123 pub const SPTOKENKEY_RETAINEDAUDIO: &'static str = "SecondsPerRetainedAudioEvent";
124 pub const SPTOKENKEY_AUDIO_LATENCY_WARNING: &'static str = "LatencyWarningThreshold";
125 pub const SPTOKENKEY_AUDIO_LATENCY_TRUNCATE: &'static str = "LatencyTruncateThreshold";
126 pub const SPTOKENKEY_AUDIO_LATENCY_UPDATE_INTERVAL: &'static str = "LatencyUpdateInterval";
127 pub 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 };
143 pub const SPREG_SAFE_USER_TOKENS: &'static str
144     = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\UserTokens";
145 pub 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 };
154 pub const SP_EMULATE_RESULT: ULONG = 0x40000000;
155 pub 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 };
207 pub const SPEI_SR_RETAINEDAUDIO: SPEVENTENUM = 51;
208 pub use um::sapi51::SPEI_SR_PRIVATE;
209 pub const SPEI_RESERVED4: SPEVENTENUM = 53;
210 pub const SPEI_RESERVED5: SPEVENTENUM = 54;
211 pub const SPEI_RESERVED6: SPEVENTENUM = 55;
212 pub use um::sapi51::SPEI_MIN_SR;
213 pub const SPEI_MAX_SR: SPEVENTENUM = 55;
214 pub 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 };
227 STRUCT!{struct SPEVENTEX {
228     eEventId: WORD,
229     elParamType: WORD,
230     ulStreamNum: ULONG,
231     ullAudioStreamOffset: ULONGLONG,
232     wParam: WPARAM,
233     lParam: LPARAM,
234     ullAudioTimeOffset: ULONGLONG,
235 }}
236 pub 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 };
252 pub const SPESF_EMULATED: SPENDSRSTREAMFLAGS = 1 << 1;
253 pub 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 };
283 RIDL!{#[uuid(0x2373a435, 0x6a4b, 0x429e, 0xa6, 0xac, 0xd4, 0x23, 0x1a, 0x61, 0x97, 0x5b)]
284 interface ISpEventSource2(ISpEventSource2Vtbl): ISpEventSource(ISpEventSourceVtbl) {
285     fn GetEventsEx(
286         ulCount: ULONG,
287         pEventArray: *mut SPEVENTEX,
288         pulFetched: *mut ULONG,
289     ) -> HRESULT,
290 }}
291 pub 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 };
317 pub const SPAF_BUFFER_POSITION: SPDISPLAYATTRIBUTES = 0x10;
318 pub const SPAF_ALL: SPDISPLAYATTRIBUTES = 0x1f;
319 pub const SPAF_USER_SPECIFIED: SPDISPLAYATTRIBUTES = 0x80;
320 pub 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 };
332 STRUCT!{struct SPSEMANTICERRORINFO {
333     ulLineNumber: ULONG,
334     pszScriptLine: LPWSTR,
335     pszSource: LPWSTR,
336     pszDescription: LPWSTR,
337     hrResultCode: HRESULT,
338 }}
339 ENUM!{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 }}
346 pub use um::sapi51::SPPHRASE as SPPHRASE_50;
347 // TODO: pub const SP_SPPHRASESIZE_500: usize = mem::size_of::<SPPHRASE_50>();
348 STRUCT!{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 }}
369 pub use um::sapi51::SPSERIALIZEDPHRASE;
370 STRUCT!{struct SPRULE {
371     pszRuleName: LPCWSTR,
372     ulRuleId: ULONG,
373     dwAttributes: DWORD,
374 }}
375 pub 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 };
396 pub const SPREF_SMLTimeout: SPRECOEVENTFLAGS = 1 << 2;
397 pub const SPREF_ExtendableParse: SPRECOEVENTFLAGS = 1 << 3;
398 pub const SPREF_ReSent: SPRECOEVENTFLAGS = 1 << 4;
399 pub const SPREF_Hypothesis: SPRECOEVENTFLAGS = 1 << 5;
400 pub const SPREF_FalseRecognition: SPRECOEVENTFLAGS = 1 << 6;
401 pub 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 };
411 pub const SPPS_Noncontent: SPPARTOFSPEECH = 0x6000;
412 pub const SPPS_LMA: SPPARTOFSPEECH = 0x7000;
413 pub const SPPS_SuppressWord: SPPARTOFSPEECH = 0xf000;
414 pub 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 };
452 ENUM!{enum SPPRONUNCIATIONFLAGS {
453     ePRONFLAG_USED = 1 << 0,
454 }}
455 pub use um::sapi51::{
456     SPWORDPRONUNCIATION,
457     SPWORDPRONUNCIATIONLIST,
458     SPWORD,
459     SPWORDLIST,
460     ISpLexicon, ISpLexiconVtbl,
461     ISpContainerLexicon, ISpContainerLexiconVtbl,
462 };
463 ENUM!{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 }}
473 STRUCT!{struct SPSHORTCUTPAIR {
474     pNextSHORTCUTPAIR: *mut SPSHORTCUTPAIR,
475     LangID: WORD,
476     shType: SPSHORTCUTTYPE,
477     pszDisplay: LPWSTR,
478     pszSpoken: LPWSTR,
479 }}
480 STRUCT!{struct SPSHORTCUTPAIRLIST {
481     ulSize: ULONG,
482     pvBuffer: *mut BYTE,
483     pFirstShortcutPair: *mut SPSHORTCUTPAIR,
484 }}
485 RIDL!{#[uuid(0x3df681e2, 0xea56, 0x11d9, 0x8b, 0xde, 0xf6, 0x6b, 0xad, 0x1e, 0x3f, 0x3a)]
486 interface 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 }}
525 pub use um::sapi51::{ISpPhoneConverter, ISpPhoneConverterVtbl};
526 RIDL!{#[uuid(0x133adcd4, 0x19b4, 0x4020, 0x9f, 0xdc, 0x84, 0x2e, 0x78, 0x25, 0x3b, 0x17)]
527 interface 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 }}
550 RIDL!{#[uuid(0xb2745efd, 0x42ce, 0x48ca, 0x81, 0xf1, 0xa9, 0x6e, 0x02, 0x53, 0x8a, 0x90)]
551 interface ISpPhoneticAlphabetSelection(ISpPhoneticAlphabetSelectionVtbl): IUnknown(IUnknownVtbl) {
552     fn IsAlphabetUPS(
553         pfIsUPS: *mut BOOL,
554     ) -> HRESULT,
555     fn SetAlphabetToUPS(
556         fForceUPS: BOOL,
557     ) -> HRESULT,
558 }}
559 pub 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 };
594 pub const SPF_PARSE_SAPI: SPEAKFLAGS = 1 << 7;
595 pub const SPF_PARSE_SSML: SPEAKFLAGS = 1 << 8;
596 pub const SPF_PARSE_AUTODETECT: SPEAKFLAGS = 0;
597 pub use um::sapi51::SPF_NLP_MASK;
598 pub const SPF_PARSE_MASK: SPEAKFLAGS = SPF_PARSE_SAPI | SPF_PARSE_SSML;
599 pub const SPF_VOICE_MASK: SPEAKFLAGS = ::um::sapi51::SPF_VOICE_MASK | SPF_PARSE_MASK;
600 pub const SPF_UNUSED_FLAGS: SPEAKFLAGS = !SPF_VOICE_MASK;
601 pub use um::sapi51::{
602     ISpVoice, ISpVoiceVtbl,
603     ISpPhrase, ISpPhraseVtbl,
604     ISpPhraseAlt, ISpPhraseAltVtbl,
605 };
606 ENUM!{enum SPXMLRESULTOPTIONS {
607     SPXRO_SML = 0,
608     SPXRO_Alternates_SML = 1,
609 }}
610 RIDL!{#[uuid(0xf264da52, 0xe457, 0x4696, 0xb8, 0x56, 0xa7, 0x37, 0xb7, 0x17, 0xaf, 0x79)]
611 interface 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 }}
625 pub use um::sapi51::{
626     SPRECORESULTTIMES,
627     SPSERIALIZEDRESULT,
628     ISpRecoResult, ISpRecoResultVtbl,
629 };
630 ENUM!{enum SPCOMMITFLAGS {
631     SPCF_NONE = 0,
632     SPCF_ADD_TO_USER_LEXICON = 1 << 0,
633     SPCF_DEFINITE_CORRECTION = 1 << 1,
634 }}
635 RIDL!{#[uuid(0x27cac6c4, 0x88f2, 0x41f2, 0x88, 0x17, 0x0c, 0x95, 0xe5, 0x9f, 0x1e, 0x6e)]
636 interface 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 }}
652 RIDL!{#[uuid(0xae39362b, 0x45a8, 0x4074, 0x9b, 0x9e, 0xcc, 0xf4, 0x9a, 0xa2, 0xd0, 0xb6)]
653 interface 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 }}
662 pub 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 };
680 pub const SPRS_ACTIVE_USER_DELIMITED: SPRULESTATE = 4;
681 pub 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 };
692 pub const SPWT_LEXICAL_NO_SPECIAL_CHARS: SPGRAMMARWORDTYPE = SPWT_PRONUNCIATION + 1;
693 pub 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 };
703 pub const SPRAF_Root: SPCFGRULEATTRIBUTES = 1 << 6;
704 pub use um::sapi51::SPRAF_AutoPause;
705 pub const SPRAF_UserDelimited: SPCFGRULEATTRIBUTES = 1 << 17;
706 pub use um::sapi51::{
707     ISpGrammarBuilder, ISpGrammarBuilderVtbl,
708     SPLOADOPTIONS,
709     SPLO_STATIC,
710     SPLO_DYNAMIC,
711     ISpRecoGrammar, ISpRecoGrammarVtbl,
712 };
713 ENUM!{enum SPMATCHINGMODE {
714     AllWords = 0,
715     Subsequence = 1,
716     OrderedSubset = 3,
717     SubsequenceContentRequired = 5,
718     OrderedSubsetContentRequired = 7,
719 }}
720 ENUM!{enum PHONETICALPHABET {
721     PA_Ipa = 0,
722     PA_Ups = 1,
723     PA_Sapi = 2,
724 }}
725 RIDL!{#[uuid(0x8ab10026, 0x20cc, 0x4b20, 0x8c, 0x22, 0xa4, 0x9c, 0x9b, 0xa7, 0x8f, 0x60)]
726 interface 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 }}
737 pub const SPRP_NORMAL: i32 = 0; // TODO: Unknown purpose and type
738 RIDL!{#[uuid(0x4b37bc9e, 0x9ed6, 0x44a3, 0x93, 0xd3, 0x18, 0xf0, 0x22, 0xb7, 0x9e, 0xc3)]
739 interface 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 }}
776 RIDL!{#[uuid(0xb9ac5783, 0xfcd0, 0x4b21, 0xb1, 0x19, 0xb4, 0xf8, 0xda, 0x8f, 0xd2, 0xc3)]
777 interface 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 }}
796 pub use um::sapi51::{
797     SPRECOCONTEXTSTATUS,
798     SPBOOKMARKOPTIONS,
799     SPBO_NONE,
800     SPBO_PAUSE,
801 };
802 pub const SPBO_AHEAD: SPBOOKMARKOPTIONS = 1 << 1;
803 pub const SPBO_TIME_UNITS: SPBOOKMARKOPTIONS = 1 << 2;
804 pub use um::sapi51::{
805     SPAUDIOOPTIONS,
806     SPAO_NONE,
807     SPAO_RETAIN_AUDIO,
808     ISpRecoContext, ISpRecoContextVtbl,
809 };
810 ENUM!{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 }}
826 ENUM!{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 }}
834 ENUM!{enum SPADAPTATIONRELEVANCE {
835     SPAR_Unknown = 0,
836     SPAR_Low = 1,
837     SPAR_Medium = 2,
838     SPAR_High = 3,
839 }}
840 RIDL!{#[uuid(0xbead311c, 0x52ff, 0x437f, 0x94, 0x64, 0x6b, 0x21, 0x05, 0x4c, 0xa7, 0x3d)]
841 interface 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 }}
856 pub 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 };
872 RIDL!{#[uuid(0x21b501a0, 0x0ec7, 0x46c9, 0x92, 0xc3, 0xa2, 0xbc, 0x78, 0x4c, 0x54, 0xb9)]
873 interface 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 }}
885 RIDL!{#[uuid(0x8fc6d974, 0xc81e, 0x4098, 0x93, 0xc5, 0x01, 0x47, 0xf6, 0x1e, 0xd4, 0xd3)]
886 interface 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 }}
897 STRUCT!{struct SPNORMALIZATIONLIST {
898     ulSize: ULONG,
899     ppszzNormalizedList: *mut *mut WCHAR,
900 }}
901 RIDL!{#[uuid(0xc360ce4b, 0x76d1, 0x4214, 0xad, 0x68, 0x52, 0x65, 0x7d, 0x50, 0x83, 0xda)]
902 interface 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 }}
918 STRUCT!{struct SPDISPLAYTOKEN {
919     pszLexical: *const WCHAR,
920     pszDisplay: *const WCHAR,
921     bDisplayAttributes: BYTE,
922 }}
923 STRUCT!{struct SPDISPLAYPHRASE {
924     ulNumTokens: ULONG,
925     pTokens: *mut SPDISPLAYTOKEN,
926 }}
927 RIDL!{#[uuid(0xc8d7c7e2, 0x0dde, 0x44b7, 0xaf, 0xe3, 0xb0, 0xc9, 0x91, 0xfb, 0xeb, 0x5e)]
928 interface 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 }}
939 pub 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 };
1164 pub const SVSFParseSapi: SpeechVoiceSpeakFlags = SPF_PARSE_SAPI;
1165 pub const SVSFParseSsml: SpeechVoiceSpeakFlags = SPF_PARSE_SSML;
1166 pub const SVSFParseAutodetect: SpeechVoiceSpeakFlags = SPF_PARSE_AUTODETECT;
1167 pub use um::sapi51::SVSFNLPMask;
1168 pub const SVSFParseMask: SpeechVoiceSpeakFlags = SPF_PARSE_MASK as u32;
1169 pub 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 };
1273 ENUM!{enum SpeechEmulationCompareFlags {
1274     SECFIgnoreCase = 0x1,
1275     SECFIgnoreKanaType = 0x10000,
1276     SECFIgnoreWidth = 0x20000,
1277     SECFNoSpecialChars = 0x20000000,
1278     SECFEmulateResult = 0x40000000,
1279     SECFDefault = SECFIgnoreCase | SECFIgnoreKanaType | SECFIgnoreWidth,
1280 }}
1281 pub 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 };
1380 pub const SGDSActiveUserDelimited: SpeechRuleState = SPRS_ACTIVE_USER_DELIMITED;
1381 pub use um::sapi51::{
1382     SpeechRuleAttributes,
1383     SRATopLevel,
1384     SRADefaultToActive,
1385     SRAExport,
1386     SRAImport,
1387     SRAInterpreter,
1388     SRADynamic,
1389 };
1390 pub const SRARoot: SpeechRuleAttributes = SPRAF_Root;
1391 pub use um::sapi51::{
1392     SpeechGrammarWordType,
1393     SGDisplay,
1394     SGLexical,
1395     SGPronounciation,
1396 };
1397 pub const SGLexicalNoSpecialChars: SpeechGrammarWordType = SPWT_LEXICAL_NO_SPECIAL_CHARS;
1398 pub 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 };
1423 pub const SRTSMLTimeout: SpeechRecognitionType = SPREF_SMLTimeout;
1424 pub const SRTExtendableParse: SpeechRecognitionType = SPREF_ExtendableParse;
1425 pub const SRTReSent: SpeechRecognitionType = SPREF_ReSent;
1426 pub 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 };
1500 ENUM!{enum DISPID_SpeechXMLRecoResult {
1501     DISPID_SRRGetXMLResult,
1502     DISPID_SRRGetXMLErrorInfo,
1503 }}
1504 ENUM!{enum DISPID_SpeechRecoResult2 {
1505     DISPID_SRRSetTextFeedback,
1506 }}
1507 pub 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 };
1621 pub const SPSLMA: SpeechPartOfSpeech = SPPS_LMA;
1622 pub const SPSSuppressWord: SpeechPartOfSpeech = SPPS_SuppressWord;
1623 pub 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 };
1681 RIDL!{#[uuid(0x8e0a246d, 0xd3c8, 0x45de, 0x86, 0x57, 0x04, 0x29, 0x0c, 0x45, 0x8c, 0x3c)]
1682 interface ISpeechRecoResult2(ISpeechRecoResult2Vtbl): ISpeechRecoResult(ISpeechRecoResultVtbl) {
1683     fn SetTextFeedback(
1684         Feedback: BSTR,
1685         WasSuccessful: VARIANT_BOOL,
1686     ) -> HRESULT,
1687 }}
1688 pub 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 };
1713 RIDL!{#[uuid(0xaaec54af, 0x8f85, 0x4924, 0x94, 0x4d, 0xb7, 0x9d, 0x39, 0xd7, 0x2e, 0x19)]
1714 interface 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 }}
1729 RIDL!{#[uuid(0x6d60eb64, 0xaced, 0x40a6, 0xbb, 0xf3, 0x4e, 0x55, 0x7f, 0x71, 0xde, 0xe2)]
1730 interface 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 }}
1786 pub 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 };
1806 extern {
1807     pub static CLSID_SpShortcut: CLSID;
1808 }
1809 pub use um::sapi51::CLSID_SpPhoneConverter;
1810 extern {
1811     pub static CLSID_SpPhoneticAlphabetConverter: CLSID;
1812 }
1813 pub 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 };
1824