/* file: SpeechReclib.c author: Michael J. Norton date: 07/06/2000 oreillynet.com C source file contains the exported entries for initializing the Apple Speech Recognition Manager. Requirements: Carbon SDK (available from www.apple.com Apple Developer Connection */ #include #include #include #include #include "SpeechRecLib.h" /* * constants */ const int kBadSRMVersion = 100; const unsigned int kMinSRVersion = 0x00000150; /* Minimum SR Version supported */ /* * protected globals */ SRRecognitionSystem objSRsystem = NULL; /* Object->SRRecognitionSystem */ SRRecognizer objSRrecognizer = NULL; /* Object->SRRecognizer */ SRLanguageModel objSRtlm = NULL; /* Object->SRLanguageModel */ /* * protected function entries */ /*static pascal OSStatus SpeechEventHandler(AppleEvent *appleEvt, AppleEvent* reply, long refcon);*/ OSErr ProcessRecognitionResult (SRLanguageModel resultLM, SRRecognizer recognizer); pascal OSErr MyHandleSpeechDone(AppleEvent *theAEevt, AppleEvent *reply, long refcon); /* * Exported Entries to Initialize the Speech Recogniton Module */ /* Speech Recognition Manager object constructor +----------------+ +---------------------+ | SRSpeechObject |---+---| SRRecognitionSystem | < objSRsystem > +----------------+ | +---------------------+ | +--------------+ +---| SRRecognizer | < objSRrecognizer > +--------------+ */ OSStatus InitSpeech (void) { OSStatus err; long currVersion; short feedback = kSRHasFeedbackHasListenModes; /* check for valid Speech Recognition Manager */ err = Gestalt(gestaltSpeechRecognitionVersion, &currVersion); if (!err) { if (currVersion < kMinSRVersion) return kBadSRMVersion; } /* instantiate the SR system object +----------------+ +---------------------+ | SRSpeechObject |---+---| SRRecognitionSystem | < objSRsystem > +----------------+ +---------------------+ */ err = SROpenRecognitionSystem( &objSRsystem, kSRDefaultRecognitionSystemID); /* use standard feedback window and listening modes */ if (!err) err = SRSetProperty(objSRsystem, kSRFeedbackAndListeningModes, &feedback, sizeof(feedback)); /* instantiate a Speech recognizer object +----------------+ +---------------------+ | SRSpeechObject |---+---| SRRecognitionSystem | < objSRsystem > +----------------+ | +---------------------+ | +--------------+ +---| SRRecognizer | < objSRrecognizer > +--------------+ */ if (!err) err = SRNewRecognizer(objSRsystem, &objSRrecognizer, kSRDefaultSpeechSource); return err; } OSStatus CloseSpeech (void) { OSStatus err = noErr; /* release the top language model +----------------+ +---------------------+ | SRSpeechObject |---+---| SRRecognitionSystem | < objSRsystem > +----------------+ | +---------------------+ | +--------------+ +---| SRRecognizer | < objSRrecognizer > +--------------+ +-----------------+ | SRLanguageModel |->NULL < objSRtlm > +-----------------+ */ if (objSRtlm) { err = SRReleaseObject(objSRtlm); objSRtlm = NULL; } /* release the recognizer object +----------------+ +---------------------+ | SRSpeechObject |---+---| SRRecognitionSystem | < objSRsystem > +----------------+ +---------------------+ +--------------+ | SRRecognizer |->NULL < objSRrecognizer *** > +--------------+ */ if (objSRrecognizer) { err = SRStopListening(objSRrecognizer); err = SRReleaseObject(objSRrecognizer); objSRrecognizer = NULL; } /* close the recognition system object +----------------+ +---------------------+ | SRSpeechObject | | SRRecognitionSystem |->NULL < objSRsystem > +----------------+ +---------------------+ */ if (objSRsystem) { err = SRCloseRecognitionSystem(objSRsystem); objSRsystem = NULL; } return err; } OSStatus InitLanguageModel (const char kLangModelName[], const char *kRecWordList[], long topRefCon, long listRefcon) { OSStatus err = noErr; /* initialize the language model +----------------+ +---------------------+ | SRSpeechObject |---+---| SRRecognitionSystem | < objSRsystem > +----------------+ | +---------------------+ | +--------------+ +---| SRRecognizer | < objSRrecognizer > | +--------------+ | +-----------------+ +---| SRLanguageModel |-> < objSRtlm > +-----------------+ */ /* set the Top Languge Model */ err = SRNewLanguageModel( objSRsystem, &objSRtlm, kLangModelName, strlen(kLangModelName) ); /* assign the reference constant to this model. We will need it later when we process results */ err = SRSetProperty( objSRtlm, kSRRefCon, &topRefCon, sizeof(topRefCon) ); /* initialize the utterance list */ if (!err) { char **currentStr = (char **) kRecWordList; while (*currentStr && !err) { err = SRAddText(objSRtlm, *currentStr, strlen(*currentStr), listRefcon++); ++currentStr; } } return err; } OSStatus EnableSpeechModel (void) { OSStatus err = noErr; /* attach the language model to the recognizer */ err = SRSetLanguageModel(objSRrecognizer, objSRtlm); /* tell the recognizer to start listening */ if (!err) err = SRStartListening(objSRrecognizer); return err; }