| Index: chrome/browser/extensions/extension_tts_api_chromeos.cc
|
| ===================================================================
|
| --- chrome/browser/extensions/extension_tts_api_chromeos.cc (revision 0)
|
| +++ chrome/browser/extensions/extension_tts_api_chromeos.cc (revision 0)
|
| @@ -0,0 +1,122 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/extensions/extension_tts_api.h"
|
| +
|
| +#include "base/singleton.h"
|
| +#include "chrome/browser/chromeos/cros/cros_library.h"
|
| +#include "chrome/browser/chromeos/cros/speech_synthesis_library.h"
|
| +
|
| +namespace util = extension_tts_api_util;
|
| +
|
| +namespace {
|
| +const char kCrosLibraryNotLoadedError[] = "Cros shared library not loaded.";
|
| +};
|
| +
|
| +class ExtensionTtsPlatformImplChromeOs : public ExtensionTtsPlatformImpl {
|
| + public:
|
| + virtual bool Speak(
|
| + const std::string& utterance,
|
| + const std::string& language,
|
| + const std::string& gender,
|
| + double rate,
|
| + double pitch,
|
| + double volume);
|
| +
|
| + virtual bool StopSpeaking();
|
| +
|
| + virtual bool IsSpeaking();
|
| +
|
| + // Get the single instance of this class.
|
| + static ExtensionTtsPlatformImplChromeOs* GetInstance();
|
| +
|
| + private:
|
| + ExtensionTtsPlatformImplChromeOs() {}
|
| + virtual ~ExtensionTtsPlatformImplChromeOs() {}
|
| +
|
| + friend struct DefaultSingletonTraits<ExtensionTtsPlatformImplChromeOs>;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ExtensionTtsPlatformImplChromeOs);
|
| +};
|
| +
|
| +// static
|
| +ExtensionTtsPlatformImpl* ExtensionTtsPlatformImpl::GetInstance() {
|
| + return ExtensionTtsPlatformImplChromeOs::GetInstance();
|
| +}
|
| +
|
| +bool ExtensionTtsPlatformImplChromeOs::Speak(
|
| + const std::string& utterance,
|
| + const std::string& language,
|
| + const std::string& gender,
|
| + double rate,
|
| + double pitch,
|
| + double volume) {
|
| + chromeos::CrosLibrary* cros_library = chromeos::CrosLibrary::Get();
|
| + if (!cros_library->EnsureLoaded()) {
|
| + set_error(kCrosLibraryNotLoadedError);
|
| + return false;
|
| + }
|
| +
|
| + std::string options;
|
| +
|
| + if (!language.empty()) {
|
| + util::AppendSpeakOption(
|
| + std::string(util::kNameKey), language, &options);
|
| + }
|
| +
|
| + if (!gender.empty()) {
|
| + util::AppendSpeakOption(
|
| + std::string(util::kGenderKey), gender, &options);
|
| + }
|
| +
|
| + if (rate >= 0.0) {
|
| + util::AppendSpeakOption(
|
| + std::string(util::kRateKey), DoubleToString(rate * 5), &options);
|
| + }
|
| +
|
| + if (pitch >= 0.0) {
|
| + // The TTS service allows a range of 0 to 2 for speech pitch.
|
| + util::AppendSpeakOption(
|
| + std::string(util::kPitchKey), DoubleToString(pitch * 2), &options);
|
| + }
|
| +
|
| + if (volume >= 0.0) {
|
| + // The TTS service allows a range of 0 to 5 for speech volume.
|
| + util::AppendSpeakOption(
|
| + std::string(util::kVolumeKey), DoubleToString(volume * 5), &options);
|
| + }
|
| +
|
| + if (!options.empty()) {
|
| + cros_library->GetSpeechSynthesisLibrary()->SetSpeakProperties(
|
| + options.c_str());
|
| + }
|
| +
|
| + return cros_library->GetSpeechSynthesisLibrary()->Speak(utterance.c_str());
|
| +}
|
| +
|
| +bool ExtensionTtsPlatformImplChromeOs::StopSpeaking() {
|
| + if (chromeos::CrosLibrary::Get()->EnsureLoaded()) {
|
| + return chromeos::CrosLibrary::Get()->GetSpeechSynthesisLibrary()->
|
| + StopSpeaking();
|
| + }
|
| +
|
| + set_error(kCrosLibraryNotLoadedError);
|
| + return false;
|
| +}
|
| +
|
| +bool ExtensionTtsPlatformImplChromeOs::IsSpeaking() {
|
| + if (chromeos::CrosLibrary::Get()->EnsureLoaded()) {
|
| + return chromeos::CrosLibrary::Get()->GetSpeechSynthesisLibrary()->
|
| + IsSpeaking();
|
| + }
|
| +
|
| + set_error(kCrosLibraryNotLoadedError);
|
| + return false;
|
| +}
|
| +
|
| +// static
|
| +ExtensionTtsPlatformImplChromeOs*
|
| +ExtensionTtsPlatformImplChromeOs::GetInstance() {
|
| + return Singleton<ExtensionTtsPlatformImplChromeOs>::get();
|
| +}
|
|
|
| Property changes on: chrome/browser/extensions/extension_tts_api_chromeos.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|