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