Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2013 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 #include "chrome/browser/speech/tts_request_handler.h" | |
| 6 | |
| 7 #include "base/logging.h" | |
| 8 #include "chrome/browser/profiles/profile.h" | |
| 9 #include "chrome/browser/speech/tts_controller.h" | |
| 10 #include "content/public/browser/browser_context.h" | |
| 11 | |
| 12 class TtsRequestEventHandler : public UtteranceEventDelegate { | |
| 13 public: | |
| 14 TtsRequestEventHandler(content::TtsDispatcherHost* dispatcher_host, | |
| 15 int routing_id); | |
| 16 virtual void OnTtsEvent(Utterance* utterance, | |
| 17 TtsEventType event_type, | |
| 18 int char_index, | |
| 19 const std::string& error_message) OVERRIDE; | |
| 20 private: | |
| 21 content::TtsDispatcherHost* dispatcher_host_; | |
| 22 int routing_id_; | |
| 23 }; | |
| 24 | |
| 25 TtsRequestEventHandler::TtsRequestEventHandler( | |
| 26 content::TtsDispatcherHost* dispatcher_host, | |
| 27 int routing_id) | |
| 28 : dispatcher_host_(dispatcher_host), | |
| 29 routing_id_(routing_id) { | |
| 30 } | |
| 31 | |
| 32 void TtsRequestEventHandler::OnTtsEvent(Utterance* utterance, | |
| 33 TtsEventType event_type, | |
| 34 int char_index, | |
| 35 const std::string& error_message) { | |
| 36 switch(event_type) { | |
| 37 case TTS_EVENT_START: | |
| 38 dispatcher_host_->DidStartSpeaking(routing_id_, utterance->src_id()); | |
| 39 break; | |
| 40 case TTS_EVENT_END: | |
| 41 dispatcher_host_->DidFinishSpeaking(routing_id_, utterance->src_id()); | |
| 42 break; | |
| 43 case TTS_EVENT_WORD: | |
| 44 dispatcher_host_->WordBoundary( | |
| 45 routing_id_, utterance->src_id(), char_index); | |
| 46 break; | |
| 47 case TTS_EVENT_SENTENCE: | |
| 48 dispatcher_host_->SentenceBoundary( | |
| 49 routing_id_, utterance->src_id(), char_index); | |
| 50 break; | |
| 51 case TTS_EVENT_MARKER: | |
| 52 dispatcher_host_->MarkerEvent( | |
| 53 routing_id_, utterance->src_id(), char_index); | |
| 54 break; | |
| 55 case TTS_EVENT_INTERRUPTED: | |
| 56 dispatcher_host_->WasInterrupted(routing_id_, utterance->src_id()); | |
| 57 break; | |
| 58 case TTS_EVENT_CANCELLED: | |
| 59 dispatcher_host_->WasCancelled(routing_id_, utterance->src_id()); | |
| 60 break; | |
| 61 case TTS_EVENT_ERROR: | |
| 62 dispatcher_host_->SpeakingErrorOccurred( | |
| 63 routing_id_, utterance->src_id(), error_message); | |
| 64 break; | |
| 65 } | |
| 66 | |
| 67 if (utterance->finished()) | |
| 68 delete this; | |
| 69 } | |
| 70 | |
| 71 | |
| 72 TtsRequestHandler::TtsRequestHandler() { | |
| 73 } | |
| 74 | |
| 75 TtsRequestHandler::~TtsRequestHandler() { | |
| 76 } | |
| 77 | |
| 78 void TtsRequestHandler::OnInitializeVoiceList( | |
| 79 content::TtsDispatcherHost* dispatcher_host, | |
| 80 int routing_id) { | |
| 81 content::BrowserContext* context = dispatcher_host->GetBrowserContext(); | |
| 82 Profile* profile = Profile::FromBrowserContext(context); | |
|
tommi (sloooow) - chröme
2013/03/07 13:04:46
check FromBrowserContext (here and elsewhere)
dmazzoni
2013/03/19 17:30:22
Done.
| |
| 83 TtsController* tts_controller = TtsController::GetInstance(); | |
| 84 std::vector<VoiceData> voices; | |
| 85 tts_controller->GetVoices(profile, &voices); | |
| 86 | |
| 87 std::vector<content::TtsVoice> out_voices; | |
| 88 for (size_t i = 0; i < voices.size(); i++) { | |
|
tommi (sloooow) - chröme
2013/03/07 13:04:46
++i
dmazzoni
2013/03/19 17:30:22
Done.
| |
| 89 out_voices.push_back(content::TtsVoice()); | |
|
tommi (sloooow) - chröme
2013/03/07 13:04:46
do out_voices.reset(voices.size()) outside the loo
dmazzoni
2013/03/19 17:30:22
Agreed here, no reason not to.
| |
| 90 content::TtsVoice* out_voice = &out_voices.back(); | |
| 91 out_voice->voice_uri = voices[i].name; | |
| 92 out_voice->name = voices[i].name; | |
| 93 out_voice->lang = voices[i].lang; | |
| 94 out_voice->local_service = true; | |
| 95 out_voice->is_default = (i == 0); | |
| 96 } | |
| 97 dispatcher_host->SendVoiceList(routing_id, out_voices); | |
| 98 } | |
| 99 | |
| 100 void TtsRequestHandler::OnSpeak(content::TtsDispatcherHost* dispatcher_host, | |
| 101 int routing_id, | |
| 102 const content::TtsUtteranceRequest& request) { | |
| 103 content::BrowserContext* context = dispatcher_host->GetBrowserContext(); | |
| 104 Profile* profile = Profile::FromBrowserContext(context); | |
| 105 | |
| 106 Utterance* utterance = new Utterance(profile); | |
|
hans
2013/03/09 14:19:52
scoped_ptr? Then it would be more clear that we're
dmazzoni
2013/03/19 17:30:22
Done.
| |
| 107 utterance->set_src_id(request.id); | |
| 108 utterance->set_text(request.text); | |
| 109 utterance->set_lang(request.lang); | |
| 110 utterance->set_voice_name(request.voice); | |
| 111 utterance->set_can_enqueue(true); | |
| 112 | |
| 113 UtteranceContinuousParameters params; | |
| 114 params.rate = request.rate; | |
| 115 params.pitch = request.pitch; | |
| 116 params.volume = request.volume; | |
| 117 utterance->set_continuous_parameters(params); | |
| 118 | |
| 119 utterance->set_event_delegate( | |
| 120 new TtsRequestEventHandler(dispatcher_host, routing_id)); | |
| 121 | |
| 122 TtsController::GetInstance()->SpeakOrEnqueue(utterance); | |
| 123 } | |
| 124 | |
| 125 void TtsRequestHandler::OnPause(content::TtsDispatcherHost* dispatcher_host) { | |
| 126 // Not supported by TtsController yet. | |
|
tommi (sloooow) - chröme
2013/03/07 13:04:46
NOTIMPLEMENTED() or TODO?
dmazzoni
2013/03/19 17:30:22
Done.
| |
| 127 } | |
| 128 | |
| 129 void TtsRequestHandler::OnResume(content::TtsDispatcherHost* dispatcher_host) { | |
| 130 // Not supported by TtsController yet. | |
| 131 } | |
| 132 | |
| 133 void TtsRequestHandler::OnCancel(content::TtsDispatcherHost* dispatcher_host) { | |
| 134 TtsController::GetInstance()->Stop(); | |
| 135 } | |
| OLD | NEW |