| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 | 107 |
| 108 } // namespace | 108 } // namespace |
| 109 | 109 |
| 110 const int SpeechRecognizerImpl::kAudioSampleRate = 16000; | 110 const int SpeechRecognizerImpl::kAudioSampleRate = 16000; |
| 111 const ChannelLayout SpeechRecognizerImpl::kChannelLayout = | 111 const ChannelLayout SpeechRecognizerImpl::kChannelLayout = |
| 112 media::CHANNEL_LAYOUT_MONO; | 112 media::CHANNEL_LAYOUT_MONO; |
| 113 const int SpeechRecognizerImpl::kNumBitsPerAudioSample = 16; | 113 const int SpeechRecognizerImpl::kNumBitsPerAudioSample = 16; |
| 114 const int SpeechRecognizerImpl::kNoSpeechTimeoutMs = 8000; | 114 const int SpeechRecognizerImpl::kNoSpeechTimeoutMs = 8000; |
| 115 const int SpeechRecognizerImpl::kEndpointerEstimationTimeMs = 300; | 115 const int SpeechRecognizerImpl::kEndpointerEstimationTimeMs = 300; |
| 116 media::AudioSystem* SpeechRecognizerImpl::audio_system_for_tests_ = nullptr; | 116 media::AudioSystem* SpeechRecognizerImpl::audio_system_for_tests_ = nullptr; |
| 117 media::AudioManager* SpeechRecognizerImpl::audio_manager_for_tests_ = nullptr; |
| 117 | 118 |
| 118 static_assert(SpeechRecognizerImpl::kNumBitsPerAudioSample % 8 == 0, | 119 static_assert(SpeechRecognizerImpl::kNumBitsPerAudioSample % 8 == 0, |
| 119 "kNumBitsPerAudioSample must be a multiple of 8"); | 120 "kNumBitsPerAudioSample must be a multiple of 8"); |
| 120 | 121 |
| 121 // SpeechRecognizerImpl::OnDataConverter implementation | 122 // SpeechRecognizerImpl::OnDataConverter implementation |
| 122 | 123 |
| 123 SpeechRecognizerImpl::OnDataConverter::OnDataConverter( | 124 SpeechRecognizerImpl::OnDataConverter::OnDataConverter( |
| 124 const AudioParameters& input_params, | 125 const AudioParameters& input_params, |
| 125 const AudioParameters& output_params) | 126 const AudioParameters& output_params) |
| 126 : audio_converter_(input_params, output_params, false), | 127 : audio_converter_(input_params, output_params, false), |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 // Indicate that the recorded audio has in fact been used by the converter. | 172 // Indicate that the recorded audio has in fact been used by the converter. |
| 172 data_was_converted_ = true; | 173 data_was_converted_ = true; |
| 173 return 1; | 174 return 1; |
| 174 } | 175 } |
| 175 | 176 |
| 176 // SpeechRecognizerImpl implementation | 177 // SpeechRecognizerImpl implementation |
| 177 | 178 |
| 178 SpeechRecognizerImpl::SpeechRecognizerImpl( | 179 SpeechRecognizerImpl::SpeechRecognizerImpl( |
| 179 SpeechRecognitionEventListener* listener, | 180 SpeechRecognitionEventListener* listener, |
| 180 media::AudioSystem* audio_system, | 181 media::AudioSystem* audio_system, |
| 182 media::AudioManager* audio_manager, |
| 181 int session_id, | 183 int session_id, |
| 182 bool continuous, | 184 bool continuous, |
| 183 bool provisional_results, | 185 bool provisional_results, |
| 184 SpeechRecognitionEngine* engine) | 186 SpeechRecognitionEngine* engine) |
| 185 : SpeechRecognizer(listener, session_id), | 187 : SpeechRecognizer(listener, session_id), |
| 186 audio_system_(audio_system), | 188 audio_system_(audio_system), |
| 189 audio_manager_(audio_manager), |
| 187 recognition_engine_(engine), | 190 recognition_engine_(engine), |
| 188 endpointer_(kAudioSampleRate), | 191 endpointer_(kAudioSampleRate), |
| 189 audio_log_(MediaInternals::GetInstance()->CreateAudioLog( | 192 audio_log_(MediaInternals::GetInstance()->CreateAudioLog( |
| 190 media::AudioLogFactory::AUDIO_INPUT_CONTROLLER)), | 193 media::AudioLogFactory::AUDIO_INPUT_CONTROLLER)), |
| 191 is_dispatching_event_(false), | 194 is_dispatching_event_(false), |
| 192 provisional_results_(provisional_results), | 195 provisional_results_(provisional_results), |
| 193 end_of_utterance_(false), | 196 end_of_utterance_(false), |
| 194 state_(STATE_IDLE), | 197 state_(STATE_IDLE), |
| 195 weak_ptr_factory_(this) { | 198 weak_ptr_factory_(this) { |
| 196 DCHECK(recognition_engine_ != nullptr); | 199 DCHECK(recognition_engine_ != nullptr); |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 626 DVLOG(1) << "SRI::input_parameters: " | 629 DVLOG(1) << "SRI::input_parameters: " |
| 627 << input_parameters.AsHumanReadableString(); | 630 << input_parameters.AsHumanReadableString(); |
| 628 } | 631 } |
| 629 | 632 |
| 630 // Create an audio converter which converts data between native input format | 633 // Create an audio converter which converts data between native input format |
| 631 // and WebSpeech specific output format. | 634 // and WebSpeech specific output format. |
| 632 audio_converter_.reset( | 635 audio_converter_.reset( |
| 633 new OnDataConverter(input_parameters, output_parameters)); | 636 new OnDataConverter(input_parameters, output_parameters)); |
| 634 | 637 |
| 635 audio_controller_ = AudioInputController::Create( | 638 audio_controller_ = AudioInputController::Create( |
| 636 GetAudioSystem()->GetAudioManager(), this, this, nullptr, | 639 GetAudioManager(), this, this, nullptr, input_parameters, device_id_, |
| 637 input_parameters, device_id_, | |
| 638 /*agc_is_enabled*/ false, | 640 /*agc_is_enabled*/ false, |
| 639 BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE)); | 641 BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE)); |
| 640 | 642 |
| 641 if (!audio_controller_.get()) { | 643 if (!audio_controller_.get()) { |
| 642 return Abort( | 644 return Abort( |
| 643 SpeechRecognitionError(SPEECH_RECOGNITION_ERROR_AUDIO_CAPTURE)); | 645 SpeechRecognitionError(SPEECH_RECOGNITION_ERROR_AUDIO_CAPTURE)); |
| 644 } | 646 } |
| 645 | 647 |
| 646 audio_log_->OnCreated(0, input_parameters, device_id_); | 648 audio_log_->OnCreated(0, input_parameters, device_id_); |
| 647 | 649 |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 876 | 878 |
| 877 float noise_level = (endpointer_.NoiseLevelDb() - kAudioMeterMinDb) / | 879 float noise_level = (endpointer_.NoiseLevelDb() - kAudioMeterMinDb) / |
| 878 (kAudioMeterDbRange / kAudioMeterRangeMaxUnclipped); | 880 (kAudioMeterDbRange / kAudioMeterRangeMaxUnclipped); |
| 879 noise_level = std::min(std::max(0.0f, noise_level), | 881 noise_level = std::min(std::max(0.0f, noise_level), |
| 880 kAudioMeterRangeMaxUnclipped); | 882 kAudioMeterRangeMaxUnclipped); |
| 881 | 883 |
| 882 listener()->OnAudioLevelsChange( | 884 listener()->OnAudioLevelsChange( |
| 883 session_id(), clip_detected ? 1.0f : audio_level_, noise_level); | 885 session_id(), clip_detected ? 1.0f : audio_level_, noise_level); |
| 884 } | 886 } |
| 885 | 887 |
| 886 void SpeechRecognizerImpl::SetAudioSystemForTesting( | 888 void SpeechRecognizerImpl::SetAudioEnvironmentForTesting( |
| 887 media::AudioSystem* audio_system) { | 889 media::AudioSystem* audio_system, |
| 890 media::AudioManager* audio_manager) { |
| 888 audio_system_for_tests_ = audio_system; | 891 audio_system_for_tests_ = audio_system; |
| 892 audio_manager_for_tests_ = audio_manager; |
| 889 } | 893 } |
| 890 | 894 |
| 891 media::AudioSystem* SpeechRecognizerImpl::GetAudioSystem() { | 895 media::AudioSystem* SpeechRecognizerImpl::GetAudioSystem() { |
| 892 return audio_system_for_tests_ ? audio_system_for_tests_ : audio_system_; | 896 return audio_system_for_tests_ ? audio_system_for_tests_ : audio_system_; |
| 893 } | 897 } |
| 894 | 898 |
| 899 media::AudioManager* SpeechRecognizerImpl::GetAudioManager() { |
| 900 return audio_manager_for_tests_ ? audio_manager_for_tests_ : audio_manager_; |
| 901 } |
| 902 |
| 895 SpeechRecognizerImpl::FSMEventArgs::FSMEventArgs(FSMEvent event_value) | 903 SpeechRecognizerImpl::FSMEventArgs::FSMEventArgs(FSMEvent event_value) |
| 896 : event(event_value), | 904 : event(event_value), |
| 897 audio_data(NULL), | 905 audio_data(NULL), |
| 898 engine_error(SPEECH_RECOGNITION_ERROR_NONE) { | 906 engine_error(SPEECH_RECOGNITION_ERROR_NONE) { |
| 899 } | 907 } |
| 900 | 908 |
| 901 SpeechRecognizerImpl::FSMEventArgs::FSMEventArgs(const FSMEventArgs& other) = | 909 SpeechRecognizerImpl::FSMEventArgs::FSMEventArgs(const FSMEventArgs& other) = |
| 902 default; | 910 default; |
| 903 | 911 |
| 904 SpeechRecognizerImpl::FSMEventArgs::~FSMEventArgs() { | 912 SpeechRecognizerImpl::FSMEventArgs::~FSMEventArgs() { |
| 905 } | 913 } |
| 906 | 914 |
| 907 } // namespace content | 915 } // namespace content |
| OLD | NEW |