blob: ef135dda59f5bcb7d9f892291f51db5a1a3b5908 [file] [log] [blame]
// Copyright (c) 2012 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.
#ifndef CONTENT_PUBLIC_BROWSER_TTS_PLATFORM_H_
#define CONTENT_PUBLIC_BROWSER_TTS_PLATFORM_H_
#include <string>
#include "content/common/content_export.h"
#include "content/public/browser/tts_controller.h"
#include "content/public/browser/tts_utterance.h"
namespace content {
// Abstract class that defines the native platform TTS interface,
// subclassed by specific implementations on Win, Mac, etc.
class CONTENT_EXPORT TtsPlatform {
public:
static TtsPlatform* GetInstance();
// Returns true if this platform implementation is supported. The returned
// value of this method won't change over time.
virtual bool PlatformImplSupported() = 0;
// Returns true if this platform implementation is initialized. If the
// platform is supported, this method will eventually return true, when
// the asynchronous initialisation is completed. Other methods may fail if
// called when not yet initialized.
virtual bool PlatformImplInitialized() = 0;
// Some platforms may provide a built-in TTS engine. Returns true
// if the engine was not previously loaded and is now loading, and
// false if it's already loaded or if there's no engine to load.
// Will call TtsController::RetrySpeakingQueuedUtterances when
// the engine finishes loading.
virtual void LoadBuiltInTtsEngine(BrowserContext* browser_context) = 0;
// Speak the given utterance with the given parameters if possible,
// and return true on success. Utterance will always be nonempty.
// If rate, pitch, or volume are -1.0, they will be ignored.
//
// The TtsController will only try to speak one utterance at
// a time. If it wants to interrupt speech, it will always call Stop
// before speaking again.
//
// |did_start_speaking_callback| is called (either sync or async) when either
// speech was started (value of true), or if speech isn't possible at the
// current time (value of false).
virtual void Speak(
int utterance_id,
const std::string& utterance,
const std::string& lang,
const VoiceData& voice,
const UtteranceContinuousParameters& params,
base::OnceCallback<void(bool)> did_start_speaking_callback) = 0;
// Stop speaking immediately and return true on success.
virtual bool StopSpeaking() = 0;
// Returns whether any speech is on going.
virtual bool IsSpeaking() = 0;
// Append information about voices provided by this platform implementation
// to |out_voices|.
virtual void GetVoices(std::vector<VoiceData>* out_voices) = 0;
// Returns a list of all available voices for |browser_context|, including
// the native voice, if supported, and all voices registered by engines.
// |source_url| will be used for policy decisions by engines to determine
// which voices to return.
virtual void GetVoicesForBrowserContext(
BrowserContext* browser_context,
const GURL& source_url,
std::vector<VoiceData>* out_voices) = 0;
// Pause the current utterance, if any, until a call to Resume,
// Speak, or StopSpeaking.
virtual void Pause() = 0;
// Resume speaking the current utterance, if it was paused.
virtual void Resume() = 0;
// Allows the platform to monitor speech commands and the voices used
// for each one.
virtual void WillSpeakUtteranceWithVoice(TtsUtterance* utterance,
const VoiceData& voice_data) = 0;
virtual std::string GetError() = 0;
virtual void ClearError() = 0;
virtual void SetError(const std::string& error) = 0;
// If supported, the platform shutdown its internal state. After that call,
// other methods may no-op.
virtual void Shutdown() = 0;
// Returns whether TtsController should prefer voices from TtsEngineDelegate
// over those from this platform. Defaults to false.
virtual bool PreferEngineDelegateVoices() = 0;
};
} // namespace content
#endif // CONTENT_PUBLIC_BROWSER_TTS_PLATFORM_H_