public static string CloudRecogFreeTalk(byte[] data, int data_len) { byte[] data1 = new byte[data_len]; Array.Copy((Array)data, (Array)data1, data_len); string str = ""; AsrVoiceCheckResult check_result = new AsrVoiceCheckResult(); string config1 = "vadhead=10000,vadtail=500,audioFormat=pcm16k16bit"; ASR_Recog.VoiceCheck(ASR_Recog.session_id_novad, data1, data_len, ref check_result, config1); if (check_result.eStatus != AsrVoiceCheckStatus.VAD_VOICE_END) { return(str); } byte[] voice_data1 = new byte[ASR_Recog.cur_len]; Array.Copy((Array)ASR_Recog.vad_check_audiodata, (Array)voice_data1, ASR_Recog.cur_len); ASR_Recog.cur_len = 0; string config2 = "addPunc=yes,realtime=yes,vadhead=20000,vadtail=600,"; AsrRecogResult result = new AsrRecogResult(); HciErrorCode hciErrorCode1 = HciCloudAsr.HciAsrRecog(ASR_Recog.session_id_novad, ref voice_data1, config2, (string)null, ref result); if (hciErrorCode1 == HciErrorCode.HCI_ERR_NONE) { Console.WriteLine("HciCloudAsr HciAsrRecog Success"); Console.WriteLine("psResultItemList count " + (object)result.psResultItemList.Count); foreach (AsrRecogResultItem asrRecogResultItem in (IEnumerable <AsrRecogResultItem>)result.psResultItemList) { Console.WriteLine("pszResult: " + asrRecogResultItem.pszResult); str = str + asrRecogResultItem.pszResult; } } else { Console.WriteLine("HciCloudAsr HciAsrRecog 出错: " + (object)hciErrorCode1); } byte[] voice_data2 = (byte[])null; HciErrorCode hciErrorCode2 = HciCloudAsr.HciAsrRecog(ASR_Recog.session_id_novad, ref voice_data2, config2, (string)null, ref result); if (hciErrorCode2 == HciErrorCode.HCI_ERR_NONE) { Console.WriteLine("HciCloudAsr HciAsrRecog Success"); Console.WriteLine("psResultItemList count " + (object)result.psResultItemList.Count); foreach (AsrRecogResultItem asrRecogResultItem in (IEnumerable <AsrRecogResultItem>)result.psResultItemList) { Console.WriteLine("pszResult: " + asrRecogResultItem.pszResult); str = str + asrRecogResultItem.pszResult; } return(str); } else { Console.WriteLine("HciCloudAsr HciAsrRecog 出错: " + (object)hciErrorCode2); return(str); } }
private static void VoiceCheck(int nSessionId, byte[] data, int data_len, ref AsrVoiceCheckResult check_result, string config) { AsrVoiceCheckFlag flag = AsrVoiceCheckFlag.CHECK_FLAG_BEGIN; if (ASR_Recog.cur_len + data_len > ASR_Recog.vad_check_audiodata_len) { check_result.eStatus = AsrVoiceCheckStatus.VAD_VOICE_END; } else { data.CopyTo((Array)ASR_Recog.vad_check_audiodata, ASR_Recog.cur_len); ASR_Recog.cur_len += data_len; byte[] voice_data = new byte[ASR_Recog.cur_len]; Array.Copy((Array)ASR_Recog.vad_check_audiodata, (Array)voice_data, ASR_Recog.cur_len); AsrVoiceCheckStatus voiceCheckStatus = AsrVoiceCheckStatus.VAD_DETECTING; HciCloudAsr.HciAsrVoiceCheck(nSessionId, flag, voice_data, config, ref check_result); if (voiceCheckStatus == check_result.eStatus) { return; } if (check_result.eStatus == AsrVoiceCheckStatus.VAD_DETECTING) { Console.WriteLine("检测中"); } if (check_result.eStatus == AsrVoiceCheckStatus.VAD_USER_STOP) { Console.WriteLine("用户终止音频输入"); } if (check_result.eStatus == AsrVoiceCheckStatus.VAD_BUFF_FULL) { Console.WriteLine("缓冲区满"); } if (check_result.eStatus == AsrVoiceCheckStatus.VAD_VOICE_BEGIN) { Console.WriteLine("检测到开始端点"); } if (check_result.eStatus == AsrVoiceCheckStatus.VAD_VOICE_END) { Console.WriteLine("检测到结束端点"); } if (check_result.eStatus == AsrVoiceCheckStatus.VAD_NO_VOICE_INPUT) { Console.WriteLine("没有发现音频输入(开始静音时间太长)"); } } }