| 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/google_streaming_remote_engine.h" | 5 #include "content/browser/speech/google_streaming_remote_engine.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | |
| 11 #include "base/rand_util.h" | 10 #include "base/rand_util.h" |
| 12 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
| 13 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
| 14 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 15 #include "base/time/time.h" | 14 #include "base/time/time.h" |
| 16 #include "content/browser/speech/audio_buffer.h" | 15 #include "content/browser/speech/audio_buffer.h" |
| 17 #include "content/browser/speech/proto/google_streaming_api.pb.h" | 16 #include "content/browser/speech/proto/google_streaming_api.pb.h" |
| 18 #include "content/public/common/content_switches.h" | 17 #include "content/public/common/content_switches.h" |
| 19 #include "content/public/common/speech_recognition_error.h" | 18 #include "content/public/common/speech_recognition_error.h" |
| 20 #include "content/public/common/speech_recognition_result.h" | 19 #include "content/public/common/speech_recognition_result.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 const proto::SpeechRecognitionAlternative& alt = | 61 const proto::SpeechRecognitionAlternative& alt = |
| 63 res.alternative(j); | 62 res.alternative(j); |
| 64 if (alt.has_confidence()) | 63 if (alt.has_confidence()) |
| 65 DVLOG(1) << " CONFIDENCE:\t" << alt.confidence(); | 64 DVLOG(1) << " CONFIDENCE:\t" << alt.confidence(); |
| 66 if (alt.has_transcript()) | 65 if (alt.has_transcript()) |
| 67 DVLOG(1) << " TRANSCRIPT:\t" << alt.transcript(); | 66 DVLOG(1) << " TRANSCRIPT:\t" << alt.transcript(); |
| 68 } | 67 } |
| 69 } | 68 } |
| 70 } | 69 } |
| 71 | 70 |
| 72 std::string GetAPIKey() { | |
| 73 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | |
| 74 if (command_line.HasSwitch(switches::kSpeechRecognitionWebserviceKey)) { | |
| 75 DVLOG(1) << "GetAPIKey() used key from command-line."; | |
| 76 return command_line.GetSwitchValueASCII( | |
| 77 switches::kSpeechRecognitionWebserviceKey); | |
| 78 } | |
| 79 | |
| 80 std::string api_key = google_apis::GetAPIKey(); | |
| 81 if (api_key.empty()) | |
| 82 DVLOG(1) << "GetAPIKey() returned empty string!"; | |
| 83 | |
| 84 return api_key; | |
| 85 } | |
| 86 | |
| 87 } // namespace | 71 } // namespace |
| 88 | 72 |
| 89 const int GoogleStreamingRemoteEngine::kAudioPacketIntervalMs = 100; | 73 const int GoogleStreamingRemoteEngine::kAudioPacketIntervalMs = 100; |
| 90 const int GoogleStreamingRemoteEngine::kUpstreamUrlFetcherIdForTesting = 0; | 74 const int GoogleStreamingRemoteEngine::kUpstreamUrlFetcherIdForTesting = 0; |
| 91 const int GoogleStreamingRemoteEngine::kDownstreamUrlFetcherIdForTesting = 1; | 75 const int GoogleStreamingRemoteEngine::kDownstreamUrlFetcherIdForTesting = 1; |
| 92 const int GoogleStreamingRemoteEngine::kWebserviceStatusNoError = 0; | 76 const int GoogleStreamingRemoteEngine::kWebserviceStatusNoError = 0; |
| 93 const int GoogleStreamingRemoteEngine::kWebserviceStatusErrorNoMatch = 5; | 77 const int GoogleStreamingRemoteEngine::kWebserviceStatusErrorNoMatch = 5; |
| 94 | 78 |
| 95 GoogleStreamingRemoteEngine::GoogleStreamingRemoteEngine( | 79 GoogleStreamingRemoteEngine::GoogleStreamingRemoteEngine( |
| 96 net::URLRequestContextGetter* context) | 80 net::URLRequestContextGetter* context) |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 | 294 |
| 311 encoder_.reset(AudioEncoder::Create(kDefaultAudioCodec, | 295 encoder_.reset(AudioEncoder::Create(kDefaultAudioCodec, |
| 312 config_.audio_sample_rate, | 296 config_.audio_sample_rate, |
| 313 config_.audio_num_bits_per_sample)); | 297 config_.audio_num_bits_per_sample)); |
| 314 DCHECK(encoder_.get()); | 298 DCHECK(encoder_.get()); |
| 315 const std::string request_key = GenerateRequestKey(); | 299 const std::string request_key = GenerateRequestKey(); |
| 316 | 300 |
| 317 // Setup downstream fetcher. | 301 // Setup downstream fetcher. |
| 318 std::vector<std::string> downstream_args; | 302 std::vector<std::string> downstream_args; |
| 319 downstream_args.push_back( | 303 downstream_args.push_back( |
| 320 "key=" + net::EscapeQueryParamValue(GetAPIKey(), true)); | 304 "key=" + net::EscapeQueryParamValue(google_apis::GetAPIKey(), true)); |
| 321 downstream_args.push_back("pair=" + request_key); | 305 downstream_args.push_back("pair=" + request_key); |
| 322 downstream_args.push_back("output=pb"); | 306 downstream_args.push_back("output=pb"); |
| 323 GURL downstream_url(std::string(kWebServiceBaseUrl) + | 307 GURL downstream_url(std::string(kWebServiceBaseUrl) + |
| 324 std::string(kDownstreamUrl) + | 308 std::string(kDownstreamUrl) + |
| 325 JoinString(downstream_args, '&')); | 309 JoinString(downstream_args, '&')); |
| 326 | 310 |
| 327 downstream_fetcher_.reset(URLFetcher::Create( | 311 downstream_fetcher_.reset(URLFetcher::Create( |
| 328 kDownstreamUrlFetcherIdForTesting, downstream_url, URLFetcher::GET, | 312 kDownstreamUrlFetcherIdForTesting, downstream_url, URLFetcher::GET, |
| 329 this)); | 313 this)); |
| 330 downstream_fetcher_->SetRequestContext(url_context_.get()); | 314 downstream_fetcher_->SetRequestContext(url_context_.get()); |
| 331 downstream_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES | | 315 downstream_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES | |
| 332 net::LOAD_DO_NOT_SEND_COOKIES | | 316 net::LOAD_DO_NOT_SEND_COOKIES | |
| 333 net::LOAD_DO_NOT_SEND_AUTH_DATA); | 317 net::LOAD_DO_NOT_SEND_AUTH_DATA); |
| 334 downstream_fetcher_->Start(); | 318 downstream_fetcher_->Start(); |
| 335 | 319 |
| 336 // Setup upstream fetcher. | 320 // Setup upstream fetcher. |
| 337 // TODO(hans): Support for user-selected grammars. | 321 // TODO(hans): Support for user-selected grammars. |
| 338 std::vector<std::string> upstream_args; | 322 std::vector<std::string> upstream_args; |
| 339 upstream_args.push_back("key=" + | 323 upstream_args.push_back("key=" + |
| 340 net::EscapeQueryParamValue(GetAPIKey(), true)); | 324 net::EscapeQueryParamValue(google_apis::GetAPIKey(), true)); |
| 341 upstream_args.push_back("pair=" + request_key); | 325 upstream_args.push_back("pair=" + request_key); |
| 342 upstream_args.push_back("output=pb"); | 326 upstream_args.push_back("output=pb"); |
| 343 upstream_args.push_back( | 327 upstream_args.push_back( |
| 344 "lang=" + net::EscapeQueryParamValue(GetAcceptedLanguages(), true)); | 328 "lang=" + net::EscapeQueryParamValue(GetAcceptedLanguages(), true)); |
| 345 upstream_args.push_back( | 329 upstream_args.push_back( |
| 346 config_.filter_profanities ? "pFilter=2" : "pFilter=0"); | 330 config_.filter_profanities ? "pFilter=2" : "pFilter=0"); |
| 347 if (config_.max_hypotheses > 0U) { | 331 if (config_.max_hypotheses > 0U) { |
| 348 int max_alternatives = std::min(kMaxMaxAlternatives, | 332 int max_alternatives = std::min(kMaxMaxAlternatives, |
| 349 config_.max_hypotheses); | 333 config_.max_hypotheses); |
| 350 upstream_args.push_back("maxAlternatives=" + | 334 upstream_args.push_back("maxAlternatives=" + |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 590 } | 574 } |
| 591 | 575 |
| 592 GoogleStreamingRemoteEngine::FSMEventArgs::FSMEventArgs(FSMEvent event_value) | 576 GoogleStreamingRemoteEngine::FSMEventArgs::FSMEventArgs(FSMEvent event_value) |
| 593 : event(event_value) { | 577 : event(event_value) { |
| 594 } | 578 } |
| 595 | 579 |
| 596 GoogleStreamingRemoteEngine::FSMEventArgs::~FSMEventArgs() { | 580 GoogleStreamingRemoteEngine::FSMEventArgs::~FSMEventArgs() { |
| 597 } | 581 } |
| 598 | 582 |
| 599 } // namespace content | 583 } // namespace content |
| OLD | NEW |