Code: Select all
implement main
open core, sapiDDI_types
constants
recognizerId : string = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Recognizers\Tokens\MS-1033-80-DESK".
grammarId = 123.
spfei_interest : unsigned64 = spfei_flagcheck + 2 ^ spei_end_sr_stream + 2 ^ spei_recognition.
clauses
run() :-
stdio::outputStream:allowNullPointers := true,
AudioFileName = @"..\test.wav",
Recognizer = spInprocRecognizer::new(),
SpToken = spObjectToken::new(),
RecognizerToken = SpToken:get_ISpObjectToken_import(),
RecognizerToken:setId(uncheckedConvert(string, null), recognizerId, b_false),
Recognizer:setRecognizer(RecognizerToken),
Recognizer:createRecoContext(RecoContext),
RecoContext:createGrammar(grammarId, Grammar),
SpStream = spStream::new(),
SpStream:bindToFile(AudioFileName, spfm_open_readonly, uncheckedConvert(core::nativeGuid, null), uncheckedConvert(waveformatex, null), 0),
Recognizer:setInput(SpStream:getIUnknown(), 0),
Grammar:loadDictation("", splo_static),
Grammar:setDictationState(sprs_active),
RecoContext:setNotifyWin32Event(),
RecoContext:setInterest(spfei_interest, spfei_interest),
try
eventLoop(RecoContext)
finally
Grammar:unloadDictation(),
Grammar:setDictationState(sprs_inactive),
Grammar:release(),
SpStream:release(),
SpStream:close(),
RecoContext:release(),
Recognizer:release()
end try.
class predicates
eventLoop : (iSpRecoContext_import RecoContext).
clauses
eventLoop(RecoContext) :-
std::repeat(), %+
RecoContext:waitForNotifyEvent(0xFFFFFFFF),
RecoContext:getEvents(1, Event, Fetched),
if Fetched <> 0 then
handleEvent(Event)
end if,
(Fetched = 0 orelse spevent(spei_end_sr_stream, _, _, _, _, _) = Event),
!.
eventLoop(_RecoContext).
class predicates
handleEvent : (sapiDDI_types::spevent Event).
clauses
handleEvent(sapiDDI_types::spevent(spei_recognition, _ParamType, _StreamNum, _AudioStreamOffset, _WParam, LParam)) :-
!,
Native = uncheckedConvert(iSpRecoResult_native, LParam),
RecoResult = iSpRecoResult_import::new(Native, comMemory::release()),
RecoResult:getText(0xFFFFFFFF, 0xFFFFFFFF, 1, Text, DisplayAttributes),
RecoResult:getPhrase(Phrase),
stdio::writef("Text = %\nDisplayAttributes = %\nPhrase = %\n", toString(Text), DisplayAttributes, Phrase).
handleEvent(_).
end implement main