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 use ctypes
::{c_char, c_float, c_long, c_void}
;
7 use shared
::guiddef
::{CLSID, GUID, IID, REFGUID}
;
8 use shared
::minwindef
::{BOOL, BYTE, DWORD, ULONG, USHORT, WORD}
;
9 use shared
::mmreg
::WAVEFORMATEX
;
10 use shared
::windef
::HWND
;
11 use um
::oaidl
::VARIANT
;
12 use um
::objidlbase
::IStream
;
14 use um
::unknwnbase
::{IUnknown, IUnknownVtbl}
;
15 use um
::winnt
::{HANDLE, HRESULT, LONG, LPCWSTR, LPWSTR, PVOID, ULONGLONG, WCHAR}
;
16 pub const SPRECOEXTENSION
: &'
static str = "RecoExtension";
17 pub const SPALTERNATESCLSID
: &'
static str = "AlternatesCLSID";
18 RIDL
!{#[uuid(0xf8e690f0, 0x39cb, 0x4843, 0xb8, 0xd7, 0xc8, 0x46, 0x96, 0xe1, 0x11, 0x9d)]
19 interface
ISpTokenUI(ISpTokenUIVtbl
): IUnknown(IUnknownVtbl
) {
22 pvExtraData
: *mut c_void
,
24 punkObject
: *mut IUnknown
,
25 pfSupported
: *mut BOOL
,
31 pvExtraData
: *mut c_void
,
33 pToken
: *mut ISpObjectToken
,
34 punkObject
: *mut IUnknown
,
37 RIDL
!{#[uuid(0x06b64f9f, 0x7fda, 0x11d2, 0xb4, 0xf2, 0x00, 0xc0, 0x4f, 0x79, 0x73, 0x96)]
38 interface
ISpObjectTokenEnumBuilder(ISpObjectTokenEnumBuilderVtbl
):
39 IEnumSpObjectTokens(IEnumSpObjectTokensVtbl
) {
41 pszReqAttribs
: LPCWSTR
,
42 pszOptAttribs
: LPCWSTR
,
46 pToken
: *mut *mut ISpObjectToken
,
48 fn AddTokensFromDataKey(
49 pDataKey
: *mut ISpDataKey
,
51 pszCategoryId
: LPCWSTR
,
53 fn AddTokensFromTokenEnum(
54 pTokenEnum
: *mut IEnumSpObjectTokens
,
57 pszTokenIdToListFirst
: LPCWSTR
,
60 DECLARE_HANDLE
!{SPWORDHANDLE, SPWORDHANDLE__}
61 DECLARE_HANDLE
!{SPRULEHANDLE, SPRULEHANDLE__}
62 DECLARE_HANDLE
!{SPGRAMMARHANDLE, SPGRAMMARHANDLE__}
63 DECLARE_HANDLE
!{SPRECOCONTEXTHANDLE, SPRECOCONTEXTHANDLE__}
64 DECLARE_HANDLE
!{SPPHRASERULEHANDLE, SPPHRASERULEHANDLE__}
65 DECLARE_HANDLE
!{SPPHRASEPROPERTYHANDLE, SPPHRASEPROPERTYHANDLE__}
66 DECLARE_HANDLE
!{SPTRANSITIONID, SPTRANSITIONID__}
67 RIDL
!{#[uuid(0xf4711347, 0xe608, 0x11d2, 0xa0, 0x86, 0x00, 0xc0, 0x4f, 0x8e, 0xf9, 0xb5)]
68 interface
ISpErrorLog(ISpErrorLogVtbl
): IUnknown(IUnknownVtbl
) {
72 pszDescription
: LPCWSTR
,
77 RIDL
!{#[uuid(0xb1e29d58, 0xa675, 0x11d2, 0x83, 0x02, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)]
78 interface
ISpGrammarCompiler(ISpGrammarCompilerVtbl
): IUnknown(IUnknownVtbl
) {
80 pSource
: *mut IStream
,
82 pHeader
: *mut IStream
,
83 pReserved
: *mut IUnknown
,
84 pErrorLog
: *mut ISpErrorLog
,
88 RIDL
!{#[uuid(0x3ddca27c, 0x665c, 0x4786, 0x9f, 0x97, 0x8c, 0x90, 0xc3, 0x48, 0x8b, 0x61)]
89 interface
ISpGramCompBackend(ISpGramCompBackendVtbl
): ISpGrammarBuilder(ISpGrammarBuilderVtbl
) {
91 pStream
: *mut IStream
,
92 pErrorLog
: *mut ISpErrorLog
,
94 fn InitFromBinaryGrammar(
95 pBinaryData
: *const SPBINARYGRAMMAR
,
98 RIDL
!{#[uuid(0x12d7360f, 0xa1c9, 0x11d3, 0xbc, 0x90, 0x00, 0xc0, 0x4f, 0x72, 0xdf, 0x9f)]
99 interface
ISpITNProcessor(ISpITNProcessorVtbl
): IUnknown(IUnknownVtbl
) {
104 pPhrase
: *mut ISpPhraseBuilder
,
107 RIDL
!{#[uuid(0x88a3342a, 0x0bed, 0x4834, 0x92, 0x2b, 0x88, 0xd4, 0x31, 0x73, 0x16, 0x2f)]
108 interface
ISpPhraseBuilder(ISpPhraseBuilderVtbl
): ISpPhrase(ISpPhraseVtbl
) {
110 pPhrase
: *const SPPHRASE
,
112 fn InitFromSerializedPhrase(
113 pPhrase
: *const SPSERIALIZEDPHRASE
,
117 pElement
: *const SPPHRASEELEMENT
,
120 hParent
: SPPHRASERULEHANDLE
,
121 pRule
: *const SPPHRASERULE
,
122 phNewRule
: *mut SPPHRASERULEHANDLE
,
125 hParent
: SPPHRASEPROPERTYHANDLE
,
126 pProperty
: *const SPPHRASEPROPERTY
,
127 phNewProperty
: *mut SPPHRASEPROPERTYHANDLE
,
130 cReplacements
: ULONG
,
131 pReplacements
: *const SPPHRASEREPLACEMENT
,
134 pub type ISpTask
= *mut c_void
;
135 pub type ISpThreadTask
= *mut c_void
;
136 RIDL
!{#[uuid(0xa6be4d73, 0x4403, 0x4358, 0xb2, 0x2d, 0x03, 0x46, 0xe2, 0x3b, 0x17, 0x64)]
137 interface
ISpThreadControl(ISpThreadControlVtbl
): ISpNotifySink(ISpNotifySinkVtbl
) {
142 fn WaitForThreadDone(
144 phrThreadResult
: *mut HRESULT
,
147 fn TerminateThread() -> HRESULT
,
148 fn ThreadHandle() -> HANDLE
,
149 fn ThreadId() -> DWORD
,
150 fn NotifyEvent() -> HANDLE
,
151 fn WindowHandle() -> HWND
,
152 fn ThreadCompleteEvent() -> HANDLE
,
153 fn ExitThreadEvent() -> HANDLE
,
155 STRUCT
!{struct SPTMTHREADINFO
{
158 ulConcurrencyLimit
: ULONG
,
159 ulMaxQuickAllocThreads
: ULONG
,
161 RIDL
!{#[uuid(0x2baeef81, 0x2ca3, 0x4331, 0x98, 0xf3, 0x26, 0xec, 0x5a, 0xbe, 0xfb, 0x03)]
162 interface
ISpTaskManager(ISpTaskManagerVtbl
): IUnknown(IUnknownVtbl
) {
163 fn SetThreadPoolInfo(
164 pPoolInfo
: *const SPTMTHREADINFO
,
166 fn GetThreadPoolInfo(
167 pPoolInfo
: *mut SPTMTHREADINFO
,
171 pvTaskData
: *mut c_void
,
173 pdwGroupId
: *mut DWORD
,
176 fn CreateReoccurringTask(
178 pvTaskData
: *mut c_void
,
180 ppTaskCtrl
: *mut *mut ISpNotifySink
,
182 fn CreateThreadControl(
183 pTask
: *mut ISpThreadTask
,
184 pvTaskData
: *mut c_void
,
186 ppTaskCtrl
: *mut *mut ISpThreadControl
,
193 ENUM
!{enum SPVSKIPTYPE
{
194 SPVST_SENTENCE
= 1 << 0,
196 ENUM
!{enum SPVESACTIONS
{
198 SPVES_ABORT
= 1 << 0,
201 SPVES_VOLUME
= 1 << 3,
203 RIDL
!{#[uuid(0x9880499b, 0xcce9, 0x11d2, 0xb5, 0x03, 0x00, 0xc0, 0x4f, 0x79, 0x73, 0x96)]
204 interface
ISpTTSEngineSite(ISpTTSEngineSiteVtbl
): ISpEventSink(ISpEventSinkVtbl
) {
205 fn GetActions() -> DWORD
,
207 pBuff
: *const c_void
,
209 pcbWritten
: *mut ULONG
,
212 pRateAdjust
: *mut c_long
,
214 fn GetVolume(pusVolume
: *mut USHORT
,
217 peType
: *mut SPVSKIPTYPE
,
218 plNumItems
: *mut c_long
,
221 ulNumSkipped
: c_long
,
224 STRUCT
!{struct SPVTEXTFRAG
{
225 pNext
: *mut SPVTEXTFRAG
,
229 ulTextSrcOffset
: ULONG
,
231 RIDL
!{#[uuid(0xa74d7c8e, 0x4cc5, 0x4f2f, 0xa6, 0xeb, 0x80, 0x4d, 0xee, 0x18, 0x50, 0x0e)]
232 interface
ISpTTSEngine(ISpTTSEngineVtbl
): IUnknown(IUnknownVtbl
) {
235 rguidFormatId
: REFGUID
,
236 pWaveFormatEx
: *const WAVEFORMATEX
,
237 pTextFragList
: *const SPVTEXTFRAG
,
238 pOutputSite
: *mut ISpTTSEngineSite
,
241 pTargetFmtId
: *const GUID
,
242 pTargetWaveFormatEx
: *const WAVEFORMATEX
,
243 pOutputFormatId
: *mut GUID
,
244 ppCoMemOutputWaveFormatEx
: *mut WAVEFORMATEX
,
247 STRUCT
!{struct SPWORDENTRY
{
250 pszDisplayText
: *mut WCHAR
,
251 pszLexicalForm
: *mut WCHAR
,
252 aPhoneId
: *mut SPPHONEID
,
253 pvClientContext
: *mut c_void
,
255 STRUCT
!{struct SPRULEENTRY
{
257 hInitialState
: SPSTATEHANDLE
,
259 pvClientRuleContext
: *mut c_void
,
260 pvClientGrammarContext
: *mut c_void
,
262 ENUM
!{enum SPTRANSITIONTYPE
{
270 STRUCT
!{struct SPTRANSITIONENTRY_u_s1
{
271 hRuleInitialState
: SPSTATEHANDLE
,
273 pvClientRuleContext
: *mut c_void
,
275 STRUCT
!{struct SPTRANSITIONENTRY_u_s2
{
277 pvClientWordContext
: *mut c_void
,
279 UNION
!{union SPTRANSITIONENTRY_u
{
281 s1 s1_mut
: SPTRANSITIONENTRY_u_s1
,
282 s2 s2_mut
: SPTRANSITIONENTRY_u_s2
,
283 pvGrammarCookie pvGrammarCookie_mut
: *mut c_void
,
285 STRUCT
!{struct SPTRANSITIONENTRY
{
287 hNextState
: SPSTATEHANDLE
,
289 RequiredConfidence
: c_char
,
292 u
: SPTRANSITIONENTRY_u
,
294 STRUCT
!{struct SPTRANSITIONPROPERTY
{
300 STRUCT
!{struct SPSTATEINFO
{
301 cAllocatedEntries
: ULONG
,
302 pTransitions
: *mut SPTRANSITIONENTRY
,
306 cSpecialTransitions
: ULONG
,
308 STRUCT
!{struct SPPATHENTRY
{
309 hTransition
: SPTRANSITIONID
,
310 elem
: SPPHRASEELEMENT
,
312 RIDL
!{#[uuid(0x6a6ffad8, 0x78b6, 0x473d, 0xb8, 0x44, 0x98, 0x15, 0x2e, 0x4f, 0xb1, 0x6b)]
313 interface
ISpCFGInterpreterSite(ISpCFGInterpreterSiteVtbl
): IUnknown(IUnknownVtbl
) {
314 fn AddTextReplacement(
315 pReplace
: *mut SPPHRASEREPLACEMENT
,
318 pProperty
: *const SPPHRASEPROPERTY
,
321 pszResourceName
: LPCWSTR
,
322 ppCoMemResource
: *mut LPWSTR
,
325 RIDL
!{#[uuid(0xf3d3f926, 0x11fc, 0x11d3, 0xbb, 0x97, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)]
326 interface
ISpCFGInterpreter(ISpCFGInterpreterVtbl
): IUnknown(IUnknownVtbl
) {
328 pszGrammarName
: LPCWSTR
,
329 pvGrammarData
: *mut *const c_void
,
332 pPhrase
: *mut ISpPhraseBuilder
,
333 ulFirstElement
: *const ULONG
,
334 ulCountOfElements
: *const ULONG
,
335 pSite
: *mut ISpCFGInterpreterSite
,
338 ENUM
!{enum SPCFGNOTIFY
{
345 ENUM
!{enum SPRESULTTYPE
{
348 SPRT_PROPRIETARY
= 2,
349 SPRT_FALSE_RECOGNITION
= 1 << 2,
351 STRUCT
!{struct SPPHRASEALT
{
352 pPhrase
: *mut ISpPhraseBuilder
,
353 ulStartElementInParent
: ULONG
,
354 cElementsInParent
: ULONG
,
355 cElementsInAlternate
: ULONG
,
356 pvAltExtra
: *mut c_void
,
359 STRUCT
!{struct SPRECORESULTINFO
{
361 eResultType
: SPRESULTTYPE
,
363 fProprietaryAutoPause
: BOOL
,
364 ullStreamPosStart
: ULONGLONG
,
365 ullStreamPosEnd
: ULONGLONG
,
366 hGrammar
: SPGRAMMARHANDLE
,
367 ulSizeEngineData
: ULONG
,
368 pvEngineData
: *mut c_void
,
369 pPhrase
: *mut ISpPhraseBuilder
,
370 aPhraseAlts
: *mut SPPHRASEALT
,
373 ENUM
!{enum SPWORDINFOOPT
{
377 ENUM
!{enum SPRULEINFOOPT
{
380 STRUCT
!{struct SPPARSEINFO
{
383 ullAudioStreamPosition
: ULONGLONG
,
386 pPath
: *mut SPPATHENTRY
,
388 ulSREnginePrivateDataSize
: ULONG
,
389 pSREnginePrivateData
: *const BYTE
,
392 RIDL
!{#[uuid(0x3b414aec, 0x720c, 0x4883, 0xb9, 0xef, 0x17, 0x8c, 0xd3, 0x94, 0xfb, 0x3a)]
393 interface
ISpSREngineSite(ISpSREngineSiteVtbl
): IUnknown(IUnknownVtbl
) {
402 fn SetBufferNotifySize(
405 fn ParseFromTransitions(
406 pParseInfo
: *const SPPARSEINFO
,
407 ppNewPhrase
: *mut *mut ISpPhraseBuilder
,
410 pResultInfo
: *const SPRECORESULTINFO
,
413 pEvent
: *const SPEVENT
,
414 hSAPIRecoContext
: SPRECOCONTEXTHANDLE
,
417 ullProcessedThruPos
: ULONGLONG
,
420 pWordEntry
: *mut SPWORDENTRY
,
421 Options
: SPWORDINFOOPT
,
423 fn SetWordClientContext(
425 pvClientContext
: *mut c_void
,
428 pRuleEntry
: *mut SPRULEENTRY
,
429 Options
: SPRULEINFOOPT
,
431 fn SetRuleClientContext(
433 pvClientContext
: *mut c_void
,
436 hState
: SPSTATEHANDLE
,
437 pStateInfo
: *mut SPSTATEINFO
,
441 pszResourceName
: LPCWSTR
,
442 ppCoMemResource
: *mut LPWSTR
,
444 fn GetTransitionProperty(
446 ppCoMemProperty
: *mut *mut SPTRANSITIONPROPERTY
,
450 hAltRule
: SPRULEHANDLE
,
454 pulNumAlts
: *mut ULONG
,
456 fn GetContextMaxAlternates(
457 hContext
: SPRECOCONTEXTHANDLE
,
458 pulNumAlts
: *mut ULONG
,
461 ullCurrentRecoPos
: ULONGLONG
,
464 ENUM
!{enum SPPROPSRC
{
467 SPPROPSRC_RECO_GRAMMAR
,
469 RIDL
!{#[uuid(0x2f472991, 0x854b, 0x4465, 0xb6, 0x13, 0xfb, 0xaf, 0xb3, 0xad, 0x8e, 0xd8)]
470 interface
ISpSREngine(ISpSREngineVtbl
): IUnknown(IUnknownVtbl
) {
472 pSite
: *mut ISpSREngineSite
,
474 fn GetInputAudioFormat(
475 pguidSourceFormatId
: *const GUID
,
476 pSourceWaveFormatEx
: *const WAVEFORMATEX
,
477 pguidDesiredFormatId
: *mut GUID
,
478 ppCoMemDesiredWaveFormatEx
: *mut WAVEFORMATEX
,
482 pWaveFormatEx
: *const WAVEFORMATEX
,
483 hRequestSync
: HANDLE
,
484 hDataAvailable
: HANDLE
,
486 fNewAudioStream
: BOOL
,
487 fRealTimeAudio
: BOOL
,
488 pAudioObjectToken
: *mut ISpObjectToken
,
491 pProfile
: *mut ISpObjectToken
,
494 pvEngineRecoContext
: *mut c_void
,
495 hSAPIGrammar
: SPGRAMMARHANDLE
,
496 ppvEngineGrammarContext
: *mut *mut c_void
,
499 pvEngineGrammar
: *mut c_void
,
501 fn LoadProprietaryGrammar(
502 pvEngineGrammar
: *mut c_void
,
504 pszStringParam
: LPCWSTR
,
505 pvDataParam
: *const c_void
,
507 Options
: SPLOADOPTIONS
,
509 fn UnloadProprietaryGrammar(
510 pvEngineGrammar
: *mut c_void
,
512 fn SetProprietaryRuleState(
513 pvEngineGrammar
: *mut c_void
,
515 pReserved
: *mut c_void
,
516 NewState
: SPRULESTATE
,
517 pcRulesChanged
: *mut ULONG
,
519 fn SetProprietaryRuleIdState(
520 pvEngineGrammar
: *mut c_void
,
522 NewState
: SPRULESTATE
,
525 pvEngineGrammar
: *mut c_void
,
526 pszTopicName
: LPCWSTR
,
529 pvEngineGrammar
: *mut c_void
,
532 pvEngineGrammar
: *mut c_void
,
533 NewState
: SPRULESTATE
,
535 fn SetWordSequenceData(
536 pvEngineGrammar
: *mut c_void
,
539 pInfo
: *const SPTEXTSELECTIONINFO
,
542 pvEngineGrammar
: *mut c_void
,
543 pInfo
: *const SPTEXTSELECTIONINFO
,
546 pvEngineGrammar
: *mut c_void
,
548 pWordPronounceable
: *mut SPWORDPRONOUNCEABLE
,
550 fn OnCreateRecoContext(
551 hSAPIRecoContext
: SPRECOCONTEXTHANDLE
,
552 ppvEngineContext
: *mut *mut c_void
,
554 fn OnDeleteRecoContext(
555 pvEngineContext
: *mut c_void
,
558 pvEngineContext
: *mut c_void
,
560 ulCallFrameSize
: ULONG
,
562 fn SetAdaptationData(
563 pvEngineContext
: *mut c_void
,
564 pAdaptationData
: *const WCHAR
,
569 pvSrcObj
: *mut c_void
,
575 pvSrcObj
: *mut c_void
,
579 fn SetPropertyString(
581 pvSrcObj
: *mut c_void
,
585 fn GetPropertyString(
587 pvSrcObj
: *mut c_void
,
589 ppCoMemValue
: *mut LPWSTR
,
592 pvEngineGrammar
: *mut c_void
,
593 eGrammarState
: SPGRAMMARSTATE
,
598 pWords
: *const SPWORDENTRY
,
603 pRules
: *const SPRULEENTRY
,
606 pvEngineContext
: *mut c_void
,
607 pInCallFrame
: *const c_void
,
608 ulInCallFrameSize
: ULONG
,
609 ppvCoMemResponse
: *mut *mut c_void
,
610 pulResponseSize
: *mut ULONG
,
613 pvEngineContext
: *mut c_void
,
614 eContextState
: SPCONTEXTSTATE
,
617 STRUCT
!{struct SPPHRASEALTREQUEST
{
618 ulStartElement
: ULONG
,
620 ulRequestAltCount
: ULONG
,
621 pvResultExtra
: *mut c_void
,
622 cbResultExtra
: ULONG
,
623 pPhrase
: *mut ISpPhrase
,
624 pRecoContext
: *mut ISpRecoContext
,
626 RIDL
!{#[uuid(0x8e7c791e, 0x4467, 0x11d3, 0x97, 0x23, 0x00, 0xc0, 0x4f, 0x72, 0xdb, 0x08)]
627 interface
_ISpPrivateEngineCall(_ISpPrivateEngineCallVtbl
): IUnknown(IUnknownVtbl
) {
629 pCallFrame
: *mut c_void
,
630 ulCallFrameSize
: ULONG
,
633 pInFrame
: *const c_void
,
634 ulInFrameSize
: ULONG
,
635 ppCoMemOutFrame
: *mut *mut c_void
,
636 pulOutFrameSize
: *mut ULONG
,
640 pub static LIBID_SpeechDDKLib
: IID
;
641 pub static CLSID_SpDataKey
: CLSID
;
643 RIDL
!{#[uuid(0xd9f6ee60, 0x58c9, 0x458b, 0x88, 0xe1, 0x2f, 0x90, 0x8f, 0xd7, 0xf8, 0x7c)]
646 pub static CLSID_SpObjectTokenEnum
: CLSID
;
647 pub static CLSID_SpPhraseBuilder
: CLSID
;
648 pub static CLSID_SpITNProcessor
: CLSID
;
649 pub static CLSID_SpGrammarCompiler
: CLSID
;
650 pub static CLSID_SpGramCompBackend
: CLSID
;