From 2868fe3df4e92a6ae3e327faf6e57ea492e04124 Mon Sep 17 00:00:00 2001
From: 志浩 <neo.dzh@alibaba-inc.com>
Date: 星期四, 16 三月 2023 19:24:21 +0800
Subject: [PATCH] Merge branch 'main' into dev_dzh

---
 funasr/runtime/onnxruntime/src/librapidasrapi.cpp |  210 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 210 insertions(+), 0 deletions(-)

diff --git a/funasr/runtime/onnxruntime/src/librapidasrapi.cpp b/funasr/runtime/onnxruntime/src/librapidasrapi.cpp
new file mode 100644
index 0000000..1f8f7ca
--- /dev/null
+++ b/funasr/runtime/onnxruntime/src/librapidasrapi.cpp
@@ -0,0 +1,210 @@
+#include "precomp.h"
+#ifdef __cplusplus 
+
+extern "C" {
+#endif
+
+
+	// APIs for qmasr
+	_RAPIDASRAPI RPASR_HANDLE  RapidAsrInit(const char* szModelDir, int nThreadNum)
+	{
+
+
+		Model* mm = create_model(szModelDir, nThreadNum); 
+
+		return mm;
+	}
+
+
+	_RAPIDASRAPI RPASR_RESULT RapidAsrRecogBuffer(RPASR_HANDLE handle, const char* szBuf, int nLen, RPASR_MODE Mode, QM_CALLBACK fnCallback)
+	{
+
+
+		Model* pRecogObj = (Model*)handle;
+
+		if (!pRecogObj)
+			return nullptr;
+
+		Audio audio(1);
+		audio.loadwav(szBuf,nLen);
+		audio.split();
+
+		float* buff;
+		int len;
+		int flag=0;
+		RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT;
+		pResult->snippet_time = audio.get_time_len();
+		int nStep = 0;
+		int nTotal = audio.get_queue_size();
+		while (audio.fetch(buff, len, flag) > 0) {
+			pRecogObj->reset();
+			string msg = pRecogObj->forward(buff, len, flag);
+			pResult->msg += msg;
+			nStep++;
+			if (fnCallback)
+				fnCallback(nStep, nTotal);
+		}
+
+
+		return pResult;
+	}
+
+	_RAPIDASRAPI RPASR_RESULT RapidAsrRecogPCMBuffer(RPASR_HANDLE handle, const char* szBuf, int nLen, RPASR_MODE Mode, QM_CALLBACK fnCallback)
+	{
+
+		Model* pRecogObj = (Model*)handle;
+
+		if (!pRecogObj)
+			return nullptr;
+
+		Audio audio(1);
+		audio.loadpcmwav(szBuf, nLen);
+		audio.split();
+
+		float* buff;
+		int len;
+		int flag = 0;
+		RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT;
+		pResult->snippet_time = audio.get_time_len();
+		int nStep = 0;
+		int nTotal = audio.get_queue_size();
+		while (audio.fetch(buff, len, flag) > 0) {
+			pRecogObj->reset();
+			string msg = pRecogObj->forward(buff, len, flag);
+			pResult->msg += msg;
+			nStep++;
+			if (fnCallback)
+				fnCallback(nStep, nTotal);
+		}
+
+
+		return pResult;
+
+	}
+
+	_RAPIDASRAPI RPASR_RESULT RapidAsrRecogPCMFile(RPASR_HANDLE handle, const char* szFileName, RPASR_MODE Mode, QM_CALLBACK fnCallback)
+	{
+
+		Model* pRecogObj = (Model*)handle;
+
+		if (!pRecogObj)
+			return nullptr;
+
+		Audio audio(1);
+		audio.loadpcmwav(szFileName);
+		audio.split();
+
+		float* buff;
+		int len;
+		int flag = 0;
+		RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT;
+		pResult->snippet_time = audio.get_time_len();
+		int nStep = 0;
+		int nTotal = audio.get_queue_size();
+		while (audio.fetch(buff, len, flag) > 0) {
+			pRecogObj->reset();
+			string msg = pRecogObj->forward(buff, len, flag);
+			pResult->msg += msg;
+			nStep++;
+			if (fnCallback)
+				fnCallback(nStep, nTotal);
+		}
+
+
+		return pResult;
+
+	}
+
+	_RAPIDASRAPI RPASR_RESULT RapidAsrRecogFile(RPASR_HANDLE handle, const char* szWavfile, RPASR_MODE Mode, QM_CALLBACK fnCallback)
+	{
+		Model* pRecogObj = (Model*)handle;
+
+		if (!pRecogObj)
+			return nullptr;
+
+		Audio audio(1);
+		if(!audio.loadwav(szWavfile))
+			return nullptr;
+		audio.split();
+
+		float* buff;
+		int len;
+		int flag = 0;
+		int nStep = 0;
+		int nTotal = audio.get_queue_size();
+		RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT;
+		pResult->snippet_time = audio.get_time_len();
+		while (audio.fetch(buff, len, flag) > 0) {
+			pRecogObj->reset();
+			string msg = pRecogObj->forward(buff, len, flag);
+			pResult->msg+= msg;
+			nStep++;
+			if (fnCallback)
+				fnCallback(nStep, nTotal);
+		}
+	
+	
+
+
+		return pResult;
+	}
+
+	_RAPIDASRAPI const int RapidAsrGetRetNumber(RPASR_RESULT Result)
+	{
+		if (!Result)
+			return 0;
+
+		return 1;
+		
+	}
+
+
+	_RAPIDASRAPI const float RapidAsrGetRetSnippetTime(RPASR_RESULT Result)
+	{
+		if (!Result)
+			return 0.0f;
+
+		return ((RPASR_RECOG_RESULT*)Result)->snippet_time;
+
+	}
+
+	_RAPIDASRAPI const char* RapidAsrGetResult(RPASR_RESULT Result,int nIndex)
+	{
+		RPASR_RECOG_RESULT * pResult = (RPASR_RECOG_RESULT*)Result;
+		if(!pResult)
+			return nullptr;
+
+		return pResult->msg.c_str();
+	
+	}
+
+	_RAPIDASRAPI void RapidAsrFreeResult(RPASR_RESULT Result)
+	{
+
+		if (Result)
+		{
+			delete (RPASR_RECOG_RESULT*)Result;
+
+		}
+	}
+
+	_RAPIDASRAPI void RapidAsrUninit(RPASR_HANDLE handle)
+	{
+
+		Model* pRecogObj = (Model*)handle;
+
+
+		if (!pRecogObj)
+			return;
+
+		delete pRecogObj;
+
+	}
+
+
+
+#ifdef __cplusplus 
+
+}
+#endif
+

--
Gitblit v1.9.1