| /* |
| * Copyright 2016 Google Inc. All Rights Reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef COBALT_SPEECH_SPEECH_RECOGNITION_MANAGER_H_ |
| #define COBALT_SPEECH_SPEECH_RECOGNITION_MANAGER_H_ |
| |
| #include <string> |
| |
| #include "cobalt/network/network_module.h" |
| #include "cobalt/script/exception_state.h" |
| #include "cobalt/speech/mic.h" |
| #include "cobalt/speech/speech_recognition_config.h" |
| #include "cobalt/speech/speech_recognition_error.h" |
| #include "cobalt/speech/speech_recognition_event.h" |
| #include "cobalt/speech/speech_recognizer.h" |
| #include "media/base/shell_audio_bus.h" |
| |
| namespace cobalt { |
| namespace speech { |
| |
| // Owned by SpeechRecognition to manage major speech recognition logic. |
| // This class interacts with microphone, speech recognition service and audio |
| // encoder. It provides the interface to start/stop microphone and |
| // recogniton service. After receiving the audio data from microphone, this |
| // class would encode the audio data, then send it to recogniton service. |
| class SpeechRecognitionManager { |
| public: |
| typedef ::media::ShellAudioBus ShellAudioBus; |
| typedef base::Callback<bool(const scoped_refptr<dom::Event>&)> EventCallback; |
| |
| SpeechRecognitionManager(network::NetworkModule* network_module, |
| const EventCallback& event_callback); |
| ~SpeechRecognitionManager(); |
| |
| // Start/Stop speech recognizer and microphone. Multiple calls would be |
| // managed by their own class. |
| void Start(const SpeechRecognitionConfig& config, |
| script::ExceptionState* exception_state); |
| void Stop(); |
| void Abort(); |
| |
| private: |
| enum State { |
| kStarted, |
| kStopped, |
| kAborted, |
| }; |
| |
| // Callbacks from mic. |
| void OnDataReceived(scoped_ptr<ShellAudioBus> audio_bus); |
| void OnDataCompletion(); |
| void OnMicError(); |
| |
| // Callbacks from recognizer. |
| void OnRecognizerEvent(const scoped_refptr<dom::Event>& event); |
| |
| base::WeakPtrFactory<SpeechRecognitionManager> weak_ptr_factory_; |
| // We construct a WeakPtr upon SpeechRecognitionManager's construction in |
| // order to associate the WeakPtr with the constructing thread. |
| base::WeakPtr<SpeechRecognitionManager> weak_this_; |
| scoped_refptr<base::MessageLoopProxy> const main_message_loop_; |
| |
| // Callback for sending dom events if available. |
| EventCallback event_callback_; |
| SpeechRecognizer recognizer_; |
| scoped_ptr<Mic> mic_; |
| State state_; |
| }; |
| |
| } // namespace speech |
| } // namespace cobalt |
| |
| #endif // COBALT_SPEECH_SPEECH_RECOGNITION_MANAGER_H_ |