From: Shobhit Verma Date: Wed, 9 Aug 2023 10:01:41 +0000 (+0530) Subject: [ITC][stt][ACR-1782] Added Tcs for audio streaming APIs X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F45%2F297045%2F3;p=test%2Ftct%2Fnative%2Fapi.git [ITC][stt][ACR-1782] Added Tcs for audio streaming APIs Change-Id: I068a254f234606261f083ccefd602954c0e113bb Signed-off-by: Shobhit Verma --- diff --git a/scripts_tpk/spec.sh b/scripts_tpk/spec.sh old mode 100644 new mode 100755 index 0508e8376..31c9551d6 --- a/scripts_tpk/spec.sh +++ b/scripts_tpk/spec.sh @@ -517,6 +517,7 @@ case "$1" in chsmack -e "User::App::Shared" $APP_DATA_DIR cp start_sound.wav $APP_DATA_DIR/start_sound.wav cp stop_sound.wav $APP_DATA_DIR/stop_sound.wav + cp test_pcm.dat $APP_DATA_DIR/test_pcm.dat chown -R 5000:5000 $APP_DATA_DIR chmod -R 777 $APP_DATA_DIR chsmack -a "User::App::Shared" $APP_DATA_DIR/* diff --git a/src/itc/stt/ITs-stt-common.h b/src/itc/stt/ITs-stt-common.h index 460011ba7..0b0f19268 100755 --- a/src/itc/stt/ITs-stt-common.h +++ b/src/itc/stt/ITs-stt-common.h @@ -27,6 +27,7 @@ #include #include #include +#include /** @addtogroup itc-stt * @ingroup itc @@ -39,11 +40,13 @@ #define ENGINE_LEN 256 #define START_SOUND "start_sound.wav" #define STOP_SOUND "stop_sound.wav" +#define PCM_FILE "test_pcm.dat" #define TIME_LIMIT 20 #define MICROPHONE_FEATURE "http://tizen.org/feature/microphone" #define SPEECH_RECOGNITION_FEATURE "http://tizen.org/feature/speech.recognition" + bool g_bFeatureSupported; bool g_bFeatureMismatch; bool g_bFeatureNotSupported; diff --git a/src/itc/stt/ITs-stt.c b/src/itc/stt/ITs-stt.c index 2923631e4..688ca99d5 100755 --- a/src/itc/stt/ITs-stt.c +++ b/src/itc/stt/ITs-stt.c @@ -35,6 +35,13 @@ int g_nResultEventCount = 0; bool bCallbackResult = false; bool g_CallBackHit = false; + +static const char *TEST_LANGUAGE = "en_US"; +static const char *TEST_RECOG_TYPE = STT_RECOGNITION_TYPE_FREE_PARTIAL; +static char g_szTestPcmPath[1024]; +static char* g_szPcmData = NULL; +static size_t g_nPcmSize = 0; + /** * @function ITs_stt_startup * @description Called before each test @@ -304,10 +311,7 @@ bool stt_result_time_callback(stt_h stt, int index, stt_result_time_event_e even */ void stt_state_changed_callback(stt_h stt, stt_state_e previous, stt_state_e current, void *user_data) { -#if DEBUG FPRINTF("[Line : %d][%s] Reached stt_state_changed_callback\\n", __LINE__, API_NAMESPACE); -#endif - g_bStateCallbackOccurred = true; if(stt == NULL) @@ -788,6 +792,129 @@ void sttErrorCallback(stt_h stt, stt_error_e reason, void *user_data) } +int SttGetTestPcmFileData() +{ + FILE* fp_in = fopen(g_szTestPcmPath, "rb"); + if (fp_in == NULL) { + FPRINTF("[Line : %d][%s] Unable to open file: test_pcm.dat\\n", __LINE__, API_NAMESPACE); + return 1; + } + + fseek(fp_in, 0, SEEK_END); + long size = ftell(fp_in); + fseek(fp_in, 0, SEEK_SET); + if (size <= 0) { + fclose(fp_in); + return 1; + } + FPRINTF("[Line : %d][%s] File Size is: [%ld]\\n", __LINE__, API_NAMESPACE, size); + + char* data = (char *)calloc(sizeof(char), size); + if (NULL == data) { + fclose(fp_in); + return 1; + } + + size_t read_size = fread(data, sizeof(char), size, fp_in); + fclose(fp_in); + + if (read_size <= 0) { + free(data); + return 1; + } + FPRINTF("[Line : %d][%s] File Read Size is: [%d]\\n", __LINE__, API_NAMESPACE, read_size); + g_nPcmSize = size; + g_szPcmData = data; + return 0; +} + +static bool SttPrepareState(void) +{ + stt_state_e state = STT_STATE_CREATED; + stt_get_state(g_hStt, &state); + if (STT_STATE_CREATED != state) { + FPRINTF("[Line : %d][%s] Current state is not STT_STATE_CREATED\\n", __LINE__, API_NAMESPACE); + return false; + } + + int nRet = stt_set_state_changed_cb(g_hStt, stt_state_changed_callback, NULL); + if ( nRet != STT_ERROR_NONE ) + { + FPRINTF("[Line : %d][%s] stt_set_state_changed_cb failed, error returned = %s\\n", __LINE__, API_NAMESPACE, SttGetError(nRet)); + return false; + } + nRet = stt_prepare(g_hStt); + if ( nRet != STT_ERROR_NONE ) + { + FPRINTF("[Line : %d][%s] stt_prepare failed, error returned = %s\\n", __LINE__, API_NAMESPACE, SttGetError(nRet)); + return false; + } + WAIT_FOR_CALLBACK(STT_STATE_READY); + + stt_get_state(g_hStt, &state); + if (STT_STATE_READY != state) { + FPRINTF("[Line : %d][%s] After stt_prepare, current state is not STT_STATE_READY\\n", __LINE__, API_NAMESPACE); + return false; + } + return true; +} +static bool SttUnprepareState(void) +{ + stt_state_e state = STT_STATE_CREATED; + stt_get_state(g_hStt, &state); + if (STT_STATE_READY != state) { + return false; + } + + int nRet = stt_unprepare(g_hStt); + if ( nRet != STT_ERROR_NONE ) + { + FPRINTF("[Line : %d][%s] stt_unprepare failed, error returned = %s\\n", __LINE__, API_NAMESPACE, SttGetError(nRet)); + return false; + } + WAIT_FOR_CALLBACK(STT_STATE_CREATED); + + nRet = stt_unset_state_changed_cb(g_hStt); + if ( nRet != STT_ERROR_NONE ) + { + FPRINTF("[Line : %d][%s] Support API stt_unset_state_changed_cb failed on postcondition, error returned = %s\\n", __LINE__, API_NAMESPACE, SttGetError(nRet)); + return false; + } + return true; +} + +static bool SttSetPrivateDataMode(void) +{ + stt_state_e state = STT_STATE_CREATED; + stt_get_state(g_hStt, &state); + if (STT_STATE_READY != state) { + return false; + } + + int nRet = stt_set_private_data(g_hStt, "stt_verification", "true"); + if (STT_ERROR_NONE != nRet) { + FPRINTF("[Line : %d][%s] stt_set_private_data failed for true flag, error returned = %s\\n", __LINE__, API_NAMESPACE, SttGetError(nRet)); + return false; + } + return true; +} + +static bool SttUnsetPrivateDataMode(void) +{ + stt_state_e state = STT_STATE_CREATED; + stt_get_state(g_hStt, &state); + if (STT_STATE_READY != state) { + return false; + } + + int nRet = stt_set_private_data(g_hStt, "stt_verification", "false"); + if (STT_ERROR_NONE != nRet) { + FPRINTF("[Line : %d][%s] stt_set_private_data failed for false flag, error returned = %s\\n", __LINE__, API_NAMESPACE, SttGetError(nRet)); + return false; + } + return true; +} + /** @addtogroup itc-stt-testcases * @brief Integration testcases for module stt * @ingroup itc-stt @@ -2939,5 +3066,228 @@ int ITc_stt_set_unset_speech_status_cb_p(void) return 0; } + +//& purpose Start and Stop audio streaming +//& type: auto +/** +* @testcase ITc_stt_start_stop_audio_streaming_p +* @since_tizen 8.0 +* @author SRID(shobhit.v) +* @reviewer SRID(tarun1.kumar) +* @type auto +* @description Check Start and Stop audio streaming APIs +* @scenario Start and Stop audio streaming +* @apicovered stt_start_audio_streaming and stt_stop_audio_streaming +* @passcase If stt_start_audio_streaming and stt_stop_audio_streaming pass +* @failcase If any precondition API, stt_start_audio_streaming Or stt_stop_audio_streaming fails +* @precondition NA +* @postcondition NA +*/ +int ITc_stt_start_stop_audio_streaming_p(void) +{ + START_TEST; + + int nRet = -1; + stt_state_e nState; + + if (g_bFeatureSupported == false) + { + nRet = stt_start_audio_streaming(g_hStt, TEST_LANGUAGE, TEST_RECOG_TYPE); + PRINT_RESULT(STT_ERROR_NOT_SUPPORTED, nRet, "stt_start_audio_streaming", SttGetError(nRet)); + + nRet = stt_stop_audio_streaming(g_hStt); + PRINT_RESULT(STT_ERROR_NOT_SUPPORTED, nRet, "stt_stop_audio_streaming", SttGetError(nRet)); + return 0; + } + + if( SttPrepareState() == false) + { + FPRINTF("[Line : %d][%s] SttPrepareState failed\\n", __LINE__, API_NAMESPACE); + return 1; + } + if( SttSetPrivateDataMode() == false) + { + FPRINTF("[Line : %d][%s] SttSetPrivateDataMode failed\\n", __LINE__, API_NAMESPACE); + SttUnprepareState(); + return 1; + } + + nRet = stt_start_audio_streaming(g_hStt, TEST_LANGUAGE, TEST_RECOG_TYPE); + PRINT_RESULT_CLEANUP(STT_ERROR_NONE, nRet, "stt_start_audio_streaming", SttGetError(nRet), SttUnsetPrivateDataMode(); SttUnprepareState()); + FPRINTF("[Line : %d][%s] stt_start_audio_streaming Pass\\n", __LINE__, API_NAMESPACE); + + WAIT_FOR_CALLBACK(STT_STATE_RECORDING); + nRet = stt_get_state(g_hStt, &nState); + PRINT_RESULT_CLEANUP(STT_ERROR_NONE, nRet, "stt_get_state", SttGetError(nRet), SttUnsetPrivateDataMode(); SttUnprepareState()); + if ( nState != STT_STATE_RECORDING ) + { + FPRINTF("[Line : %d][%s] stt_start_audio_streaming failed as expected current state is not STT_STATE_RECORDING\\n", __LINE__, API_NAMESPACE); + SttUnsetPrivateDataMode(); + SttUnprepareState(); + return 1; + } + + nRet = stt_stop_audio_streaming(g_hStt); + PRINT_RESULT_CLEANUP(STT_ERROR_NONE, nRet, "stt_stop_audio_streaming", SttGetError(nRet), SttUnsetPrivateDataMode(); SttUnprepareState()); + FPRINTF("[Line : %d][%s] stt_stop_audio_streaming Pass\\n", __LINE__, API_NAMESPACE); + + WAIT_FOR_CALLBACK(STT_STATE_PROCESSING); + WAIT_FOR_CALLBACK(STT_STATE_READY); + + nRet = stt_get_state(g_hStt, &nState); + PRINT_RESULT_CLEANUP(STT_ERROR_NONE, nRet, "stt_get_state", SttGetError(nRet),SttUnsetPrivateDataMode();SttUnprepareState()); + if ( nState != STT_STATE_READY ) + { + FPRINTF("[Line : %d][%s] stt_stop_audio_streaming failed as expected current state is not STT_STATE_READY\\n", __LINE__, API_NAMESPACE); + SttUnsetPrivateDataMode(); + SttUnprepareState(); + return 1; + } + + SttUnsetPrivateDataMode(); + SttUnprepareState(); + + return 0; +} + + +//& purpose To get recognizable audio format information +//& type: auto +/** +* @testcase ITc_stt_get_audio_format_p +* @since_tizen 8.0 +* @author SRID(shobhit.v) +* @reviewer SRID(tarun1.kumar) +* @type auto +* @description Get recognizable audio format information +* @scenario Prepare state and get audio format information +* @apicovered stt_get_audio_format +* @passcase If stt_get_audio_format pass +* @failcase If stt_get_audio_format fail +* @precondition NA +* @postcondition NA +*/ +int ITc_stt_get_audio_format_p(void) +{ + START_TEST; + + int nRet = -1; + stt_audio_type_e type = STT_AUDIO_TYPE_RAW_S16; + int nRate = -1; + int nChannels = -1; + + if (g_bFeatureSupported == false) + { + nRet = stt_get_audio_format(g_hStt, &type, &nRate, &nChannels); + PRINT_RESULT(STT_ERROR_NOT_SUPPORTED, nRet, "stt_get_audio_format", SttGetError(nRet)); + return 0; + } + + if( SttPrepareState() == false) + { + FPRINTF("[Line : %d][%s] SttPrepareState failed\\n", __LINE__, API_NAMESPACE); + return 1; + } + nRet = stt_get_audio_format(g_hStt, &type, &nRate, &nChannels); + PRINT_RESULT_CLEANUP(STT_ERROR_NONE, nRet, "stt_get_audio_format", SttGetError(nRet), SttUnprepareState()); + if (nRate == -1 || nChannels == -1) + { + FPRINTF("[Line : %d][%s] stt_get_audio_format failed. Output parameter values are incorrect.\\n", __LINE__, API_NAMESPACE); + SttUnprepareState(); + return 1; + } + + SttUnprepareState(); + return 0; +} + + +//& purpose To send audio streaming data to service engine +//& type: auto +/** +* @testcase ITc_stt_send_audio_streaming_p +* @since_tizen 8.0 +* @author SRID(shobhit.v) +* @reviewer SRID(tarun1.kumar) +* @type auto +* @description To send audio streaming data to service engine +* @scenario Start audio streaming and Send audio streaming data +* @apicovered stt_start_audio_streaming and stt_send_audio_streaming +* @passcase If stt_start_audio_streaming and stt_send_audio_streaming pass +* @failcase If stt_start_audio_streaming or stt_send_audio_streaming fail +* @precondition NA +* @postcondition NA +*/ +int ITc_stt_send_audio_streaming_p(void) +{ + START_TEST; + + int nRet = -1; + stt_state_e nState; + stt_audio_type_e type = STT_AUDIO_TYPE_RAW_S16; + int nRate = -1; + int nChannels = -1; + + if (g_bFeatureSupported == false) + { + nRet = stt_send_audio_streaming(g_hStt, g_szPcmData, g_nPcmSize); + PRINT_RESULT(STT_ERROR_NOT_SUPPORTED, nRet, "stt_send_audio_streaming", SttGetError(nRet)); + return 0; + } + + if ( false == SttAppendToAppDataPath(PCM_FILE, g_szTestPcmPath) ) + { + FPRINTF("[Line : %d][%s] unable to get the app data path\\n", __LINE__, API_NAMESPACE); + return 1; + } + else + FPRINTF("[Line : %d][%s] PCM file path is: [%s]\\n", __LINE__, API_NAMESPACE, g_szTestPcmPath); + + nRet = SttGetTestPcmFileData(); + if (nRet == 1) + { + FPRINTF("[Line : %d][%s] Error in get pcm data.\\n", __LINE__, API_NAMESPACE); + return 1; + } + + if( SttPrepareState() == false) + { + FPRINTF("[Line : %d][%s] SttPrepareState failed\\n", __LINE__, API_NAMESPACE); + return 1; + } + if( SttSetPrivateDataMode() == false) + { + FPRINTF("[Line : %d][%s] SttSetPrivateDataMode failed\\n", __LINE__, API_NAMESPACE); + SttUnprepareState(); + return 1; + } + + nRet = stt_start_audio_streaming(g_hStt, TEST_LANGUAGE, TEST_RECOG_TYPE); + PRINT_RESULT_CLEANUP(STT_ERROR_NONE, nRet, "stt_start_audio_streaming", SttGetError(nRet),SttUnsetPrivateDataMode(); SttUnprepareState()); + FPRINTF("[Line : %d][%s] stt_start_audio_streaming Pass\\n", __LINE__, API_NAMESPACE); + + WAIT_FOR_CALLBACK(STT_STATE_RECORDING); + + nRet = stt_get_state(g_hStt, &nState); + PRINT_RESULT_CLEANUP(STT_ERROR_NONE, nRet, "stt_get_state", SttGetError(nRet),SttUnsetPrivateDataMode(); SttUnprepareState()); + if ( nState != STT_STATE_RECORDING ) + { + FPRINTF("[Line : %d][%s] stt_start_audio_streaming failed as expected current state is not STT_STATE_RECORDING\\n", __LINE__, API_NAMESPACE); + stt_stop_audio_streaming(g_hStt); + SttUnsetPrivateDataMode(); + SttUnprepareState(); + return 1; + } + + nRet = stt_send_audio_streaming(g_hStt, g_szPcmData, g_nPcmSize); + PRINT_RESULT_CLEANUP(STT_ERROR_NONE, nRet, "stt_send_audio_streaming", SttGetError(nRet),SttUnsetPrivateDataMode(); SttUnprepareState()); + FPRINTF("[Line : %d][%s] stt_send_audio_streaming Pass\\n", __LINE__, API_NAMESPACE); + + SttUnsetPrivateDataMode(); + SttUnprepareState(); + + return 0; +} + /** @} */ /** @} */ diff --git a/src/itc/stt/tct-stt-native_mobile.h b/src/itc/stt/tct-stt-native_mobile.h index 9f9d5b4ad..705e7f808 100755 --- a/src/itc/stt/tct-stt-native_mobile.h +++ b/src/itc/stt/tct-stt-native_mobile.h @@ -52,7 +52,9 @@ extern int ITc_stte_main_p(void); extern int ITc_stte_set_private_data_set_cb_p(void); extern int ITc_stte_set_private_data_requested_cb_p(void); extern int ITc_stte_set_unset_audio_type_set_cb_p(void); - +extern int ITc_stt_start_stop_audio_streaming_p(void); +extern int ITc_stt_get_audio_format_p(void); +extern int ITc_stt_send_audio_streaming_p(void); testcase tc_array[] = { {"ITc_stt_create_destroy_p",ITc_stt_create_destroy_p,ITs_stt_startup,ITs_stt_cleanup}, @@ -83,6 +85,9 @@ testcase tc_array[] = { {"ITc_stte_set_private_data_set_cb_p",ITc_stte_set_private_data_set_cb_p,ITs_stte_startup,ITs_stte_cleanup}, {"ITc_stte_set_private_data_requested_cb_p",ITc_stte_set_private_data_requested_cb_p,ITs_stte_startup,ITs_stte_cleanup}, {"ITc_stte_set_unset_audio_type_set_cb_p",ITc_stte_set_unset_audio_type_set_cb_p,ITs_stte_startup,ITs_stte_cleanup}, + {"ITc_stt_start_stop_audio_streaming_p",ITc_stt_start_stop_audio_streaming_p,ITs_stt_startup,ITs_stt_cleanup}, + {"ITc_stt_get_audio_format_p",ITc_stt_get_audio_format_p,ITs_stt_startup,ITs_stt_cleanup}, + {"ITc_stt_send_audio_streaming_p",ITc_stt_send_audio_streaming_p,ITs_stt_startup,ITs_stt_cleanup}, {NULL, NULL} }; diff --git a/src/itc/stt/tct-stt-native_tizeniot.h b/src/itc/stt/tct-stt-native_tizeniot.h index 7e12c26ff..705e7f808 100755 --- a/src/itc/stt/tct-stt-native_tizeniot.h +++ b/src/itc/stt/tct-stt-native_tizeniot.h @@ -52,6 +52,9 @@ extern int ITc_stte_main_p(void); extern int ITc_stte_set_private_data_set_cb_p(void); extern int ITc_stte_set_private_data_requested_cb_p(void); extern int ITc_stte_set_unset_audio_type_set_cb_p(void); +extern int ITc_stt_start_stop_audio_streaming_p(void); +extern int ITc_stt_get_audio_format_p(void); +extern int ITc_stt_send_audio_streaming_p(void); testcase tc_array[] = { {"ITc_stt_create_destroy_p",ITc_stt_create_destroy_p,ITs_stt_startup,ITs_stt_cleanup}, @@ -82,6 +85,9 @@ testcase tc_array[] = { {"ITc_stte_set_private_data_set_cb_p",ITc_stte_set_private_data_set_cb_p,ITs_stte_startup,ITs_stte_cleanup}, {"ITc_stte_set_private_data_requested_cb_p",ITc_stte_set_private_data_requested_cb_p,ITs_stte_startup,ITs_stte_cleanup}, {"ITc_stte_set_unset_audio_type_set_cb_p",ITc_stte_set_unset_audio_type_set_cb_p,ITs_stte_startup,ITs_stte_cleanup}, + {"ITc_stt_start_stop_audio_streaming_p",ITc_stt_start_stop_audio_streaming_p,ITs_stt_startup,ITs_stt_cleanup}, + {"ITc_stt_get_audio_format_p",ITc_stt_get_audio_format_p,ITs_stt_startup,ITs_stt_cleanup}, + {"ITc_stt_send_audio_streaming_p",ITc_stt_send_audio_streaming_p,ITs_stt_startup,ITs_stt_cleanup}, {NULL, NULL} }; diff --git a/src/itc/stt/tct-stt-native_tv.h b/src/itc/stt/tct-stt-native_tv.h index 029fc1153..b4eddcd54 100755 --- a/src/itc/stt/tct-stt-native_tv.h +++ b/src/itc/stt/tct-stt-native_tv.h @@ -49,7 +49,9 @@ extern int ITc_stte_main_p(void); extern int ITc_stte_set_private_data_set_cb_p(void); extern int ITc_stte_set_private_data_requested_cb_p(void); extern int ITc_stte_set_unset_audio_type_set_cb_p(void); - +extern int ITc_stt_start_stop_audio_streaming_p(void); +extern int ITc_stt_get_audio_format_p(void); +extern int ITc_stt_send_audio_streaming_p(void); testcase tc_array[] = { {"ITc_stt_create_destroy_p",ITc_stt_create_destroy_p,ITs_stt_startup,ITs_stt_cleanup}, @@ -77,6 +79,9 @@ testcase tc_array[] = { {"ITc_stte_set_private_data_set_cb_p",ITc_stte_set_private_data_set_cb_p,ITs_stte_startup,ITs_stte_cleanup}, {"ITc_stte_set_private_data_requested_cb_p",ITc_stte_set_private_data_requested_cb_p,ITs_stte_startup,ITs_stte_cleanup}, {"ITc_stte_set_unset_audio_type_set_cb_p",ITc_stte_set_unset_audio_type_set_cb_p,ITs_stte_startup,ITs_stte_cleanup}, + {"ITc_stt_start_stop_audio_streaming_p",ITc_stt_start_stop_audio_streaming_p,ITs_stt_startup,ITs_stt_cleanup}, + {"ITc_stt_get_audio_format_p",ITc_stt_get_audio_format_p,ITs_stt_startup,ITs_stt_cleanup}, + {"ITc_stt_send_audio_streaming_p",ITc_stt_send_audio_streaming_p,ITs_stt_startup,ITs_stt_cleanup}, {NULL, NULL} }; diff --git a/src/itc/stt/tct-stt-native_wearable.h b/src/itc/stt/tct-stt-native_wearable.h index 7e12c26ff..705e7f808 100755 --- a/src/itc/stt/tct-stt-native_wearable.h +++ b/src/itc/stt/tct-stt-native_wearable.h @@ -52,6 +52,9 @@ extern int ITc_stte_main_p(void); extern int ITc_stte_set_private_data_set_cb_p(void); extern int ITc_stte_set_private_data_requested_cb_p(void); extern int ITc_stte_set_unset_audio_type_set_cb_p(void); +extern int ITc_stt_start_stop_audio_streaming_p(void); +extern int ITc_stt_get_audio_format_p(void); +extern int ITc_stt_send_audio_streaming_p(void); testcase tc_array[] = { {"ITc_stt_create_destroy_p",ITc_stt_create_destroy_p,ITs_stt_startup,ITs_stt_cleanup}, @@ -82,6 +85,9 @@ testcase tc_array[] = { {"ITc_stte_set_private_data_set_cb_p",ITc_stte_set_private_data_set_cb_p,ITs_stte_startup,ITs_stte_cleanup}, {"ITc_stte_set_private_data_requested_cb_p",ITc_stte_set_private_data_requested_cb_p,ITs_stte_startup,ITs_stte_cleanup}, {"ITc_stte_set_unset_audio_type_set_cb_p",ITc_stte_set_unset_audio_type_set_cb_p,ITs_stte_startup,ITs_stte_cleanup}, + {"ITc_stt_start_stop_audio_streaming_p",ITc_stt_start_stop_audio_streaming_p,ITs_stt_startup,ITs_stt_cleanup}, + {"ITc_stt_get_audio_format_p",ITc_stt_get_audio_format_p,ITs_stt_startup,ITs_stt_cleanup}, + {"ITc_stt_send_audio_streaming_p",ITc_stt_send_audio_streaming_p,ITs_stt_startup,ITs_stt_cleanup}, {NULL, NULL} };