public void Run() { // A helper class to take care of platform and endpoint setup and cleanup. _helper = new UCMASampleHelper(); // Create a user endpoint using the network credential object. _userEndpoint = _helper.CreateEstablishedUserEndpoint("Broadcast User"); // Register a delegate to be called when an incoming audio-video call arrives. _userEndpoint.RegisterForIncomingCall <AudioVideoCall>(AudioVideoCall_Received); // Wait for the incoming call to be accepted. Console.WriteLine("Waiting for incoming call..."); _waitForCallToBeAccepted.WaitOne(); // Create a speech recognition connector and attach an AudioVideoFlow to it. SpeechRecognitionConnector speechRecognitionConnector = new SpeechRecognitionConnector(); speechRecognitionConnector.AttachFlow(_audioVideoFlow); // Start the speech recognition connector. SpeechRecognitionStream stream = speechRecognitionConnector.Start(); // Create a speech recognition engine. SpeechRecognitionEngine speechRecognitionEngine = new SpeechRecognitionEngine(); speechRecognitionEngine.SpeechRecognized += new EventHandler <SpeechRecognizedEventArgs>(SpeechRecognitionEngine_SpeechRecognized); //Add a grammar. string[] recoString = { "buy", "sell", "Fabrikam", "Contoso", "maximum", "minimum", "one", "ten", "twenty", "send" }; Choices choices = new Choices(recoString); speechRecognitionEngine.LoadGrammar(new Grammar(new GrammarBuilder(choices))); //Attach to audio stream to the SR engine. SpeechAudioFormatInfo speechAudioFormatInfo = new SpeechAudioFormatInfo(8000, AudioBitsPerSample.Sixteen, Microsoft.Speech.AudioFormat.AudioChannel.Mono); speechRecognitionEngine.SetInputToAudioStream(stream, speechAudioFormatInfo); Console.WriteLine("\r\nGrammar loaded, say send to send IM."); //Prepare the SR engine to perform multiple asynchronous recognitions. speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple); //Pause the main thread until recognition completes. _waitForConnectorToStop.WaitOne(); speechRecognitionConnector.Stop(); Console.WriteLine("connector stopped"); // Detach the flow from the speech recognition connector, to prevent the flow from being kept in memory. speechRecognitionConnector.DetachFlow(); // Terminate the call, the conversation, and then unregister the // endpoint from receiving an incoming call. _audioVideoCall.BeginTerminate(CallTerminateCB, _audioVideoCall); _waitForConversationToBeTerminated.WaitOne(); // Shut down the platform. _helper.ShutdownPlatform(); }
public void Run() { // Create AudioVideoFlow AudioVideoFlowHelper audioVideoFlowHelper = new AudioVideoFlowHelper(); _audioVideoFlow = audioVideoFlowHelper.CreateAudioVideoFlow( null, audioVideoFlow_StateChanged); // Create a speech recognition connector and attach it to a AudioVideoFlow SpeechRecognitionConnector speechRecognitionConnector = new SpeechRecognitionConnector(); speechRecognitionConnector.AttachFlow(_audioVideoFlow); //Start recognizing SpeechRecognitionStream stream = speechRecognitionConnector.Start(); // Create speech recognition engine and start recognizing by attaching connector to engine SpeechRecognitionEngine speechRecognitionEngine = new SpeechRecognitionEngine(); speechRecognitionEngine.SpeechRecognized += new EventHandler <SpeechRecognizedEventArgs>(speechRecognitionEngine_SpeechRecognized); string[] recognizedString = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "exit" }; Choices numberChoices = new Choices(recognizedString); speechRecognitionEngine.LoadGrammar(new Grammar(new GrammarBuilder(numberChoices))); SpeechAudioFormatInfo speechAudioFormatInfo = new SpeechAudioFormatInfo(8000, AudioBitsPerSample.Sixteen, Microsoft.Speech.AudioFormat.AudioChannel.Mono); speechRecognitionEngine.SetInputToAudioStream(stream, speechAudioFormatInfo); Console.WriteLine("\r\nGrammar loaded from zero to ten, say exit to shutdown."); speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple); _waitForXXXCompleted.WaitOne(); //Stop the connector speechRecognitionConnector.Stop(); Console.WriteLine("Stopping the speech recognition connector"); //speech recognition connector must be detached from the flow, otherwise if the connector is rooted, it will keep the flow in memory. speechRecognitionConnector.DetachFlow(); // Shutdown the platform ShutdownPlatform(); _waitForShutdownEventCompleted.WaitOne(); }
public void StopSpeechRecognition() { if (!_isActive) { NonBlockingConsole.WriteLine("Warn: StopSpeechRecognition() called on an inactive SpeechRecognizer."); return; } _isActive = false; if (_isRecognizing) { _isRecognizing = false; if (_speechRecognitionEngine != null) { _speechRecognitionEngine.RecognizeAsyncCancel(); } if (_speechRecognitionConnector != null) { // Stop the connector _speechRecognitionConnector.Stop(); // speech recognition connector must be detached from the flow, otherwise if the connector is rooted, it will keep the flow in memory. _speechRecognitionConnector.DetachFlow(); } if (_speechRecognitionStream != null) { _speechRecognitionStream.Dispose(); _speechRecognitionStream = null; } } if ((_audioVideoFlow != null) && (_audioVideoFlow.SpeechRecognitionConnector != null)) { _audioVideoFlow.SpeechRecognitionConnector.Stop(); _audioVideoFlow.SpeechRecognitionConnector.DetachFlow(); _audioVideoFlow.StateChanged -= AudioVideoFlow_StateChanged; _audioVideoFlow = null; } _waitForAudioVideoFlowStateChangedToActiveCompleted.Reset(); }