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
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_SPEECH_TTS_PLATFORM_H_
6#define CHROME_BROWSER_SPEECH_TTS_PLATFORM_H_
7
8#include <string>
9
10#include "chrome/browser/speech/tts_controller.h"
11
12// Abstract class that defines the native platform TTS interface,
13// subclassed by specific implementations on Win, Mac, etc.
14class TtsPlatformImpl {
15 public:
16  static TtsPlatformImpl* GetInstance();
17
18  // Returns true if this platform implementation is supported and available.
19  virtual bool PlatformImplAvailable() = 0;
20
21  // Some platforms may provide a built-in TTS extension. Returns true
22  // if the extension was not previously loaded and is now loading, and
23  // false if it's already loaded or if there's no extension to load.
24  // Will call TtsController::RetrySpeakingQueuedUtterances when
25  // the extension finishes loading.
26  virtual bool LoadBuiltInTtsExtension(
27      content::BrowserContext* browser_context);
28
29  // Speak the given utterance with the given parameters if possible,
30  // and return true on success. Utterance will always be nonempty.
31  // If rate, pitch, or volume are -1.0, they will be ignored.
32  //
33  // The TtsController will only try to speak one utterance at
34  // a time. If it wants to interrupt speech, it will always call Stop
35  // before speaking again.
36  virtual bool Speak(
37      int utterance_id,
38      const std::string& utterance,
39      const std::string& lang,
40      const VoiceData& voice,
41      const UtteranceContinuousParameters& params) = 0;
42
43  // Stop speaking immediately and return true on success.
44  virtual bool StopSpeaking() = 0;
45
46  // Returns whether any speech is on going.
47  virtual bool IsSpeaking() = 0;
48
49  // Append information about voices provided by this platform implementation
50  // to |out_voices|.
51  virtual void GetVoices(std::vector<VoiceData>* out_voices) = 0;
52
53  // Pause the current utterance, if any, until a call to Resume,
54  // Speak, or StopSpeaking.
55  virtual void Pause() = 0;
56
57  // Resume speaking the current utterance, if it was paused.
58  virtual void Resume() = 0;
59
60  // Allows the platform to monitor speech commands and the voices used
61  // for each one.
62  virtual void WillSpeakUtteranceWithVoice(const Utterance* utterance,
63                                           const VoiceData& voice_data);
64
65  virtual std::string error();
66  virtual void clear_error();
67  virtual void set_error(const std::string& error);
68
69 protected:
70  TtsPlatformImpl() {}
71
72  // On some platforms this may be a leaky singleton - do not rely on the
73  // destructor being called!  http://crbug.com/122026
74  virtual ~TtsPlatformImpl() {}
75
76  std::string error_;
77
78  DISALLOW_COPY_AND_ASSIGN(TtsPlatformImpl);
79};
80
81#endif  // CHROME_BROWSER_SPEECH_TTS_PLATFORM_H_
82