Skip to content
This repository was archived by the owner on May 2, 2024. It is now read-only.

Commit 29e3502

Browse files
committed
update functions to better correspond to doc
1 parent b906077 commit 29e3502

File tree

7 files changed

+158
-54
lines changed

7 files changed

+158
-54
lines changed

MSP_CMN.py

Lines changed: 75 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ def __init__(self, dll_path=None, appID=None):
1616
appID = APP_ID
1717
self.dll = cdll.LoadLibrary(dll_path)
1818
self.appID = appID
19+
20+
self.login_params = {
21+
'appid': self.appID
22+
}
23+
1924
self.set_arg_types()
2025
self.set_res_type()
2126

@@ -26,14 +31,39 @@ def set_arg_types(self):
2631
def set_res_type(self):
2732
self.dll.MSPGetVersion.restype = c_char_p
2833

29-
def Login(self):
30-
loginParams = "appid={}".format(self.appID)
31-
loginParams = bytes(loginParams, encoding="utf8")
32-
ret = self.dll.MSPLogin(None, None, loginParams)
34+
def Login(self, params=None):
35+
"""MSPLogin
36+
37+
Args:
38+
params (dict or str, optional): params 参数. 默认使用 self.params
39+
40+
Raises:
41+
RuntimeError: MSPLogin failed
42+
"""
43+
if params is None:
44+
params = self.login_params
45+
if type(params) is dict:
46+
params = ','.join(['{}={}'.format(k, v) for k, v in params.items()])
47+
if type(params) is str:
48+
params = params.encode('utf8')
49+
ret = self.dll.MSPLogin(None, None, params)
3350
if MSP_SUCCESS != ret:
3451
raise RuntimeError("MSPLogin failed, error code is: %d", ret)
3552

3653
def UploadData(self, data_name, data, params):
54+
"""MSPUploadData
55+
56+
Args:
57+
data_name (str): dataName, 数据名称
58+
data (bytes): 上传数据
59+
params (dict or str): params 参数
60+
61+
Raises:
62+
RuntimeError: MSPUploadData failed
63+
64+
Returns:
65+
None: 上传成功后,联系人/用户词表功能返回 NULL
66+
"""
3767
# NOT TESTED.
3868
if type(data_name) is not bytes:
3969
data_name = data_name.encode('utf8')
@@ -45,16 +75,30 @@ def UploadData(self, data_name, data, params):
4575
error_code = c_int()
4676
ret = self.dll.MSPUploadData(data_name, data, data_len, params, byref(error_code))
4777
if MSP_SUCCESS != error_code.value:
48-
raise RuntimeError('MSPUploadData failed. error code: %d' % error_code.value)
78+
raise RuntimeError('MSPUploadData failed, error code: %d' % error_code.value)
4979
return ret
5080

5181

5282
def Logout(self):
83+
"""MSPLogout
84+
85+
Raises:
86+
RuntimeError: MSPLogout failed
87+
"""
5388
ret = self.dll.MSPLogout()
5489
if MSP_SUCCESS != ret:
5590
raise RuntimeError("MSPLogout failed, error code is: %d", ret)
5691

5792
def SetParam(self, params_name, params_value):
93+
"""MSPSetParam
94+
95+
Args:
96+
params_name (str or bytes): paramsName, 参数名
97+
params_value (str or bytes): paramsValue, 参数值
98+
99+
Raises:
100+
RuntimeError: [description]
101+
"""
58102
if type(params_name) is not bytes:
59103
params_name = bytes(params_name, encoding='utf8')
60104
if type(params_value) is not bytes:
@@ -64,6 +108,18 @@ def SetParam(self, params_name, params_value):
64108
raise RuntimeError("MSPSetParam failed, error code: %d" % ret)
65109

66110
def GetParam(self, param_name):
111+
"""MSPGetParam
112+
113+
Args:
114+
param_name (str or bytes): paramName, 参数名
115+
116+
Raises:
117+
ValueError: 参数名错误
118+
RuntimeError: MSPGetParam failed
119+
120+
Returns:
121+
str: 参数值
122+
"""
67123
# NOT WORKING!!!
68124
if type(param_name) is not bytes:
69125
param_name = param_name.encode('utf8')
@@ -74,17 +130,29 @@ def GetParam(self, param_name):
74130
ret = self.dll.MSPGetParam(param_name, param_value, byref(param_len))
75131
if MSP_SUCCESS != ret:
76132
raise RuntimeError("MSPGetParam failed, error code: %d" % ret)
77-
return read_charp_with_len(param_value, param_len)
133+
return read_charp_with_len(param_value, param_len).decode('utf8')
78134

79135
def GetVersion(self, ver_name):
136+
"""MSPGetVersion, 获取 MSC 或本地引擎版本信息
137+
138+
Args:
139+
ver_name (str or byte): verName, 参数名
140+
141+
Raises:
142+
ValueError: 参数名错误
143+
RuntimeError: MSPGetVersion failed
144+
145+
Returns:
146+
str: 参数值
147+
"""
80148
if type(ver_name) is not bytes:
81149
ver_name = ver_name.encode('utf8')
82150
if ver_name.decode('utf8') not in ['ver_msc', 'ver_asr', 'ver_tts', 'ver_ivw']:
83151
raise ValueError("ver_name can only be: 'ver_msc', 'ver_asr', 'ver_tts' or 'ver_ivw'")
84152
error_code = c_int()
85153
ret = self.dll.MSPGetVersion(ver_name, byref(error_code))
86154
if MSP_SUCCESS != error_code.value:
87-
raise RuntimeError("MSPGetVersion failed. error code: %d" % error_code.value)
155+
raise RuntimeError("MSPGetVersion failed, error code: %d" % error_code.value)
88156
return ret.decode('utf8')
89157

90158
if __name__ == '__main__':

MSP_TYPES.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
# 状态值
1+
# 宏定义变量
2+
SAMPLE_RATE_8K = 8000
3+
SAMPLE_RATE_16K = 16000
24

35
# ret code
46
MSP_SUCCESS = 0 # 通用成功标记

QISR.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,8 @@ def __init__(self, dll: CDLL, recorder: Recorder, asr_res_path=None, grm_file=No
3232
self.asr_res_path = asr_res_path
3333
self.grm_build_path = grm_build_path
3434
self.grm_file = grm_file
35-
36-
self.sessionID_local = c_void_p()
37-
self.sessionID_cloud = c_void_p()
38-
self._session_valid_local = False
39-
self._session_valid_cloud = False
35+
self.sessionID = c_char_p()
36+
self._session_valid = False
4037

4138
self.asr_data = UserData()
4239
memset(addressof(self.asr_data), 0, sizeof(self.asr_data))
@@ -146,7 +143,7 @@ def set_res_type(self):
146143
self.dll.QISRGetResult.restype = c_char_p
147144

148145
def SessionBegin(self, params=None):
149-
"""QISRSessionBegin
146+
"""QISRSessionBegin, 开始一次语音识别。
150147
151148
Args:
152149
params (dict or str, optional): SessionBegin 所需的参数. 默认使用 self.begin_params.
@@ -172,10 +169,10 @@ def SessionBegin(self, params=None):
172169
return self.sessionID
173170

174171
def SessionEnd(self, hints="End session"):
175-
"""QISRSessionEnd
172+
"""QISRSessionEnd, 结束本次语音识别。
176173
177174
Args:
178-
hints (str, optional): EndSession 的 hints 参数. Defaults to "End session".
175+
hints (str, optional): 结束本次语音识别的原因描述,为用户自定义内容. Defaults to "End session".
179176
180177
Raises:
181178
RuntimeError: QISREndSession failed.
@@ -189,7 +186,7 @@ def SessionEnd(self, hints="End session"):
189186
self._session_valid = False
190187

191188
def BuildGrammar(self, grammar_type='bnf', grammar_content=None, params=None, callback=None):
192-
"""QISRBuildGrammar
189+
"""QISRBuildGrammar, 构建语法,生成语法ID。
193190
194191
Args:
195192
grammar_type (str, optional): grammarType. Defaults to 'bnf'.
@@ -232,7 +229,7 @@ def BuildGrammar(self, grammar_type='bnf', grammar_content=None, params=None, ca
232229
return self.asr_data
233230

234231
def UpdateLexicon(self, lex_name, lex_content, params=None, callback=None):
235-
"""QISRUpdateLexicon
232+
"""QISRUpdateLexicon, 更新本地语法词典。
236233
237234
Args:
238235
lex_name (str): lexiconName, 词典名称
@@ -266,7 +263,7 @@ def UpdateLexicon(self, lex_name, lex_content, params=None, callback=None):
266263
return self.asr_data
267264

268265
def AudioWrite(self, audio_data, audio_status):
269-
"""QISRAudioWrite
266+
"""QISRAudioWrite, 写入本次识别的音频。
270267
271268
Args:
272269
audio_data (bytes or None): 音频字节流或 None
@@ -294,7 +291,7 @@ def AudioWrite(self, audio_data, audio_status):
294291
return ep_status, rslt_status
295292

296293
def GetResult(self):
297-
"""QISRGetResult
294+
"""QISRGetResult, 获取识别结果。
298295
299296
Raises:
300297
RuntimeError: QISRGetResult failed

QIVW.py

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def py_ivw_callback(sessionID, msg, param1, param2, info, userData):
5252
# 标记为已被唤醒
5353
self.awoken = True
5454

55-
self.pIVWCallbackFunc = py_ivw_callback
55+
self.ivw_cb = py_ivw_callback
5656
self.set_arg_types()
5757
self.set_res_type()
5858

@@ -66,7 +66,7 @@ def set_res_type(self):
6666
self.dll.QIVWSessionBegin.restype = c_char_p
6767

6868
def SessionBegin(self, params=None):
69-
"""QIVWSessionBegin 的实现
69+
"""QIVWSessionBegin, 唤醒功能,并在参数中指定唤醒(唤醒+识别时)用到的语法列表,本次唤醒所用的参数等。
7070
7171
Args:
7272
params (dict or str, optional): params 参数. 默认使用 self.begin_params
@@ -75,7 +75,7 @@ def SessionBegin(self, params=None):
7575
RuntimeError: QIVWSessionBegin failed.
7676
7777
Returns:
78-
bytes: SessionID
78+
str: SessionID
7979
"""
8080
if params is None:
8181
params = self.begin_params
@@ -89,24 +89,52 @@ def SessionBegin(self, params=None):
8989
if MSP_SUCCESS != error_code.value:
9090
raise RuntimeError("QIVWSessionBegin failed, error code %d" % error_code.value)
9191
self._session_valid = True
92-
return self.sessionID
92+
return self.sessionID.decode('utf8')
9393

9494
def RegisterNotify(self, sessionID=None, msg_proc_cb=None, user_data=None):
95+
"""QIVWRegisterNotify, 注册回调。
96+
97+
Args:
98+
sessionID (bytes, optional): sessionID. 默认使用 self.sessionID
99+
msg_proc_cb (c_void_p, optional): 回调函数. 默认使用 self.ivw_cb
100+
user_data (UserData, optional): 用户数据. Defaults to None.
101+
102+
Raises:
103+
RuntimeError: [description]
104+
"""
95105
if not sessionID:
96106
sessionID = self.sessionID
97107
assert sessionID is not None, 'SessionID is None'
98108
if not msg_proc_cb:
99-
msg_proc_cb = self.pIVWCallbackFunc
109+
msg_proc_cb = self.ivw_cb
100110
ret = self.dll.QIVWRegisterNotify(sessionID, msg_proc_cb, user_data)
101111
if MSP_SUCCESS != ret:
102112
raise RuntimeError("QIVWRegisterNotify failed, error code: %d" % ret)
103113

104-
def AudioWrite(self, audioData, audioLen, audio_status=2):
105-
ret = self.dll.QIVWAudioWrite(self.sessionID, audioData, audioLen, audio_status)
114+
def AudioWrite(self, audio_data, audio_status=2):
115+
"""QIVWAudioWrite, 写入本次唤醒的音频,本接口需要反复调用直到音频写完为止。
116+
117+
Args:
118+
audioData (bytes): 要写入的音频数据
119+
audio_status (int, optional): 用来告知MSC音频发送是否完成. Defaults to 2.
120+
121+
Raises:
122+
RuntimeError: [description]
123+
"""
124+
audio_len = len(audio_data)
125+
ret = self.dll.QIVWAudioWrite(self.sessionID, audio_data, audio_len, audio_status)
106126
if MSP_SUCCESS != ret:
107127
raise RuntimeError("QIVWAudioWrite failed, errCode: %d", ret)
108128

109129
def SessionEnd(self, hints="Done wakeup"):
130+
"""QIVWSessionEnd, 结束本次语音唤醒。
131+
132+
Args:
133+
hints (str, optional): 结束本次语音唤醒的原因描述,为用户自定义内容. Defaults to "Done wakeup".
134+
135+
Raises:
136+
RuntimeError: QIVWSessionEnd failed
137+
"""
110138
if type(hints) is str:
111139
hints = hints.encode('utf8')
112140
ret = self.dll.QIVWSessionEnd(self.sessionID, hints)
@@ -128,7 +156,7 @@ def wakeup(self):
128156
while not self.awoken:
129157
audioData = self.recorder.get_record_audio()
130158
audioLen = len(audioData)
131-
self.AudioWrite(audioData, audioLen)
159+
self.AudioWrite(audioData)
132160
self.awoken = False
133161

134162
self.SessionEnd()

0 commit comments

Comments
 (0)