Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Side by Side Diff: content/browser/speech/google_one_shot_remote_engine.cc

Issue 10233010: Introducing new data types and IPC messages for scripted JS speech recognition APIs (Speech CL2.0) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added CONTENT_EXPORT to SpeechRecognitionEngine::Config Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/google_one_shot_remote_engine.h" 5 #include "content/browser/speech/google_one_shot_remote_engine.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 #include "base/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
(...skipping 17 matching lines...) Expand all
28 28
29 const char* const kDefaultSpeechRecognitionUrl = 29 const char* const kDefaultSpeechRecognitionUrl =
30 "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&"; 30 "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&";
31 const char* const kStatusString = "status"; 31 const char* const kStatusString = "status";
32 const char* const kHypothesesString = "hypotheses"; 32 const char* const kHypothesesString = "hypotheses";
33 const char* const kUtteranceString = "utterance"; 33 const char* const kUtteranceString = "utterance";
34 const char* const kConfidenceString = "confidence"; 34 const char* const kConfidenceString = "confidence";
35 const int kWebServiceStatusNoError = 0; 35 const int kWebServiceStatusNoError = 0;
36 const int kWebServiceStatusNoSpeech = 4; 36 const int kWebServiceStatusNoSpeech = 4;
37 const int kWebServiceStatusNoMatch = 5; 37 const int kWebServiceStatusNoMatch = 5;
38 const int kDefaultConfigSampleRate = 8000;
39 const int kDefaultConfigBitsPerSample = 16;
40 const speech::AudioEncoder::Codec kDefaultAudioCodec = 38 const speech::AudioEncoder::Codec kDefaultAudioCodec =
41 speech::AudioEncoder::CODEC_FLAC; 39 speech::AudioEncoder::CODEC_FLAC;
42 // TODO(satish): Remove this hardcoded value once the page is allowed to 40 // TODO(satish): Remove this hardcoded value once the page is allowed to
43 // set this via an attribute. 41 // set this via an attribute.
44 const int kMaxResults = 6; 42 const int kMaxResults = 6;
45 43
46 bool ParseServerResponse(const std::string& response_body, 44 bool ParseServerResponse(const std::string& response_body,
47 SpeechRecognitionResult* result, 45 SpeechRecognitionResult* result,
48 SpeechRecognitionError* error) { 46 SpeechRecognitionError* error) {
49 if (response_body.empty()) { 47 if (response_body.empty()) {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 return true; 147 return true;
150 } 148 }
151 149
152 } // namespace 150 } // namespace
153 151
154 namespace speech { 152 namespace speech {
155 153
156 const int GoogleOneShotRemoteEngine::kAudioPacketIntervalMs = 100; 154 const int GoogleOneShotRemoteEngine::kAudioPacketIntervalMs = 100;
157 int GoogleOneShotRemoteEngine::url_fetcher_id_for_tests = 0; 155 int GoogleOneShotRemoteEngine::url_fetcher_id_for_tests = 0;
158 156
159 GoogleOneShotRemoteEngineConfig::GoogleOneShotRemoteEngineConfig()
160 : filter_profanities(false),
161 audio_sample_rate(kDefaultConfigSampleRate),
162 audio_num_bits_per_sample(kDefaultConfigBitsPerSample) {
163 }
164
165 GoogleOneShotRemoteEngineConfig::~GoogleOneShotRemoteEngineConfig() {}
166
167 GoogleOneShotRemoteEngine::GoogleOneShotRemoteEngine( 157 GoogleOneShotRemoteEngine::GoogleOneShotRemoteEngine(
168 net::URLRequestContextGetter* context) 158 net::URLRequestContextGetter* context)
169 : url_context_(context) { 159 : url_context_(context) {
170 } 160 }
171 161
172 GoogleOneShotRemoteEngine::~GoogleOneShotRemoteEngine() {} 162 GoogleOneShotRemoteEngine::~GoogleOneShotRemoteEngine() {}
173 163
174 void GoogleOneShotRemoteEngine::SetConfig( 164 void GoogleOneShotRemoteEngine::SetConfig(
175 const GoogleOneShotRemoteEngineConfig& config) { 165 const SpeechRecognitionEngineConfig& config) {
176 config_ = config; 166 config_ = config;
177 } 167 }
178 168
179 void GoogleOneShotRemoteEngine::StartRecognition() { 169 void GoogleOneShotRemoteEngine::StartRecognition() {
180 DCHECK(delegate()); 170 DCHECK(delegate());
181 DCHECK(!url_fetcher_.get()); 171 DCHECK(!url_fetcher_.get());
182 std::string lang_param = config_.language; 172 std::string lang_param = config_.language;
183 173
184 if (lang_param.empty() && url_context_) { 174 if (lang_param.empty() && url_context_) {
185 // If no language is provided then we use the first from the accepted 175 // If no language is provided then we use the first from the accepted
186 // language list. If this list is empty then it defaults to "en-US". 176 // language list. If this list is empty then it defaults to "en-US".
187 // Example of the contents of this list: "es,en-GB;q=0.8", "" 177 // Example of the contents of this list: "es,en-GB;q=0.8", ""
188 net::URLRequestContext* request_context = 178 net::URLRequestContext* request_context =
189 url_context_->GetURLRequestContext(); 179 url_context_->GetURLRequestContext();
190 DCHECK(request_context); 180 DCHECK(request_context);
191 std::string accepted_language_list = request_context->accept_language(); 181 std::string accepted_language_list = request_context->accept_language();
192 size_t separator = accepted_language_list.find_first_of(",;"); 182 size_t separator = accepted_language_list.find_first_of(",;");
193 lang_param = accepted_language_list.substr(0, separator); 183 lang_param = accepted_language_list.substr(0, separator);
194 } 184 }
195 185
196 if (lang_param.empty()) 186 if (lang_param.empty())
197 lang_param = "en-US"; 187 lang_param = "en-US";
198 188
199 std::vector<std::string> parts; 189 std::vector<std::string> parts;
200 parts.push_back("lang=" + net::EscapeQueryParamValue(lang_param, true)); 190 parts.push_back("lang=" + net::EscapeQueryParamValue(lang_param, true));
201 191
202 if (!config_.grammar.empty()) 192 if (!config_.grammars.empty()) {
203 parts.push_back("lm=" + net::EscapeQueryParamValue(config_.grammar, true)); 193 DCHECK_EQ(config_.grammars.size(), 1U);
194 parts.push_back("lm=" + net::EscapeQueryParamValue(config_.grammars[0].url,
195 true));
196 }
204 197
205 if (!config_.hardware_info.empty()) 198 if (!config_.hardware_info.empty())
206 parts.push_back("xhw=" + net::EscapeQueryParamValue(config_.hardware_info, 199 parts.push_back("xhw=" + net::EscapeQueryParamValue(config_.hardware_info,
207 true)); 200 true));
208 parts.push_back("maxresults=" + base::IntToString(kMaxResults)); 201 parts.push_back("maxresults=" + base::IntToString(kMaxResults));
209 parts.push_back(config_.filter_profanities ? "pfilter=2" : "pfilter=0"); 202 parts.push_back(config_.filter_profanities ? "pfilter=2" : "pfilter=0");
210 203
211 GURL url(std::string(kDefaultSpeechRecognitionUrl) + JoinString(parts, '&')); 204 GURL url(std::string(kDefaultSpeechRecognitionUrl) + JoinString(parts, '&'));
212 205
213 encoder_.reset(AudioEncoder::Create(kDefaultAudioCodec, 206 encoder_.reset(AudioEncoder::Create(kDefaultAudioCodec,
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 285
293 bool GoogleOneShotRemoteEngine::IsRecognitionPending() const { 286 bool GoogleOneShotRemoteEngine::IsRecognitionPending() const {
294 return url_fetcher_ != NULL; 287 return url_fetcher_ != NULL;
295 } 288 }
296 289
297 int GoogleOneShotRemoteEngine::GetDesiredAudioChunkDurationMs() const { 290 int GoogleOneShotRemoteEngine::GetDesiredAudioChunkDurationMs() const {
298 return kAudioPacketIntervalMs; 291 return kAudioPacketIntervalMs;
299 } 292 }
300 293
301 } // namespace speech 294 } // namespace speech
OLDNEW
« no previous file with comments | « content/browser/speech/google_one_shot_remote_engine.h ('k') | content/browser/speech/input_tag_speech_dispatcher_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698