| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/browser/speech/speech_recognizer.h" | 5 #include "chrome/browser/speech/speech_recognizer.h" |
| 6 | 6 |
| 7 #include "base/ref_counted.h" | 7 #include "base/ref_counted.h" |
| 8 #include "base/scoped_ptr.h" | 8 #include "base/scoped_ptr.h" |
| 9 #include "base/time.h" | 9 #include "base/time.h" |
| 10 #include "chrome/browser/browser_thread.h" | 10 #include "chrome/browser/browser_thread.h" |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 int frame_length = speex_bits_write(&bits_, encoded_frame_data_ + 1, | 102 int frame_length = speex_bits_write(&bits_, encoded_frame_data_ + 1, |
| 103 kMaxSpeexFrameLength); | 103 kMaxSpeexFrameLength); |
| 104 encoded_frame_data_[0] = static_cast<char>(frame_length); | 104 encoded_frame_data_[0] = static_cast<char>(frame_length); |
| 105 encoded_frames->push_back(new string(encoded_frame_data_, | 105 encoded_frames->push_back(new string(encoded_frame_data_, |
| 106 frame_length + 1)); | 106 frame_length + 1)); |
| 107 } | 107 } |
| 108 } | 108 } |
| 109 | 109 |
| 110 SpeechRecognizer::SpeechRecognizer(Delegate* delegate, | 110 SpeechRecognizer::SpeechRecognizer(Delegate* delegate, |
| 111 int caller_id, | 111 int caller_id, |
| 112 const std::string& language, |
| 112 const std::string& grammar) | 113 const std::string& grammar) |
| 113 : delegate_(delegate), | 114 : delegate_(delegate), |
| 114 caller_id_(caller_id), | 115 caller_id_(caller_id), |
| 116 language_(language), |
| 115 grammar_(grammar), | 117 grammar_(grammar), |
| 116 encoder_(new SpeexEncoder()), | 118 encoder_(new SpeexEncoder()), |
| 117 endpointer_(kAudioSampleRate), | 119 endpointer_(kAudioSampleRate), |
| 118 num_samples_recorded_(0), | 120 num_samples_recorded_(0), |
| 119 audio_level_(0.0f) { | 121 audio_level_(0.0f) { |
| 120 endpointer_.set_speech_input_complete_silence_length( | 122 endpointer_.set_speech_input_complete_silence_length( |
| 121 base::Time::kMicrosecondsPerSecond / 2); | 123 base::Time::kMicrosecondsPerSecond / 2); |
| 122 endpointer_.set_long_speech_input_complete_silence_length( | 124 endpointer_.set_long_speech_input_complete_silence_length( |
| 123 base::Time::kMicrosecondsPerSecond); | 125 base::Time::kMicrosecondsPerSecond); |
| 124 endpointer_.set_long_speech_length(3 * base::Time::kMicrosecondsPerSecond); | 126 endpointer_.set_long_speech_length(3 * base::Time::kMicrosecondsPerSecond); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 for (AudioBufferQueue::iterator it = audio_buffers_.begin(); | 205 for (AudioBufferQueue::iterator it = audio_buffers_.begin(); |
| 204 it != audio_buffers_.end(); it++) { | 206 it != audio_buffers_.end(); it++) { |
| 205 audio_buffer_length += (*it)->length(); | 207 audio_buffer_length += (*it)->length(); |
| 206 } | 208 } |
| 207 string data; | 209 string data; |
| 208 data.reserve(audio_buffer_length); | 210 data.reserve(audio_buffer_length); |
| 209 for (AudioBufferQueue::iterator it = audio_buffers_.begin(); | 211 for (AudioBufferQueue::iterator it = audio_buffers_.begin(); |
| 210 it != audio_buffers_.end(); it++) { | 212 it != audio_buffers_.end(); it++) { |
| 211 data.append(*(*it)); | 213 data.append(*(*it)); |
| 212 } | 214 } |
| 215 |
| 213 DCHECK(!request_.get()); | 216 DCHECK(!request_.get()); |
| 214 request_.reset(new SpeechRecognitionRequest( | 217 request_.reset(new SpeechRecognitionRequest( |
| 215 Profile::GetDefaultRequestContext(), this)); | 218 Profile::GetDefaultRequestContext(), this)); |
| 216 request_->Send(grammar_, kContentTypeSpeex, data); | 219 request_->Send(language_, grammar_, kContentTypeSpeex, data); |
| 217 ReleaseAudioBuffers(); // No need to keep the audio anymore. | 220 ReleaseAudioBuffers(); // No need to keep the audio anymore. |
| 218 } | 221 } |
| 219 | 222 |
| 220 void SpeechRecognizer::ReleaseAudioBuffers() { | 223 void SpeechRecognizer::ReleaseAudioBuffers() { |
| 221 for (AudioBufferQueue::iterator it = audio_buffers_.begin(); | 224 for (AudioBufferQueue::iterator it = audio_buffers_.begin(); |
| 222 it != audio_buffers_.end(); it++) | 225 it != audio_buffers_.end(); it++) |
| 223 delete *it; | 226 delete *it; |
| 224 audio_buffers_.clear(); | 227 audio_buffers_.clear(); |
| 225 } | 228 } |
| 226 | 229 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 | 332 |
| 330 void SpeechRecognizer::InformErrorAndCancelRecognition(ErrorCode error) { | 333 void SpeechRecognizer::InformErrorAndCancelRecognition(ErrorCode error) { |
| 331 CancelRecognition(); | 334 CancelRecognition(); |
| 332 | 335 |
| 333 // Guard against the delegate freeing us until we finish our job. | 336 // Guard against the delegate freeing us until we finish our job. |
| 334 scoped_refptr<SpeechRecognizer> me(this); | 337 scoped_refptr<SpeechRecognizer> me(this); |
| 335 delegate_->OnRecognizerError(caller_id_, error); | 338 delegate_->OnRecognizerError(caller_id_, error); |
| 336 } | 339 } |
| 337 | 340 |
| 338 } // namespace speech_input | 341 } // namespace speech_input |
| OLD | NEW |