예제 #1
0
        /// <summary>
        /// 口语题
        /// </summary>
        /// <param name="answers"></param>
        public void AutoScore()
        {
            GlobalUser.DoneScore = ScoreType.NoScore;//正在评分

            #region << Start 参数 >>

            BaseEngineStartUpParameter startParameter = null;

            startParameter = GetStartParam();

            startParameter.audioType  = "wav";//"mp3";
            startParameter.sampleRate = 16000;
            startParameter.compress   = "raw";

            #endregion

            //引擎的启动
            var rec = string.Empty;
            callback = ScoreCallBack;
            ES.Start(startParameter, ref rec, callback, IntPtr.Zero, "user");

            using (Stream str = new FileStream(ExamScore.WaveFileName, FileMode.Open, FileAccess.Read))
            {
                var headBuffer = new byte[44];

                var buffer = new byte[1024];
                //var mm = new MemoryStream();
                var len = 0;

                str.Read(headBuffer, 0, headBuffer.Length);//读取前44字节

                while ((len = str.Read(buffer, 0, buffer.Length)) > 0)
                {
                    //mm.Write(buffer, 0, len);
                    ES.Feed(buffer);
                }
            }
            ES.Stop();
        }
예제 #2
0
        /// <summary>
        /// 口语题
        /// </summary>
        /// <param name="answers"></param>
        public void AutoScore()
        {
            if (ExamScore == null || string.IsNullOrEmpty(ExamScore.WaveFileName) || !File.Exists(ExamScore.WaveFileName))
            {
                if (GlobalUser.ErrScoreInfo == null)
                {
                    GlobalUser.ErrScoreInfo = new Dictionary <string, ExamScoreNavigateMessage>();
                }
                if (!GlobalUser.ErrScoreInfo.ContainsKey(ExamScore?.WaveFileName))
                {
                    ExamScore.SubmitNum = 999;
                    GlobalUser.ErrScoreInfo.Add(ExamScore.WaveFileName, ExamScore);
                }
                else
                {
                    GlobalUser.ErrScoreInfo[ExamScore.WaveFileName].SubmitNum = 999;
                }

                GlobalUser.DoneScore = ScoreType.ScoreFailure;
                return;
            }

            if (GlobalUser.DoneScore == ScoreType.Scoring)
            {
                if (GlobalUser.ErrScoreInfo == null)
                {
                    GlobalUser.ErrScoreInfo = new Dictionary <string, ExamScoreNavigateMessage>();
                }
                if (!GlobalUser.ErrScoreInfo.ContainsKey(ExamScore?.WaveFileName))
                {
                    ExamScore.SubmitNum = 1;
                    GlobalUser.ErrScoreInfo.Add(ExamScore.WaveFileName, ExamScore);
                }
                else
                {
                    GlobalUser.ErrScoreInfo[ExamScore.WaveFileName].SubmitNum = 999;
                }
                return;
            }


            GlobalUser.DoneScore = ScoreType.Scoring;//正在评分

            #region << Start 参数 >>

            BaseEngineStartUpParameter startParameter = null;

            startParameter = GetStartParam();

            startParameter.audioType  = "wav";//"mp3";
            startParameter.sampleRate = 16000;
            startParameter.compress   = "raw";

            #endregion

            //引擎的启动
            var rec = string.Empty;
            callback = ScoreCallBack;
            ES.Start(startParameter, ref rec, callback, IntPtr.Zero, GlobalUser.USER.Mobile ?? "YYS_PC_User");

            using (Stream str = new FileStream(ExamScore.WaveFileName, FileMode.Open, FileAccess.Read))
            {
                var headBuffer = new byte[44];

                var buffer = new byte[1024];
                //var mm = new MemoryStream();
                var len = 0;

                str.Read(headBuffer, 0, headBuffer.Length);//读取前44字节

                while ((len = str.Read(buffer, 0, buffer.Length)) > 0)
                {
                    //mm.Write(buffer, 0, len);
                    ES.Feed(buffer);
                }
            }
            ES.Stop();
        }
예제 #3
0
 internal static extern int skegn_start(IntPtr engine, string param, byte[] id,
                                        [MarshalAs(UnmanagedType.FunctionPtr)] EngineDelegete.EngineCallback callback,
                                        IntPtr userdata);
예제 #4
0
        public virtual int Start(BaseEngineStartUpParameter parameter, ref string recId, EngineDelegete.EngineCallback callback, IntPtr userdata, string userID = null)
        {
            var engineParameter = WrapParameter(parameter, userID);
            var param           = JsonConvert.SerializeObject(engineParameter,
                                                              Formatting.Indented,
                                                              new JsonSerializerSettings {
                NullValueHandling = NullValueHandling.Ignore
            });
            var id     = new byte[64];
            var result = skegn_start(EngineInstance, param, id, callback, userdata);

            recId = Encoding.ASCII.GetString(id).Replace("\0", string.Empty);
            //Log4NetHelper.Info($"ID:{recId},param:{param}");
            recId = $"ID:{recId},param:{param}";
            return(result);
        }