#include "content/browser/speech/tts_platform_impl_tizen.h"
+#include <vconf.h>
#include "base/debug/leak_annotations.h"
#include "base/functional/bind.h"
#include "base/logging.h"
return TtsPlatformImplTizen::GetInstance();
}
+static void VoiceGuidePropertyChangedCb(keynode_t* keynodeName, void* data) {
+ TtsPlatformImplTizen* obj = static_cast<TtsPlatformImplTizen*>(data);
+ if (!obj) {
+ LOG(ERROR) << "obj is NULL";
+ return;
+ }
+ obj->GetUsableTtsHandle();
+}
+
TtsPlatformImplTizen::TtsPlatformImplTizen() {
+ vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS,
+ VoiceGuidePropertyChangedCb, this);
Initialize();
}
TtsPlatformImplTizen::~TtsPlatformImplTizen() {
LOG(INFO) << "TTS: TtsPlatformImplTizen instance [ " << (void*)this
<< " ] destruct";
+ vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS,
+ VoiceGuidePropertyChangedCb);
if (!tts_handle_) {
LOG(INFO) << "TTS: TtsPlatformImplTizen instance [ " << (void*)this
<< " ] destruct, no handle, finished";
<< ErrorToString(static_cast<tts_error_e>(ret));
return false;
}
+ is_tts_prepared_ = true;
return true;
}
+tts_h TtsPlatformImplTizen::GetUsableTtsHandle() {
+ if (!is_tts_prepared_) {
+ int ret = tts_prepare(tts_handle_);
+ if (ret != TTS_ERROR_NONE) {
+ LOG(ERROR) << "TTS: Fail to prepare - "
+ << ErrorToString(static_cast<tts_error_e>(ret));
+ return NULL;
+ }
+ }
+ is_tts_prepared_ = true;
+ return tts_handle_;
+}
+
void TtsPlatformImplTizen::StoreTtsDefaultVoice() {
char* language = NULL;
int voice_type;
utterance_.pitch = params.pitch;
utterance_.on_speak_finished = std::move(on_speak_finished);
should_speak_ = true;
+ tts_h tts_handle = GetUsableTtsHandle();
+ if (!tts_handle)
+ return;
// TTS package can be litle slow at times. Always wait for READY state.
if (!is_initialized_ || is_speaking_) {
LOG(INFO) << "TTS: Speak utterance " << utterance_.utterance_id << " text #"
<< utterance_.utterance;
std::string current_language = default_language_;
- if (!utterance_.language.empty())
+ if (!utterance_.language.empty() &&
+ strcmp(utterance_.language.c_str(), "undefined"))
current_language = ConvertLangString(utterance_.language);
int voiceType = static_cast<int>(default_voice_);
}
bool TtsPlatformImplTizen::StopSpeaking() {
+ tts_h tts_handle = GetUsableTtsHandle();
+ if (!tts_handle)
+ return false;
+
// TTS package can be litle slow at times.
if (!is_initialized_ && utterance_pending_) {
LOG(INFO) << "TTS: not initialized. Ignore pending utterance "
}
LOG(INFO) << "TTS: Stop. ID: " << utterance_.utterance_id;
- int ret = tts_stop(tts_handle_);
+ int ret = tts_stop(tts_handle);
if (ret != TTS_ERROR_NONE) {
LOG(ERROR) << "TTS: Fail to stop. Error - "
<< ErrorToString(static_cast<tts_error_e>(ret)) << " in "
}
bool TtsPlatformImplTizen::Play() {
+ tts_h tts_handle = GetUsableTtsHandle();
+ if (!tts_handle)
+ return false;
+
tts_state_e current_state = GetTtsState();
if (current_state == TTS_STATE_PLAYING) {
LOG(WARNING) << "TTS: Already in play state. ID: "
}
LOG(INFO) << "TTS: Play. ID: " << utterance_.utterance_id;
- int ret = tts_play(tts_handle_);
+ int ret = tts_play(tts_handle);
if (ret != (int)TTS_ERROR_NONE) {
LOG(ERROR) << "TTS: Fail to play. Error - "
<< ErrorToString(static_cast<tts_error_e>(ret)) << " in "
}
void TtsPlatformImplTizen::Pause() {
+ tts_h tts_handle = GetUsableTtsHandle();
+ if (!tts_handle)
+ return;
+
// TTS package can be litle slow at times.
if (!is_initialized_ && utterance_pending_) {
LOG(INFO) << "TTS: not initialized. Ignore pending utterance "
}
LOG(INFO) << "TTS: Pause. ID: " << utterance_.utterance_id;
- int ret = tts_pause(tts_handle_);
+ int ret = tts_pause(tts_handle);
if (ret != TTS_ERROR_NONE) {
LOG(ERROR) << "TTS: Fail to pause - "
<< ErrorToString(static_cast<tts_error_e>(ret)) << " in "