15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_SPEECH_TTS_PLATFORM_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_SPEECH_TTS_PLATFORM_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/speech/tts_controller.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Abstract class that defines the native platform TTS interface, 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// subclassed by specific implementations on Win, Mac, etc. 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TtsPlatformImpl { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static TtsPlatformImpl* GetInstance(); 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if this platform implementation is supported and available. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool PlatformImplAvailable() = 0; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Some platforms may provide a built-in TTS extension. Returns true 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // if the extension was not previously loaded and is now loading, and 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // false if it's already loaded or if there's no extension to load. 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Will call TtsController::RetrySpeakingQueuedUtterances when 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the extension finishes loading. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool LoadBuiltInTtsExtension(Profile* profile); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Speak the given utterance with the given parameters if possible, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and return true on success. Utterance will always be nonempty. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If rate, pitch, or volume are -1.0, they will be ignored. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The TtsController will only try to speak one utterance at 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a time. If it wants to interrupt speech, it will always call Stop 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // before speaking again. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Speak( 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int utterance_id, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& utterance, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& lang, 39a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const VoiceData& voice, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const UtteranceContinuousParameters& params) = 0; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stop speaking immediately and return true on success. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool StopSpeaking() = 0; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether any speech is on going. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsSpeaking() = 0; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 48a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Append information about voices provided by this platform implementation 49a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // to |out_voices|. 50a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) virtual void GetVoices(std::vector<VoiceData>* out_voices) = 0; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Pause the current utterance, if any, until a call to Resume, 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Speak, or StopSpeaking. 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void Pause() = 0; 55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Resume speaking the current utterance, if it was paused. 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void Resume() = 0; 58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Allows the platform to monitor speech commands and the voices used 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // for each one. 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void WillSpeakUtteranceWithVoice(const Utterance* utterance, 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const VoiceData& voice_data); 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string error(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void clear_error(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void set_error(const std::string& error); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TtsPlatformImpl() {} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On some platforms this may be a leaky singleton - do not rely on the 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // destructor being called! http://crbug.com/122026 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TtsPlatformImpl() {} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error_; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TtsPlatformImpl); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_SPEECH_TTS_PLATFORM_H_ 81