OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/speech/tts_controller_impl.h" | 5 #include "chrome/browser/speech/tts_controller_impl.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/float_util.h" | 10 #include "base/float_util.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 VoiceData::~VoiceData() {} | 58 VoiceData::~VoiceData() {} |
59 | 59 |
60 | 60 |
61 // | 61 // |
62 // Utterance | 62 // Utterance |
63 // | 63 // |
64 | 64 |
65 // static | 65 // static |
66 int Utterance::next_utterance_id_ = 0; | 66 int Utterance::next_utterance_id_ = 0; |
67 | 67 |
68 Utterance::Utterance(Profile* profile) | 68 Utterance::Utterance(content::BrowserContext* browser_context) |
69 : profile_(profile), | 69 : browser_context_(browser_context), |
70 id_(next_utterance_id_++), | 70 id_(next_utterance_id_++), |
71 src_id_(-1), | 71 src_id_(-1), |
72 gender_(TTS_GENDER_NONE), | 72 gender_(TTS_GENDER_NONE), |
73 can_enqueue_(false), | 73 can_enqueue_(false), |
74 char_index_(0), | 74 char_index_(0), |
75 finished_(false) { | 75 finished_(false) { |
76 options_.reset(new base::DictionaryValue()); | 76 options_.reset(new base::DictionaryValue()); |
77 } | 77 } |
78 | 78 |
79 Utterance::~Utterance() { | 79 Utterance::~Utterance() { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 } else { | 146 } else { |
147 Stop(); | 147 Stop(); |
148 SpeakNow(utterance); | 148 SpeakNow(utterance); |
149 } | 149 } |
150 } | 150 } |
151 | 151 |
152 void TtsControllerImpl::SpeakNow(Utterance* utterance) { | 152 void TtsControllerImpl::SpeakNow(Utterance* utterance) { |
153 // Ensure we have all built-in voices loaded. This is a no-op if already | 153 // Ensure we have all built-in voices loaded. This is a no-op if already |
154 // loaded. | 154 // loaded. |
155 bool loaded_built_in = | 155 bool loaded_built_in = |
156 GetPlatformImpl()->LoadBuiltInTtsExtension(utterance->profile()); | 156 GetPlatformImpl()->LoadBuiltInTtsExtension(utterance->browser_context()); |
157 | 157 |
158 // Get all available voices and try to find a matching voice. | 158 // Get all available voices and try to find a matching voice. |
159 std::vector<VoiceData> voices; | 159 std::vector<VoiceData> voices; |
160 GetVoices(utterance->profile(), &voices); | 160 GetVoices(utterance->browser_context(), &voices); |
161 int index = GetMatchingVoice(utterance, voices); | 161 int index = GetMatchingVoice(utterance, voices); |
162 | 162 |
163 VoiceData voice; | 163 VoiceData voice; |
164 if (index != -1) { | 164 if (index != -1) { |
165 // Select the matching voice. | 165 // Select the matching voice. |
166 voice = voices[index]; | 166 voice = voices[index]; |
167 } else { | 167 } else { |
168 // However, if no match was found on a platform without native tts voices, | 168 // However, if no match was found on a platform without native tts voices, |
169 // attempt to get a voice based only on the current locale without respect | 169 // attempt to get a voice based only on the current locale without respect |
170 // to any supplied voice names. | 170 // to any supplied voice names. |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 if (!current_utterance_ || utterance_id != current_utterance_->id()) { | 298 if (!current_utterance_ || utterance_id != current_utterance_->id()) { |
299 return; | 299 return; |
300 } | 300 } |
301 current_utterance_->OnTtsEvent(event_type, char_index, error_message); | 301 current_utterance_->OnTtsEvent(event_type, char_index, error_message); |
302 if (current_utterance_->finished()) { | 302 if (current_utterance_->finished()) { |
303 FinishCurrentUtterance(); | 303 FinishCurrentUtterance(); |
304 SpeakNextUtterance(); | 304 SpeakNextUtterance(); |
305 } | 305 } |
306 } | 306 } |
307 | 307 |
308 void TtsControllerImpl::GetVoices(Profile* profile, | 308 void TtsControllerImpl::GetVoices(content::BrowserContext* browser_context, |
309 std::vector<VoiceData>* out_voices) { | 309 std::vector<VoiceData>* out_voices) { |
310 #if !defined(OS_ANDROID) | 310 #if !defined(OS_ANDROID) |
311 if (profile && tts_engine_delegate_) | 311 if (browser_context && tts_engine_delegate_) |
312 tts_engine_delegate_->GetVoices(profile, out_voices); | 312 tts_engine_delegate_->GetVoices(browser_context, out_voices); |
313 #endif | 313 #endif |
314 | 314 |
315 TtsPlatformImpl* platform_impl = GetPlatformImpl(); | 315 TtsPlatformImpl* platform_impl = GetPlatformImpl(); |
316 if (platform_impl) { | 316 if (platform_impl) { |
317 // Ensure we have all built-in voices loaded. This is a no-op if already | 317 // Ensure we have all built-in voices loaded. This is a no-op if already |
318 // loaded. | 318 // loaded. |
319 platform_impl->LoadBuiltInTtsExtension(profile); | 319 platform_impl->LoadBuiltInTtsExtension(browser_context); |
320 if (platform_impl->PlatformImplAvailable()) | 320 if (platform_impl->PlatformImplAvailable()) |
321 platform_impl->GetVoices(out_voices); | 321 platform_impl->GetVoices(out_voices); |
322 } | 322 } |
323 } | 323 } |
324 | 324 |
325 bool TtsControllerImpl::IsSpeaking() { | 325 bool TtsControllerImpl::IsSpeaking() { |
326 return current_utterance_ != NULL || GetPlatformImpl()->IsSpeaking(); | 326 return current_utterance_ != NULL || GetPlatformImpl()->IsSpeaking(); |
327 } | 327 } |
328 | 328 |
329 void TtsControllerImpl::FinishCurrentUtterance() { | 329 void TtsControllerImpl::FinishCurrentUtterance() { |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 } | 454 } |
455 | 455 |
456 void TtsControllerImpl::SetTtsEngineDelegate( | 456 void TtsControllerImpl::SetTtsEngineDelegate( |
457 TtsEngineDelegate* delegate) { | 457 TtsEngineDelegate* delegate) { |
458 tts_engine_delegate_ = delegate; | 458 tts_engine_delegate_ = delegate; |
459 } | 459 } |
460 | 460 |
461 TtsEngineDelegate* TtsControllerImpl::GetTtsEngineDelegate() { | 461 TtsEngineDelegate* TtsControllerImpl::GetTtsEngineDelegate() { |
462 return tts_engine_delegate_; | 462 return tts_engine_delegate_; |
463 } | 463 } |
OLD | NEW |