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

Side by Side Diff: chrome/browser/extensions/extension_tts_api.cc

Issue 3640001: Refactored TTS extension code so that the platform-specific TTS... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 2 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) 2009 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/extensions/extension_tts_api.h" 5 #include "chrome/browser/extensions/extension_tts_api.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/float_util.h"
9 #include "base/values.h" 10 #include "base/values.h"
10 #include "base/string_number_conversions.h" 11 #include "base/string_number_conversions.h"
11 12
12 #include "chrome/browser/chromeos/cros/cros_library.h"
13 #include "chrome/browser/chromeos/cros/speech_synthesis_library.h"
14
15 namespace util = extension_tts_api_util; 13 namespace util = extension_tts_api_util;
16 14
17 using base::DoubleToString; 15 using base::DoubleToString;
18 16
19 namespace { 17 namespace {
20 const char kCrosLibraryNotLoadedError[] = 18 const char kCrosLibraryNotLoadedError[] =
21 "Cros shared library not loaded."; 19 "Cros shared library not loaded.";
22 }; 20 };
23 21
24 bool ExtensionTtsSpeakFunction::RunImpl() { 22 bool ExtensionTtsSpeakFunction::RunImpl() {
25 std::string utterance; 23 std::string utterance;
26 std::string options = ""; 24 std::string language;
25 std::string gender;
26 double rate = -1.0;
27 double pitch = -1.0;
28 double volume = -1.0;
29
27 DictionaryValue* speak_options = NULL; 30 DictionaryValue* speak_options = NULL;
28 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &utterance)); 31 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &utterance));
32
29 if (args_->GetDictionary(1, &speak_options)) { 33 if (args_->GetDictionary(1, &speak_options)) {
30 std::string str_value; 34 if (speak_options->HasKey(util::kLanguageNameKey)) {
31 double real_value; 35 speak_options->GetString(util::kLanguageNameKey, &language);
32 if (speak_options->HasKey(util::kLanguageNameKey) &&
33 speak_options->GetString(util::kLanguageNameKey, &str_value)) {
34 util::AppendSpeakOption(
35 std::string(util::kNameKey), str_value, &options);
36 } 36 }
37 if (speak_options->HasKey(util::kGenderKey) && 37
38 speak_options->GetString(util::kGenderKey, &str_value)) { 38 if (speak_options->HasKey(util::kGenderKey)) {
39 util::AppendSpeakOption( 39 speak_options->GetString(util::kGenderKey, &gender);
40 std::string(util::kGenderKey), str_value, &options);
41 } 40 }
42 if (util::ReadNumberByKey(speak_options, util::kRateKey, &real_value)) { 41
43 // The TTS service allows a range of 0 to 5 for speech rate. 42 if (util::ReadNumberByKey(speak_options, util::kRateKey, &rate)) {
44 util::AppendSpeakOption(std::string(util::kRateKey), 43 if (!base::IsFinite(rate) || rate < 0.0 || rate > 1.0) {
45 DoubleToString(real_value * 5), &options); 44 rate = -1.0;
45 }
46 } 46 }
47 if (util::ReadNumberByKey(speak_options, util::kPitchKey, &real_value)) { 47
48 // The TTS service allows a range of 0 to 2 for speech pitch. 48 if (util::ReadNumberByKey(speak_options, util::kPitchKey, &pitch)) {
49 util::AppendSpeakOption(std::string(util::kPitchKey), 49 if (!base::IsFinite(pitch) || pitch < 0.0 || pitch > 1.0) {
50 DoubleToString(real_value * 2), &options); 50 pitch = -1.0;
51 }
51 } 52 }
52 if (util::ReadNumberByKey(speak_options, util::kVolumeKey, &real_value)) { 53
53 // The TTS service allows a range of 0 to 5 for speech volume. 54 if (util::ReadNumberByKey(speak_options, util::kVolumeKey, &volume)) {
54 util::AppendSpeakOption(std::string(util::kVolumeKey), 55 if (!base::IsFinite(volume) || volume < 0.0 || volume > 1.0) {
55 DoubleToString(real_value * 5), &options); 56 volume = -1.0;
57 }
56 } 58 }
57 } 59 }
58 if (chromeos::CrosLibrary::Get()->EnsureLoaded()) { 60
59 if (!options.empty()) { 61 ExtensionTtsPlatformImpl* impl = ExtensionTtsPlatformImpl::GetInstance();
60 chromeos::CrosLibrary::Get()->GetSpeechSynthesisLibrary()-> 62 impl->clear_error();
61 SetSpeakProperties(options.c_str()); 63 return impl->Speak(utterance, language, gender, rate, pitch, volume);
62 }
63 bool ret = chromeos::CrosLibrary::Get()->GetSpeechSynthesisLibrary()->
64 Speak(utterance.c_str());
65 result_.reset();
66 return ret;
67 }
68 error_ = kCrosLibraryNotLoadedError;
69 return false;
70 } 64 }
71 65
72 bool ExtensionTtsStopSpeakingFunction::RunImpl() { 66 bool ExtensionTtsStopSpeakingFunction::RunImpl() {
73 if (chromeos::CrosLibrary::Get()->EnsureLoaded()) { 67 ExtensionTtsPlatformImpl* impl = ExtensionTtsPlatformImpl::GetInstance();
74 return chromeos::CrosLibrary::Get()->GetSpeechSynthesisLibrary()-> 68 impl->clear_error();
75 StopSpeaking(); 69 return impl->StopSpeaking();
76 }
77 error_ = kCrosLibraryNotLoadedError;
78 return false;
79 } 70 }
80 71
81 bool ExtensionTtsIsSpeakingFunction::RunImpl() { 72 bool ExtensionTtsIsSpeakingFunction::RunImpl() {
82 if (chromeos::CrosLibrary::Get()->EnsureLoaded()) { 73 ExtensionTtsPlatformImpl* impl = ExtensionTtsPlatformImpl::GetInstance();
83 result_.reset(Value::CreateBooleanValue( 74 impl->clear_error();
84 chromeos::CrosLibrary::Get()->GetSpeechSynthesisLibrary()-> 75 return impl->IsSpeaking();
85 IsSpeaking()));
86 return true;
87 }
88 error_ = kCrosLibraryNotLoadedError;
89 return false;
90 } 76 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_tts_api.h ('k') | chrome/browser/extensions/extension_tts_api_chromeos.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698