| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/speech/speech_recognizer_impl.h" | 5 #include "content/browser/speech/speech_recognizer_impl.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/time.h" | 9 #include "base/time.h" |
| 10 #include "content/browser/browser_main_loop.h" | 10 #include "content/browser/browser_main_loop.h" |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 DCHECK(recognition_engine_ != NULL); | 123 DCHECK(recognition_engine_ != NULL); |
| 124 endpointer_.set_speech_input_complete_silence_length( | 124 endpointer_.set_speech_input_complete_silence_length( |
| 125 base::Time::kMicrosecondsPerSecond / 2); | 125 base::Time::kMicrosecondsPerSecond / 2); |
| 126 endpointer_.set_long_speech_input_complete_silence_length( | 126 endpointer_.set_long_speech_input_complete_silence_length( |
| 127 base::Time::kMicrosecondsPerSecond); | 127 base::Time::kMicrosecondsPerSecond); |
| 128 endpointer_.set_long_speech_length(3 * base::Time::kMicrosecondsPerSecond); | 128 endpointer_.set_long_speech_length(3 * base::Time::kMicrosecondsPerSecond); |
| 129 endpointer_.StartSession(); | 129 endpointer_.StartSession(); |
| 130 recognition_engine_->set_delegate(this); | 130 recognition_engine_->set_delegate(this); |
| 131 } | 131 } |
| 132 | 132 |
| 133 SpeechRecognizerImpl::~SpeechRecognizerImpl() { | |
| 134 endpointer_.EndSession(); | |
| 135 } | |
| 136 | |
| 137 // ------- Methods that trigger Finite State Machine (FSM) events ------------ | 133 // ------- Methods that trigger Finite State Machine (FSM) events ------------ |
| 138 | 134 |
| 139 // NOTE:all the external events and requests should be enqueued (PostTask), even | 135 // NOTE:all the external events and requests should be enqueued (PostTask), even |
| 140 // if they come from the same (IO) thread, in order to preserve the relationship | 136 // if they come from the same (IO) thread, in order to preserve the relationship |
| 141 // of causality between events and avoid interleaved event processing due to | 137 // of causality between events and avoid interleaved event processing due to |
| 142 // synchronous callbacks. | 138 // synchronous callbacks. |
| 143 | 139 |
| 144 void SpeechRecognizerImpl::StartRecognition() { | 140 void SpeechRecognizerImpl::StartRecognition() { |
| 145 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 141 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| 146 base::Bind(&SpeechRecognizerImpl::DispatchEvent, | 142 base::Bind(&SpeechRecognizerImpl::DispatchEvent, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 168 | 164 |
| 169 bool SpeechRecognizerImpl::IsCapturingAudio() const { | 165 bool SpeechRecognizerImpl::IsCapturingAudio() const { |
| 170 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); // See IsActive(). | 166 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); // See IsActive(). |
| 171 const bool is_capturing_audio = state_ >= STATE_STARTING && | 167 const bool is_capturing_audio = state_ >= STATE_STARTING && |
| 172 state_ <= STATE_RECOGNIZING; | 168 state_ <= STATE_RECOGNIZING; |
| 173 DCHECK((is_capturing_audio && (audio_controller_.get() != NULL)) || | 169 DCHECK((is_capturing_audio && (audio_controller_.get() != NULL)) || |
| 174 (!is_capturing_audio && audio_controller_.get() == NULL)); | 170 (!is_capturing_audio && audio_controller_.get() == NULL)); |
| 175 return is_capturing_audio; | 171 return is_capturing_audio; |
| 176 } | 172 } |
| 177 | 173 |
| 174 const SpeechRecognitionEngine& |
| 175 SpeechRecognizerImpl::recognition_engine() const { |
| 176 return *(recognition_engine_.get()); |
| 177 } |
| 178 |
| 179 SpeechRecognizerImpl::~SpeechRecognizerImpl() { |
| 180 endpointer_.EndSession(); |
| 181 } |
| 182 |
| 178 // Invoked in the audio thread. | 183 // Invoked in the audio thread. |
| 179 void SpeechRecognizerImpl::OnError(AudioInputController* controller, | 184 void SpeechRecognizerImpl::OnError(AudioInputController* controller, |
| 180 int error_code) { | 185 int error_code) { |
| 181 FSMEventArgs event_args(EVENT_AUDIO_ERROR); | 186 FSMEventArgs event_args(EVENT_AUDIO_ERROR); |
| 182 event_args.audio_error_code = error_code; | 187 event_args.audio_error_code = error_code; |
| 183 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 188 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| 184 base::Bind(&SpeechRecognizerImpl::DispatchEvent, | 189 base::Bind(&SpeechRecognizerImpl::DispatchEvent, |
| 185 this, event_args)); | 190 this, event_args)); |
| 186 } | 191 } |
| 187 | 192 |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 | 620 |
| 616 float noise_level = (endpointer_.NoiseLevelDb() - kAudioMeterMinDb) / | 621 float noise_level = (endpointer_.NoiseLevelDb() - kAudioMeterMinDb) / |
| 617 (kAudioMeterDbRange / kAudioMeterRangeMaxUnclipped); | 622 (kAudioMeterDbRange / kAudioMeterRangeMaxUnclipped); |
| 618 noise_level = std::min(std::max(0.0f, noise_level), | 623 noise_level = std::min(std::max(0.0f, noise_level), |
| 619 kAudioMeterRangeMaxUnclipped); | 624 kAudioMeterRangeMaxUnclipped); |
| 620 | 625 |
| 621 listener_->OnAudioLevelsChange( | 626 listener_->OnAudioLevelsChange( |
| 622 session_id_, clip_detected ? 1.0f : audio_level_, noise_level); | 627 session_id_, clip_detected ? 1.0f : audio_level_, noise_level); |
| 623 } | 628 } |
| 624 | 629 |
| 625 const SpeechRecognitionEngine& | |
| 626 SpeechRecognizerImpl::recognition_engine() const { | |
| 627 return *(recognition_engine_.get()); | |
| 628 } | |
| 629 | |
| 630 void SpeechRecognizerImpl::SetAudioManagerForTesting( | 630 void SpeechRecognizerImpl::SetAudioManagerForTesting( |
| 631 AudioManager* audio_manager) { | 631 AudioManager* audio_manager) { |
| 632 testing_audio_manager_ = audio_manager; | 632 testing_audio_manager_ = audio_manager; |
| 633 } | 633 } |
| 634 | 634 |
| 635 SpeechRecognizerImpl::FSMEventArgs::FSMEventArgs(FSMEvent event_value) | 635 SpeechRecognizerImpl::FSMEventArgs::FSMEventArgs(FSMEvent event_value) |
| 636 : event(event_value), | 636 : event(event_value), |
| 637 audio_error_code(0), | 637 audio_error_code(0), |
| 638 audio_data(NULL), | 638 audio_data(NULL), |
| 639 engine_error(content::SPEECH_RECOGNITION_ERROR_NONE) { | 639 engine_error(content::SPEECH_RECOGNITION_ERROR_NONE) { |
| 640 } | 640 } |
| 641 | 641 |
| 642 SpeechRecognizerImpl::FSMEventArgs::~FSMEventArgs() { | 642 SpeechRecognizerImpl::FSMEventArgs::~FSMEventArgs() { |
| 643 } | 643 } |
| 644 | 644 |
| 645 } // namespace speech | 645 } // namespace speech |
| OLD | NEW |