#define TTS_TAG_CONFIG_LANGUAGE "language"
#define TTS_TAG_CONFIG_SPEECH_RATE "speech-rate"
#define TTS_TAG_CONFIG_PITCH "pitch"
+#define TTS_TAG_CONFIG_BACKGROUND_VOLUME_RATIO "background-volume-ratio"
#define TTS_TAG_VOICE_TYPE_FEMALE "female"
#define TTS_TAG_VOICE_TYPE_MALE "male"
#define TTS_TAG_VOICE_TYPE_CHILD "child"
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
- SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document");
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document. doc path(%s, %p)", path, doc);
xmlFreeDoc(doc);
doc = NULL;
return -1;
}
if (xmlStrcmp(cur->name, (const xmlChar *)TTS_TAG_ENGINE_BASE_TAG)) {
- SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] The wrong type, root node is NOT 'tts-engine'");
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] The wrong type, root node is NOT 'tts-engine'. doc path(%s, %p)", path, doc);
xmlFreeDoc(doc);
doc = NULL;
return -1;
cur = cur->xmlChildrenNode;
if (cur == NULL) {
- SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document");
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document. doc path(%s, %p)", path, doc);
xmlFreeDoc(doc);
doc = NULL;
return -1;
tts_engine_info_s* temp;
temp = (tts_engine_info_s*)calloc(1, sizeof(tts_engine_info_s));
if (NULL == temp) {
- SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Out of memory");
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Out of memory. doc path(%s, %p)", path, doc);
xmlFreeDoc(doc);
doc = NULL;
return -1;
temp->text_size = TTS_MAX_TEXT_SIZE;
}
- xmlFreeDoc(doc);
- doc = NULL;
+ if (NULL != doc) {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[DEBUG] doc path(%s, %p)", path, doc);
+ xmlFreeDoc(doc);
+ doc = NULL;
+ }
if (NULL == temp->uuid) {
/* Invalid engine */
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
- SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document");
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document(%p)", doc);
xmlFreeDoc(doc);
doc = NULL;
xmlCleanupParser();
}
if (xmlStrcmp(cur->name, (const xmlChar *) TTS_TAG_CONFIG_BASE_TAG)) {
- SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] The wrong type, root node is NOT %s", TTS_TAG_CONFIG_BASE_TAG);
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] The wrong type, root node is NOT %s. doc(%p)", TTS_TAG_CONFIG_BASE_TAG, doc);
xmlFreeDoc(doc);
doc = NULL;
xmlCleanupParser();
cur = cur->xmlChildrenNode;
if (cur == NULL) {
- SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document");
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document(%p)", doc);
xmlFreeDoc(doc);
doc = NULL;
xmlCleanupParser();
tts_config_s* temp;
temp = (tts_config_s*)calloc(1, sizeof(tts_config_s));
if (NULL == temp) {
- SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Out of memory");
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Out of memory(%p)", doc);
xmlFreeDoc(doc);
doc = NULL;
xmlCleanupParser();
} else {
SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Pitch is NULL");
}
+ } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)TTS_TAG_CONFIG_BACKGROUND_VOLUME_RATIO)) {
+ key = xmlNodeGetContent(cur);
+ if (NULL != key) {
+ temp->bg_volume_ratio = atof((char*)key);
+ xmlFree(key);
+ key = NULL;
+ } else {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Background volume ratio is NULL");
+ }
} else {
}
int tts_parser_unload_config(tts_config_s* config_info)
{
if (NULL != g_config_doc) {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[DEBUG] Free g_config_doc(%p)", g_config_doc);
xmlFreeDoc(g_config_doc);
g_config_doc = NULL;
}
if (NULL != config_info) {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[DEBUG] Free config_info(%p)", config_info);
free(config_info);
config_info = NULL;
}
SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Fail to change file mode : %d", ret);
}
- xmlFreeDoc(doc);
- doc = NULL;
+ if (NULL != doc) {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[DEBUG] doc(%p)", doc);
+ xmlFreeDoc(doc);
+ doc = NULL;
+ }
+
SLOG(LOG_DEBUG, TAG_TTSCONFIG, "[SUCCESS] Copying xml");
return 0;
return 0;
}
+int tts_parser_set_bg_volume_ratio(double value)
+{
+ xmlNodePtr cur = NULL;
+ cur = xmlDocGetRootElement(g_config_doc);
+ if (cur == NULL) {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document");
+ return -1;
+ }
+
+ if (xmlStrcmp(cur->name, (const xmlChar *) TTS_TAG_CONFIG_BASE_TAG)) {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] The wrong type, root node is NOT %s", TTS_TAG_CONFIG_BASE_TAG);
+ return -1;
+ }
+
+ cur = cur->xmlChildrenNode;
+ if (cur == NULL) {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document");
+ return -1;
+ }
+
+ while (cur != NULL) {
+ if (0 == xmlStrcmp(cur->name, (const xmlChar *)TTS_TAG_CONFIG_BACKGROUND_VOLUME_RATIO)) {
+ char temp[10];
+ memset(temp, '\0', 10);
+ snprintf(temp, 10, "%lf", value);
+ xmlNodeSetContent(cur, (const xmlChar *)temp);
+ break;
+ }
+
+ cur = cur->next;
+ }
+
+ if (0 == access(TTS_CONFIG, F_OK)) {
+ int ret = xmlSaveFile(TTS_CONFIG, g_config_doc);
+ if (0 > ret) {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Save result : %d", ret);
+ } else {
+ static FILE* pFile;
+ pFile = fopen(TTS_CONFIG, "r");
+ int fd = -1;
+ if (NULL == pFile) {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Fail to open file %s", TTS_CONFIG);
+ } else {
+ fd = fileno(pFile);
+ fsync(fd);
+ fclose(pFile);
+ SLOG(LOG_INFO, TAG_TTSCONFIG, "[DEBUG] Success to fsync %s", TTS_CONFIG);
+ }
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[DEBUG] Success to save %s", TTS_CONFIG);
+ }
+ } else {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Fail to access to %s", TTS_CONFIG);
+ }
+
+ return 0;
+}
+
int tts_parser_find_config_changed(char** engine, char**setting, bool* auto_voice, char** language, int* voice_type,
- int* speech_rate, int* pitch)
+ int* speech_rate, int* pitch, double* bg_volume_ratio)
{
if (NULL == engine || NULL == setting || NULL == language || NULL == voice_type || NULL == speech_rate) {
SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Input parameter is NULL");
cur_new = xmlDocGetRootElement(doc);
cur_old = xmlDocGetRootElement(g_config_doc);
if (cur_new == NULL || cur_old == NULL) {
- SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document");
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document(%p)", doc);
xmlFreeDoc(doc);
doc = NULL;
return -1;
if (xmlStrcmp(cur_new->name, (const xmlChar*)TTS_TAG_CONFIG_BASE_TAG) ||
xmlStrcmp(cur_old->name, (const xmlChar*)TTS_TAG_CONFIG_BASE_TAG)) {
- SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] The wrong type, root node is NOT %s", TTS_TAG_CONFIG_BASE_TAG);
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] The wrong type, root node is NOT %s. doc(%p)", TTS_TAG_CONFIG_BASE_TAG, doc);
xmlFreeDoc(doc);
doc = NULL;
return -1;
cur_new = cur_new->xmlChildrenNode;
cur_old = cur_old->xmlChildrenNode;
if (cur_new == NULL || cur_old == NULL) {
- SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document");
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] Empty document(%p)", doc);
xmlFreeDoc(doc);
doc = NULL;
return -1;
} else {
SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] old config and new config are different");
}
+ } else if (0 == xmlStrcmp(cur_new->name, (const xmlChar*)TTS_TAG_CONFIG_BACKGROUND_VOLUME_RATIO)) {
+ if (0 == xmlStrcmp(cur_old->name, (const xmlChar*)TTS_TAG_CONFIG_BACKGROUND_VOLUME_RATIO)) {
+ key_old = xmlNodeGetContent(cur_old);
+ if (NULL != key_old) {
+ key_new = xmlNodeGetContent(cur_new);
+ if (NULL != key_new) {
+ if (0 != xmlStrcmp(key_old, key_new)) {
+ SLOG(LOG_DEBUG, TAG_TTSCONFIG, "Old bg volume ratio(%s), New bg volume ratio(%s)",
+ (char*)key_old, (char*)key_new);
+ *bg_volume_ratio = atof((char*)key_new);
+ }
+ xmlFree(key_new);
+ key_new = NULL;
+ }
+ xmlFree(key_old);
+ key_old = NULL;
+ }
+ } else {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] old config and new config are different");
+ }
} else {
}
}
if (NULL != g_config_doc) {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[DEBUG] Free g_config_doc(%p)", g_config_doc);
xmlFreeDoc(g_config_doc);
g_config_doc = NULL;
}
SLOG(LOG_DEBUG, TAG_TTSCONFIG, "[DEBUG] Reset g_config_doc as %s", TTS_DEFAULT_CONFIG);
if (NULL != g_config_doc) {
+ SLOG(LOG_ERROR, TAG_TTSCONFIG, "[DEBUG] Free g_config_doc(%p)", g_config_doc);
xmlFreeDoc(g_config_doc);
g_config_doc = NULL;
}