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 |