예제 #1
0
        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);
            }
        }
예제 #2
0
        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("没有发现音频输入(开始静音时间太长)");
                }
            }
        }