public void 输入数据(byte[] __数据) { if (_会话 == IntPtr.Zero || _任务状态 != E任务状态.运行中) { Debug.Write("X"); return; } var __识别状态 = E识别状态.正在识别中; if (_检测状态 == E检测状态.等待输入) { Debug.Write(">"); DLL接口.QISRAudioWrite(_会话, __数据, (uint)__数据.Length, E音频块位置.第一块, ref _检测状态, ref __识别状态); } else if (_检测状态 == E检测状态.处理中) { Debug.Write(">"); DLL接口.QISRAudioWrite(_会话, __数据, (uint)__数据.Length, E音频块位置.中间, ref _检测状态, ref __识别状态); } else { Debug.Write("X"); } //Debug.Write(_检测状态 + "," + _识别状态); }
public void 结束() { DLL接口.QISRAudioWrite(_会话, null, 0, E音频块位置.最后一块, ref _检测状态, ref _识别状态); _任务状态 = E任务状态.停止中; }
void 识别() { while (_任务状态 == E任务状态.运行中) { int __结果 = 0; try { _会话 = DLL接口.QISRSessionBegin(获取语法id(), 获取识别参数(), ref __结果); //重新开始会话 } catch (Exception ex) { Debug.WriteLine("开启会话出错: " + ex); Thread.Sleep(300); continue; } _检测状态 = E检测状态.等待输入; _识别状态 = E识别状态.正在识别中; if (__结果 != 0) { Debug.WriteLine("开启会话出错, 错误码: " + __结果); Thread.Sleep(300); continue; } Debug.WriteLine("开启会话"); while (_任务状态 == E任务状态.运行中 && _识别状态 != E识别状态.识别结束 && _识别状态 != E识别状态.没有识别结果) { if (_检测状态 == E检测状态.等待输入) { Debug.Write("-"); Thread.Sleep(300); continue; } IntPtr __识别结果 = DLL接口.QISRGetResult(_会话, ref _识别状态, 0, ref __结果); //Debug.WriteLine("任务状态: {0}; 识别状态: {1}", _任务状态, _识别状态); if (__结果 == 0) { if (__识别结果 != IntPtr.Zero) { var __文本 = Marshal.PtrToStringAnsi(__识别结果); Debug.Write("\n识别出命令: " + Environment.NewLine + __文本 + Environment.NewLine); 分析识别结果(__文本); } Debug.Write("."); } else { Debug.WriteLine("\n识别出错: {0}", __结果); break; } Thread.Sleep(300); } Debug.WriteLineIf(_任务状态 != E任务状态.运行中 || _识别状态 != E识别状态.识别结束, string.Format("\n任务状态: {0}; 识别状态: {1}; 检测状态: {2}", _任务状态, _识别状态, _检测状态)); try { __结果 = DLL接口.QISRSessionEnd(_会话, null); } catch (Exception ex) { Debug.WriteLine(Environment.NewLine + "结束会话出错: " + ex + Environment.NewLine); } _会话 = IntPtr.Zero; if (__结果 == 0) { Debug.WriteLine(Environment.NewLine + "结束会话" + Environment.NewLine); } else { Debug.WriteLine(Environment.NewLine + "结束会话出错, 错误码: " + __结果 + Environment.NewLine); } } _任务状态 = E任务状态.停止; }