From 03d4ce829814b4a7f57235fda049351c524ba32b Mon Sep 17 00:00:00 2001
From: zhifu gao <zhifu.gzf@alibaba-inc.com>
Date: 星期五, 17 三月 2023 14:06:56 +0800
Subject: [PATCH] Merge branch 'main' into dev_xw
---
funasr/runtime/onnxruntime/src/librapidasrapi.cpp | 213 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 213 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..f5f9d66
--- /dev/null
+++ b/funasr/runtime/onnxruntime/src/librapidasrapi.cpp
@@ -0,0 +1,213 @@
+#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);
+ if (!audio.loadwav(szBuf, nLen))
+ return nullptr;
+ //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);
+ if (!audio.loadpcmwav(szBuf, nLen))
+ return nullptr;
+ //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);
+ if (!audio.loadpcmwav(szFileName))
+ return nullptr;
+ //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