librpasrapi.cpp 2.28 KB
Newer Older
SWHL's avatar
SWHL committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "precomp.h"

#ifdef __cplusplus 

extern "C" {
#endif


	// APIs for rapidasr


	_RAPIDASRAPI RAPIDASR_HANDLE RpASR_init(const char* szModelDir,int nThread)
	{
		
		CQmASRRecog* pObj = new CQmASRRecog(szModelDir, nThread);
		if (pObj)
		{
			if (pObj->IsLoaded())
				return pObj;
			else
				delete pObj;

		}
	
		return nullptr;
	}


	_RAPIDASRAPI RAPIDASR_RESULT RpASRRecogBuffer(RAPIDASR_HANDLE handle, const char* szBuf, int nLen, RAPIDASR_MODE Mode)
	{

		
		CQmASRRecog* pRecogObj = (CQmASRRecog*)handle;

		if (!pRecogObj)
			return nullptr;
		vector<float>  wav;
	
		wenet::WavReaderMem Reader(szBuf,nLen, wav);

		assert(Reader.sample_rate() == Reader.sample_rate());
		wenet::FeaturePipelineConfig config(QM_FEATURE_DIMENSION, QM_DEFAULT_SAMPLE_RATE); 
		vector<vector<float>> feats;
		if (pRecogObj->ExtractFeature(wav, feats, config) > 0)
			return pRecogObj->DoRecognize(feats, Mode);
		else
			return nullptr;
	}

	_RAPIDASRAPI RAPIDASR_RESULT RpASRRecogFile(RAPIDASR_HANDLE handle, const char* szWavfile, RAPIDASR_MODE Mode)
	{
		CQmASRRecog* pRecogObj = (CQmASRRecog*)handle;

		if (!pRecogObj)
			return nullptr;
				
		vector<float>  wav;
		wenet::WavReader Reader(szWavfile, wav);
		assert(Reader.sample_rate() == Reader.sample_rate());
		wenet::FeaturePipelineConfig config(QM_FEATURE_DIMENSION, Reader.sample_rate());
		vector<vector<float>> feats;
		if (pRecogObj->ExtractFeature(wav, feats,config) > 0)
			return pRecogObj->DoRecognize(feats,Mode);
		else
			return nullptr;
	}

	_RAPIDASRAPI const int RpASRGetRetNumber(RAPIDASR_RESULT Result)
	{
		if (!Result)
			return 0;
		PRAPIDASR_RECOG_RESULT pResult = (PRAPIDASR_RECOG_RESULT)Result;
		return pResult->Strings.size();
		
	}
	_RAPIDASRAPI const char* RpASRGetResult(RAPIDASR_RESULT Result,int nIndex)
	{
		PRAPIDASR_RECOG_RESULT pResult = (PRAPIDASR_RECOG_RESULT)Result;
		if(!pResult)
			return nullptr;
		if (nIndex >= pResult->Strings.size())
			return nullptr;
		return pResult->Strings[nIndex].c_str();
	}

	_RAPIDASRAPI void RpASRFreeResult(RAPIDASR_RESULT Result)
	{

		if (Result)
		{
			delete PRAPIDASR_RECOG_RESULT(Result);

		}
	}

	_RAPIDASRAPI void RpASR_Uninit(RAPIDASR_HANDLE handle)
	{

		CQmASRRecog* pRecogObj = (CQmASRRecog*)handle;

		if (!pRecogObj)
			return;

		delete pRecogObj;

	}



#ifdef __cplusplus 

}
#endif