From beceb14feca0befb9a0f46a9fe3350546874f867 Mon Sep 17 00:00:00 2001
From: 雾聪 <wucong.lyb@alibaba-inc.com>
Date: 星期五, 01 九月 2023 16:58:22 +0800
Subject: [PATCH] fix fsmn-vad

---
 funasr/runtime/onnxruntime/src/funasrruntime.cpp |   45 +++++++++++++++++++++++++++++----------------
 funasr/runtime/onnxruntime/src/fsmn-vad.cpp      |    5 ++++-
 2 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/funasr/runtime/onnxruntime/src/fsmn-vad.cpp b/funasr/runtime/onnxruntime/src/fsmn-vad.cpp
index c009be2..fb79ad7 100644
--- a/funasr/runtime/onnxruntime/src/fsmn-vad.cpp
+++ b/funasr/runtime/onnxruntime/src/fsmn-vad.cpp
@@ -279,12 +279,15 @@
 FsmnVad::Infer(std::vector<float> &waves, bool input_finished) {
     std::vector<std::vector<float>> vad_feats;
     std::vector<std::vector<float>> vad_probs;
+    std::vector<std::vector<int>> vad_segments;
     FbankKaldi(vad_sample_rate_, vad_feats, waves);
+    if(vad_feats.size() == 0){
+      return vad_segments;
+    }
     LfrCmvn(vad_feats);
     Forward(vad_feats, &vad_probs, &in_cache_, input_finished);
 
     E2EVadModel vad_scorer = E2EVadModel();
-    std::vector<std::vector<int>> vad_segments;
     vad_segments = vad_scorer(vad_probs, waves, true, false, vad_silence_duration_, vad_max_len_,
                               vad_speech_noise_thres_, vad_sample_rate_);
     return vad_segments;
diff --git a/funasr/runtime/onnxruntime/src/funasrruntime.cpp b/funasr/runtime/onnxruntime/src/funasrruntime.cpp
index a10e3ec..207cf8b 100644
--- a/funasr/runtime/onnxruntime/src/funasrruntime.cpp
+++ b/funasr/runtime/onnxruntime/src/funasrruntime.cpp
@@ -224,12 +224,18 @@
 			return nullptr;
 
 		funasr::Audio audio(1);
-		if(wav_format == "pcm" || wav_format == "PCM"){
-			if (!audio.LoadPcmwav(sz_buf, n_len, &sampling_rate))
-				return nullptr;
-		}else{
-			if (!audio.FfmpegLoad(sz_buf, n_len))
-				return nullptr;
+		try{
+			if(wav_format == "pcm" || wav_format == "PCM"){
+				if (!audio.LoadPcmwav(sz_buf, n_len, &sampling_rate))
+					return nullptr;
+			}else{
+				if (!audio.FfmpegLoad(sz_buf, n_len))
+					return nullptr;
+			}
+		}catch (std::exception const &e)
+		{
+			LOG(ERROR)<<e.what();
+			return nullptr;
 		}
 
 		funasr::FUNASR_RECOG_RESULT* p_result = new funasr::FUNASR_RECOG_RESULT;
@@ -288,17 +294,24 @@
 			return nullptr;
 		
 		funasr::Audio audio(1);
-		if(funasr::is_target_file(sz_filename, "wav")){
-			int32_t sampling_rate_ = -1;
-			if(!audio.LoadWav(sz_filename, &sampling_rate_))
-				return nullptr;
-		}else if(funasr::is_target_file(sz_filename, "pcm")){
-			if (!audio.LoadPcmwav(sz_filename, &sampling_rate))
-				return nullptr;
-		}else{
-			if (!audio.FfmpegLoad(sz_filename))
-				return nullptr;
+		try{
+			if(funasr::is_target_file(sz_filename, "wav")){
+				int32_t sampling_rate_ = -1;
+				if(!audio.LoadWav(sz_filename, &sampling_rate_))
+					return nullptr;
+			}else if(funasr::is_target_file(sz_filename, "pcm")){
+				if (!audio.LoadPcmwav(sz_filename, &sampling_rate))
+					return nullptr;
+			}else{
+				if (!audio.FfmpegLoad(sz_filename))
+					return nullptr;
+			}
+		}catch (std::exception const &e)
+		{
+			LOG(ERROR)<<e.what();
+			return nullptr;
 		}
+		
 		funasr::FUNASR_RECOG_RESULT* p_result = new funasr::FUNASR_RECOG_RESULT;
 		p_result->snippet_time = audio.GetTimeLen();
 		if(p_result->snippet_time == 0){

--
Gitblit v1.9.1