tts_platform.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const UtteranceContinuousParameters& params) = 0; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stop speaking immediately and return true on success. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool StopSpeaking() = 0; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether any speech is on going. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsSpeaking() = 0; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return true if this platform implementation will fire the given event. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All platform implementations must fire the TTS_EVENT_END event at a 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // minimum. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool SendsEvent(TtsEventType event_type) = 0; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the gender of the voice, should be either "male" or "female" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if known, otherwise the empty string. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string gender(); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string error(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void clear_error(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void set_error(const std::string& error); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TtsPlatformImpl() {} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On some platforms this may be a leaky singleton - do not rely on the 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // destructor being called! http://crbug.com/122026 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TtsPlatformImpl() {} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error_; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TtsPlatformImpl); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_SPEECH_TTS_PLATFORM_H_ 73