104 lines
		
	
	
	
		
			3.5 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
	
		
			3.5 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2014 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 CHROME_BROWSER_SPEECH_TTS_CONTROLLER_IMPL_H_
 | |
| #define CHROME_BROWSER_SPEECH_TTS_CONTROLLER_IMPL_H_
 | |
| 
 | |
| #include <queue>
 | |
| #include <set>
 | |
| #include <string>
 | |
| #include <vector>
 | |
| 
 | |
| #include "base/memory/scoped_ptr.h"
 | |
| #include "base/memory/singleton.h"
 | |
| #include "base/memory/weak_ptr.h"
 | |
| #include "chrome/browser/speech/tts_controller.h"
 | |
| #include "url/gurl.h"
 | |
| 
 | |
| namespace content {
 | |
| class BrowserContext;
 | |
| }
 | |
| 
 | |
| // Singleton class that manages text-to-speech for the TTS and TTS engine
 | |
| // extension APIs, maintaining a queue of pending utterances and keeping
 | |
| // track of all state.
 | |
| class TtsControllerImpl : public TtsController {
 | |
|  public:
 | |
|   // Get the single instance of this class.
 | |
|   static TtsControllerImpl* GetInstance();
 | |
| 
 | |
|   // TtsController methods
 | |
|   virtual bool IsSpeaking() override;
 | |
|   virtual void SpeakOrEnqueue(Utterance* utterance) override;
 | |
|   virtual void Stop() override;
 | |
|   virtual void Pause() override;
 | |
|   virtual void Resume() override;
 | |
|   virtual void OnTtsEvent(int utterance_id,
 | |
|                   TtsEventType event_type,
 | |
|                   int char_index,
 | |
|                   const std::string& error_message) override;
 | |
|   virtual void GetVoices(content::BrowserContext* browser_context,
 | |
|                          std::vector<VoiceData>* out_voices) override;
 | |
|   virtual void VoicesChanged() override;
 | |
|   virtual void AddVoicesChangedDelegate(
 | |
|       VoicesChangedDelegate* delegate) override;
 | |
|   virtual void RemoveVoicesChangedDelegate(
 | |
|       VoicesChangedDelegate* delegate) override;
 | |
|   virtual void SetTtsEngineDelegate(TtsEngineDelegate* delegate) override;
 | |
|   virtual TtsEngineDelegate* GetTtsEngineDelegate() override;
 | |
|   virtual void SetPlatformImpl(TtsPlatformImpl* platform_impl) override;
 | |
|   virtual int QueueSize() override;
 | |
| 
 | |
|  protected:
 | |
|   TtsControllerImpl();
 | |
|   virtual ~TtsControllerImpl();
 | |
| 
 | |
|  private:
 | |
|   // Get the platform TTS implementation (or injected mock).
 | |
|   TtsPlatformImpl* GetPlatformImpl();
 | |
| 
 | |
|   // Start speaking the given utterance. Will either take ownership of
 | |
|   // |utterance| or delete it if there's an error. Returns true on success.
 | |
|   void SpeakNow(Utterance* utterance);
 | |
| 
 | |
|   // Clear the utterance queue. If send_events is true, will send
 | |
|   // TTS_EVENT_CANCELLED events on each one.
 | |
|   void ClearUtteranceQueue(bool send_events);
 | |
| 
 | |
|   // Finalize and delete the current utterance.
 | |
|   void FinishCurrentUtterance();
 | |
| 
 | |
|   // Start speaking the next utterance in the queue.
 | |
|   void SpeakNextUtterance();
 | |
| 
 | |
|   // Given an utterance and a vector of voices, return the
 | |
|   // index of the voice that best matches the utterance.
 | |
|   int GetMatchingVoice(const Utterance* utterance,
 | |
|                        std::vector<VoiceData>& voices);
 | |
| 
 | |
|   friend struct base::DefaultSingletonTraits<TtsControllerImpl>;
 | |
| 
 | |
|   // The current utterance being spoken.
 | |
|   Utterance* current_utterance_;
 | |
| 
 | |
|   // Whether the queue is paused or not.
 | |
|   bool paused_;
 | |
| 
 | |
|   // A queue of utterances to speak after the current one finishes.
 | |
|   std::queue<Utterance*> utterance_queue_;
 | |
| 
 | |
|   // A set of delegates that want to be notified when the voices change.
 | |
|   std::set<VoicesChangedDelegate*> voices_changed_delegates_;
 | |
| 
 | |
|   // A pointer to the platform implementation of text-to-speech, for
 | |
|   // dependency injection.
 | |
|   TtsPlatformImpl* platform_impl_;
 | |
| 
 | |
|   // The delegate that processes TTS requests with user-installed extensions.
 | |
|   TtsEngineDelegate* tts_engine_delegate_;
 | |
| 
 | |
|   DISALLOW_COPY_AND_ASSIGN(TtsControllerImpl);
 | |
| };
 | |
| 
 | |
| #endif  // CHROME_BROWSER_SPEECH_TTS_CONTROLLER_IMPL_H_
 | 
