2 * Copyright (c) 2011-2016 Samsung Electronics Co., Ltd All Rights Reserved
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 * http://www.apache.org/licenses/LICENSE-2.0
7 * Unless required by applicable law or agreed to in writing, software
8 * distributed under the License is distributed on an "AS IS" BASIS,
9 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 * See the License for the specific language governing permissions and
11 * limitations under the License.
21 #include "stt_engine.h"
26 #define LOG_TAG_STT TAG_STTE
29 /** Internal data structure **/
32 stte_request_callback_s *callback;
36 /** Static variables **/
38 static sttengine_s *g_engine = NULL;
39 static bool g_is_from_lib = false;
40 static char* g_audio_type = NULL;
42 /* Callback functions */
43 static stt_engine_result_cb g_result_cb = NULL;
44 static stte_private_data_set_cb g_set_private_data_cb = NULL;
45 static stte_private_data_requested_cb g_get_private_data_cb = NULL;
46 static stte_audio_type_cb g_set_audio_type_cb = NULL;
47 static void* g_set_audio_type_user_data = NULL;
50 /** Static function **/
51 static int __stt_set_engine_from(bool is_from_lib)
53 g_is_from_lib = is_from_lib;
57 static bool __stt_get_engine_from(void)
62 static const char* __stt_get_engine_error_code(stte_error_e err)
65 case STTE_ERROR_NONE: return "STTE_ERROR_NONE";
66 case STTE_ERROR_OUT_OF_MEMORY: return "STTE_ERROR_OUT_OF_MEMORY";
67 case STTE_ERROR_IO_ERROR: return "STTE_ERROR_IO_ERROR";
68 case STTE_ERROR_INVALID_PARAMETER: return "STTE_ERROR_INVALID_PARAMETER";
69 case STTE_ERROR_NETWORK_DOWN: return "STTE_ERROR_NETWORK_DOWN";
70 case STTE_ERROR_PERMISSION_DENIED: return "STTE_ERROR_PERMISSION_DENIED";
71 case STTE_ERROR_NOT_SUPPORTED: return "STTE_ERROR_NOT_SUPPORTED";
72 case STTE_ERROR_INVALID_STATE: return "STTE_ERROR_INVALID_STATE";
73 case STTE_ERROR_INVALID_LANGUAGE: return "STTE_ERROR_INVALID_LANGUAGE";
74 case STTE_ERROR_OPERATION_FAILED: return "STTE_ERROR_OPERATION_FAILED";
75 case STTE_ERROR_NOT_SUPPORTED_FEATURE: return "STTE_ERROR_NOT_SUPPORTED_FEATURE";
76 case STTE_ERROR_RECORDING_TIMED_OUT: return "STTE_ERROR_RECORDING_TIMED_OUT";
78 return "Invalid error code";
83 /** Public function **/
84 /* Register engine id */
85 int stt_engine_load(const char* filepath, stte_request_callback_s *callback)
87 RETVM_IF(NULL == callback || NULL == filepath, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
89 /* allocation memory */
90 if (NULL != g_engine) {
91 SLOG(LOG_WARN, TAG_STTE, "[Engine WARNING] engine is already loaded");
93 g_engine = (sttengine_s*)calloc(1, sizeof(sttengine_s));
94 if (NULL == g_engine) {
95 SLOG(LOG_ERROR, TAG_STTE, "[ERROR] Fail to allocate memory");
96 return STTE_ERROR_OUT_OF_MEMORY;
100 g_engine->callback = callback;
101 g_engine->engine_path = strdup(filepath);
104 SLOG(LOG_DEBUG, TAG_STTE, "[Engine Success] Load engine : version(%d)", g_engine->callback->version);
109 /* Unregister engine id */
110 int stt_engine_unload()
112 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
114 g_engine->callback = NULL;
116 if (NULL != g_engine->engine_path) {
117 free(g_engine->engine_path);
118 g_engine->engine_path = NULL;
128 /* Initialize / Deinitialize */
129 int stt_engine_initialize(bool is_from_lib)
131 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
132 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
133 RETVM_IF(NULL == g_engine->callback->initialize, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
136 ret = __stt_set_engine_from(is_from_lib);
138 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to set engine : %s", __stt_get_engine_error_code(ret));
139 return STTE_ERROR_OPERATION_FAILED;
142 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] request to initialize");
144 ret = g_engine->callback->initialize();
146 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to initialize : %s", __stt_get_engine_error_code(ret));
152 int stt_engine_deinitialize()
154 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
155 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
156 RETVM_IF(NULL == g_engine->callback->deinitialize, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
158 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] request to deinitialize");
161 ret = g_engine->callback->deinitialize();
163 SLOG(LOG_WARN, TAG_STTE, "[Engine WARNING] Fail to deinitialize : %s", __stt_get_engine_error_code(ret));
169 static bool __supported_language_cb(const char* language, void* user_data)
171 GSList** lang_list = (GSList**)user_data;
173 if (NULL == language || NULL == lang_list) {
174 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Input parameter is NULL in callback!!!!");
178 char* temp_lang = g_strdup(language);
180 *lang_list = g_slist_append(*lang_list, temp_lang);
186 int stt_engine_get_supported_langs(GSList** lang_list)
188 RETVM_IF(NULL == lang_list, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
189 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
190 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
191 RETVM_IF(NULL == g_engine->callback->foreach_langs, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
194 ret = g_engine->callback->foreach_langs(__supported_language_cb, (void*)lang_list);
196 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] get language list error : %s", __stt_get_engine_error_code(ret));
202 int stt_engine_is_valid_language(const char* language, bool *is_valid)
204 RETVM_IF(NULL == language || NULL == is_valid, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
205 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
206 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
207 RETVM_IF(NULL == g_engine->callback->is_valid_lang, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
209 int ret = STTE_ERROR_NONE;
210 ret = g_engine->callback->is_valid_lang(language, is_valid);
212 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to check valid language(%d)", ret);
217 int stt_engine_set_private_data(const char* key, const char* data)
219 RETVM_IF(NULL == key || NULL == data, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
221 int ret = STTE_ERROR_NONE;
222 if (NULL != g_set_private_data_cb) {
223 ret = g_set_private_data_cb(key, data);
225 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to set private data(%d)", ret);
232 int stt_engine_get_private_data(const char* key, char** data)
234 RETVM_IF(NULL == key || NULL == data, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
236 int ret = STTE_ERROR_NONE;
238 if (NULL != g_get_private_data_cb) {
239 ret = g_get_private_data_cb(key, &temp);
241 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to get private data(%d)", ret);
245 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] There's no private data function)");
249 *data = strdup("NULL");
251 *data = strdup(temp);
253 return STTE_ERROR_NONE;
256 int stt_engine_get_first_language(char** language)
258 RETVM_IF(NULL == language, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
259 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
260 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
261 RETVM_IF(NULL == g_engine->callback->foreach_langs || NULL == g_engine->callback->is_valid_lang, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
263 GSList* lang_list = NULL;
265 ret = g_engine->callback->foreach_langs(__supported_language_cb, &lang_list);
267 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] get language list error : %s", __stt_get_engine_error_code(ret));
273 iter = g_slist_nth(lang_list, 0);
275 char* data = iter->data;
277 bool is_valid = false;
278 ret = g_engine->callback->is_valid_lang(data, &is_valid);
279 if (0 == ret && true == is_valid) {
280 *language = strdup(data);
282 ret = STTE_ERROR_OPERATION_FAILED;
286 /* if list have item */
287 if (g_slist_length(lang_list) > 0) {
288 /* Get a first item */
289 iter = g_slist_nth(lang_list, 0);
291 while (NULL != iter) {
292 char* data = iter->data;
299 lang_list = g_slist_remove_link(lang_list, iter);
301 iter = g_slist_nth(lang_list, 0);
308 int stt_engine_support_silence(bool* support)
310 RETVM_IF(NULL == support, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
311 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
312 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
313 RETVM_IF(NULL == g_engine->callback->support_silence, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
315 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] request to support silence");
318 result = g_engine->callback->support_silence();
321 return STTE_ERROR_NONE;
324 int stt_engine_need_app_credential(bool* need)
326 RETVM_IF(NULL == need, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
327 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
328 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
329 RETVM_IF(NULL == g_engine->callback->need_app_credential, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
331 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] request to need app credential");
334 result = g_engine->callback->need_app_credential();
337 return STTE_ERROR_NONE;
340 int stt_engine_support_recognition_type(const char* type, bool* support)
342 RETVM_IF(NULL == type || NULL == support, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
343 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
344 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
345 RETVM_IF(NULL == g_engine->callback->support_recognition_type, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
347 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] request to support recognition type, type(%s)", type);
349 int ret = STTE_ERROR_NONE;
350 ret = g_engine->callback->support_recognition_type(type, support);
352 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to get supporting recognition type(%d)", ret);
357 int stt_engine_get_audio_format(stte_audio_type_e* types, int* rate, int* channels)
359 RETVM_IF(NULL == types || NULL == rate || NULL == channels, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
360 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
361 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
362 RETVM_IF(NULL == g_engine->callback->get_audio_format, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
364 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] request to get audio format");
367 ret = g_engine->callback->get_audio_format(types, rate, channels);
369 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to get audio format : %s", __stt_get_engine_error_code(ret));
376 int stt_engine_set_silence_detection(bool value)
378 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
379 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
380 RETVM_IF(NULL == g_engine->callback->set_silence_detection, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
382 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] request to set silence detection(%d)", value);
384 int ret = g_engine->callback->set_silence_detection(value);
385 if (STTE_ERROR_NOT_SUPPORTED_FEATURE == ret) {
386 SLOG(LOG_WARN, TAG_STTE, "[Engine WARNING] Not support silence detection");
387 } else if (0 != ret) {
388 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to set silence detection : %d", ret);
393 int stt_engine_check_app_agreed(const char* appid, bool* is_agreed)
395 RETVM_IF(NULL == is_agreed, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid parameter");
396 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
397 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
399 if (NULL == g_engine->callback->check_app_agreed) {
400 SLOG(LOG_WARN, TAG_STTE, "[Engine WARNING] Not support app agreement. All app is available");
405 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] request to app agreed, appid(%s), is_agreed(%d)", appid, *is_agreed);
407 int ret = g_engine->callback->check_app_agreed(appid, is_agreed);
409 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to get app agreement : %s", __stt_get_engine_error_code(ret));
417 int stt_engine_recognize_start(const char* lang, const char* recognition_type, const char* appid, const char* credential, void* user_param)
419 RETVM_IF(NULL == lang || NULL == recognition_type, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
420 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
421 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
422 RETVM_IF(NULL == g_engine->callback->start, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
424 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] request to start, lang(%s), recognition_type(%s), credential(%s)", lang, recognition_type, credential);
426 int ret = g_engine->callback->start(lang, recognition_type, appid, credential, user_param);
429 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to start recognition : %s", __stt_get_engine_error_code(ret));
430 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to start recognition : lang(%s), recognition_type(%s), credential(%s)", lang, recognition_type, credential);
436 int stt_engine_set_recording_data(const void* data, unsigned int length)
438 RETVM_IF(NULL == data, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
439 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
440 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
441 RETVM_IF(NULL == g_engine->callback->set_recording, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
443 int ret = g_engine->callback->set_recording(data, length);
445 SLOG(LOG_WARN, TAG_STTE, "[Engine WARNING] Fail to set recording : %s", __stt_get_engine_error_code(ret));
451 int stt_engine_recognize_stop()
453 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
454 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
455 RETVM_IF(NULL == g_engine->callback->stop, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
457 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] request to stop");
459 int ret = g_engine->callback->stop();
461 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to stop : %s", __stt_get_engine_error_code(ret));
467 int stt_engine_recognize_cancel()
469 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
470 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
471 RETVM_IF(NULL == g_engine->callback->cancel, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
473 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] request to cancel");
475 int ret = g_engine->callback->cancel();
477 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to cancel : %s", __stt_get_engine_error_code(ret));
483 int stt_engine_foreach_result_time(void* time_info, stte_result_time_cb callback, void* user_data)
485 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
486 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
487 RETVM_IF(NULL == g_engine->callback->foreach_result_time, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
489 int ret = g_engine->callback->foreach_result_time(time_info, callback, user_data);
491 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to foreach result time : %s", __stt_get_engine_error_code(ret));
497 int stt_engine_recognize_start_file(const char* lang, const char* recognition_type,
498 const char* filepath, stte_audio_type_e audio_type, int sample_rate, void* user_param)
500 RETVM_IF(NULL == filepath || NULL == lang || NULL == recognition_type, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
501 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
502 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
504 #ifdef __UNUSED_CODES__
505 if (NULL == g_engine->callback->start_file) {
506 SLOG(LOG_WARN, TAG_STTE, "[Engine WARNING] engine API is invalid");
507 return STTE_ERROR_NOT_SUPPORTED_FEATURE;
510 int ret = g_engine->callback->start_file(lang, recognition_type, filepath, audio_type, sample_rate, user_param);
512 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to start file recognition : %s", __stt_get_engine_error_code(ret));
518 int stt_engine_recognize_cancel_file()
520 RETVM_IF(NULL == g_engine, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] No engine");
521 RETVM_IF(NULL == g_engine->callback, STTE_ERROR_OPERATION_FAILED, "[Engine ERROR] Invalid engine");
523 #ifdef __UNUSED_CODES__
524 if (NULL == g_engine->callback->cancel_file) {
525 SLOG(LOG_WARN, TAG_STTE, "[Engine WARNING] engine API is invalid");
526 return STTE_ERROR_NOT_SUPPORTED_FEATURE;
529 int ret = g_engine->callback->cancel_file();
531 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to start file recognition : %s", __stt_get_engine_error_code(ret));
537 int stt_engine_set_recognition_result_cb(stt_engine_result_cb result_cb, void* user_data)
539 RETVM_IF(NULL == result_cb, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
541 g_result_cb = result_cb;
546 int stt_engine_get_recognition_result_cb(stt_engine_result_cb* result_cb)
548 RETVM_IF(NULL == result_cb, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
550 if (false == __stt_get_engine_from()) {
551 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Engine is not loaded from file");
552 return STTE_ERROR_NOT_SUPPORTED;
555 *result_cb = g_result_cb;
556 return STTE_ERROR_NONE;
559 int stt_engine_set_private_data_set_cb(stte_private_data_set_cb private_data_set_cb, void* user_data)
561 RETVM_IF(NULL == private_data_set_cb, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
563 g_set_private_data_cb = private_data_set_cb;
568 int stt_engine_set_private_data_requested_cb(stte_private_data_requested_cb private_data_requested_cb, void* user_data)
570 RETVM_IF(NULL == private_data_requested_cb, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
572 g_get_private_data_cb = private_data_requested_cb;
577 int stt_engine_get_audio_type(char** audio_type)
579 RETVM_IF(NULL == audio_type, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
581 if (NULL != g_audio_type) {
582 *audio_type = strdup(g_audio_type);
583 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] get audio type(%s)", *audio_type);
585 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] Audio type is null");
588 return STTE_ERROR_NONE;
591 int stt_engine_set_audio_type(const char* audio_type)
593 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] set audio type (%s)", audio_type);
595 if (NULL != g_audio_type && NULL != audio_type && 0 == strncmp(audio_type, g_audio_type, STT_MAX_TYPE_LENGTH)) {
596 SLOG(LOG_INFO, TAG_STTE, "[Engine Info] Audio type is not changed(%s)", g_audio_type);
597 return STTE_ERROR_NONE;
600 int ret = STTE_ERROR_NONE;
601 if (NULL != g_set_audio_type_cb && NULL != audio_type) {
602 ret = g_set_audio_type_cb(audio_type, g_set_audio_type_user_data);
603 if (STTE_ERROR_NONE != ret) {
604 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] Fail to set audio type, ret(%d)", ret);
607 SLOG(LOG_ERROR, TAG_STTE, "[Engine ERROR] There's no set audio function)");
610 if (NULL != g_audio_type) {
615 if (NULL != audio_type) {
616 g_audio_type = strdup(audio_type);
622 int stt_engine_set_audio_type_set_cb(stte_audio_type_cb audio_type_set_cb, void* user_data)
624 RETVM_IF(NULL == audio_type_set_cb, STTE_ERROR_INVALID_PARAMETER, "[Engine ERROR] Invalid Parameter");
626 g_set_audio_type_cb = audio_type_set_cb;
627 g_set_audio_type_user_data = user_data;
632 int stt_engine_unset_audio_type_set_cb(void)
634 g_set_audio_type_cb = NULL;
635 g_set_audio_type_user_data = NULL;