void feed_audio_data(wakeup_speech_streaming_event_e event, void* buffer, int len);
void finalize_audio_data();
+ void clear_audio_data();
void start_streaming_current_utterance_data(long start_time = 0);
void stop_streaming_current_utterance_data();
}
}
+void CAudioManager::clear_audio_data()
+{
+ lock_guard<mutex> lock(mMutex);
+
+ for (const auto &data : mAudioData) {
+ if (data.data.buffer) free(data.data.buffer);
+ }
+ mAudioData.clear();
+}
+
void CAudioManager::notify_audio_data_recording(long time, void* data, int len)
{
for (const auto& observer : mObservers) {
if (mStreamingThread.joinable()) {
MWR_LOGD("mStreamingThread is joinable, trying join()");
mStopStreamingThread.store(true);
- mStreamingThread.join();
+ try {
+ mStreamingThread.join();
+ } catch (std::exception &e) {
+ MWR_LOGE("Exception thrown : %s", e.what());
+ }
}
mStopStreamingThread.store(false);
if (mStreamingPreviousThread.joinable()) {
MWR_LOGD("mStreamingPreviousThread is joinable, trying join()");
mStopStreamingPreviousThread.store(true);
- mStreamingPreviousThread.join();
+ try {
+ mStreamingPreviousThread.join();
+ } catch (std::exception &e) {
+ MWR_LOGE("Exception thrown : %s", e.what());
+ }
}
mStopStreamingThread.store(false);
}
stop_streaming_utterance_data();
stop_streaming_previous_utterance_data();
stop_streaming_follow_up_data();
+
+ mAudioManager.clear_audio_data();
change_manager_state(WAKEUP_MANAGER_STATE_UTTERANCE);
mVoiceKeyPressed = true;
event_info.wakeup_end_time = get_current_milliseconds_after_epoch();
event_info.wakeup_engine = WAKEUP_ENGINE_VOICE_KEY;
- static string appid = mWakeupSettings.get_default_assistant_appid();
+ string appid = mWakeupSettings.get_default_assistant_appid();
event_info.wakeup_appid = appid.c_str();
MWR_LOGD("wakeup_appid : %s", event_info.wakeup_appid);
if (false == engine_manager->get_audio_data_required()) return false;
- engine_manager->engine_feed_audio_data(time, data, len);
+ if (mWakeupManager->get_voice_key_pressed() != true) {
+ engine_manager->engine_feed_audio_data(time, data, len);
+ }
return true;
}
} else {
MWR_LOGI("[INFO] No service streaming callback");
}
-}
\ No newline at end of file
+}
return ret;
}
+static Eina_Bool handle_speech_streaming_event_failure(void *data)
+{
+ mas_client_send_recognition_result(0, MA_RECOGNITION_RESULT_EVENT_ERROR);
+ return ECORE_CALLBACK_CANCEL;
+}
+
static void __audio_streaming_cb(wakeup_speech_streaming_event_e event, unsigned char* buffer, int len, void *user_data)
{
if (event == WAKEUP_SPEECH_STREAMING_EVENT_FAIL) {
- mas_client_send_recognition_result(0, MA_RECOGNITION_RESULT_EVENT_ERROR);
+ ecore_thread_main_loop_begin();
+ ecore_timer_add(0.0f, handle_speech_streaming_event_failure, NULL);
+ ecore_thread_main_loop_begin();
return;
}
static int count = 0;