コード例 #1
0
        /// <summary>
        /// 实时识别,可以一边输入音频,一边进行语音识别。
        /// 整个会话时长最多持续60s,或者超过10s未发送数据服务器会自动断开连接。但是识别过程不会停止,会自动开启一个新的会话进行识别。
        ///
        /// 分片大小建议至少在3000以上。小于1000就可能影响到识别速率(也取决于输入频率)。
        /// </summary>
        static async void ASR()
        {
            string path      = @"02.pcm"; //测试文件路径,自己修改
            int    frameSize = 3200;

            byte[] data = File.ReadAllBytes(path);

            try
            {
                ASRApi iat = new ApiBuilder()
                             .WithAppSettings(new AppSettings()
                {
                    ApiKey    = "7b845bf729c3eeb97be6de4d29e0b446",
                    ApiSecret = "50c591a9cde3b1ce14d201db9d793b01",
                    AppID     = "5c56f257"
                })
                             .UseError((sender, e) =>
                {
                    Console.WriteLine("错误:" + e.Message);
                })
                             .UseMessage((sender, e) =>
                {
                    Console.WriteLine("实时结果:" + e);
                })
                             .BuildASR();

                //计算识别时间
                Stopwatch sw = new Stopwatch();
                sw.Start();

                for (int i = 0; i < data.Length; i += frameSize)
                {
                    //模拟说话暂停
                    await Task.Delay(100);

                    iat.Convert(SubArray(data, i, frameSize));
                }
                //结束本次会话
                iat.Stop();
                //等待本次会话结束
                while (iat.Status != ServiceStatus.Stopped)
                {
                    await Task.Delay(10);
                }
                sw.Stop();
                Console.WriteLine($"总共花费{Math.Round(sw.Elapsed.TotalSeconds, 2)}秒。");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: jsliugang/IflySdk
        static void ASRRecord()
        {
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();

                #region ASRApi

                ASRApi iat = new ApiBuilder()
                             .WithAppSettings(new AppSettings()
                {
                    ApiKey    = "7b845bf729c3eeb97be6de4d29e0b446",
                    ApiSecret = "50c591a9cde3b1ce14d201db9d793b01",
                    AppID     = "5c56f257"
                })
                             .WithVadEos(5000) //将静默检测超时设置为5s
                             .UseError((sender, e) =>
                {
                    Console.WriteLine("错误:" + e.Message);
                })
                             .UseMessage((sender, e) =>
                {
                    Console.WriteLine("实时结果:" + e);
                })
                             .BuildASR();

                #endregion

                #region Record

                using WaveInEvent wave  = new WaveInEvent();
                wave.WaveFormat         = new WaveFormat(16000, 1);
                wave.BufferMilliseconds = 50;
                wave.DataAvailable     += (s, a) =>
                {
                    byte[] buffer = SubArray(a.Buffer, 0, a.BytesRecorded);
                    iat.Convert(buffer);

                    if (sw.ElapsedMilliseconds / 1000 > 60)
                    {
                        wave.StopRecording();
                    }
                };
                wave.RecordingStopped += (s, a) =>
                {
                    Console.WriteLine("退出...");
                };
                Console.WriteLine("开始识别...");
                wave.StartRecording();

                //注册退出事件
                Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs eventArgs) =>
                {
                    bool state = iat.Stop();
                    if (state)
                    {
                        Console.WriteLine("语音识别已退出...");
                    }
                    wave.StopRecording();

                    Console.WriteLine("`C");
                };

                //等待识别开始
                while (iat.Status != ServiceStatus.Running)
                {
                    Thread.Sleep(10);
                }

                #endregion

                //等待本次会话结束
                while (iat.Status != ServiceStatus.Stopped)
                {
                    Thread.Sleep(10);  //注意:此处不能使用Task.Delay();
                }
                wave.Dispose();
                sw.Stop();
                Console.WriteLine($"总共花费{Math.Round(sw.Elapsed.TotalSeconds, 2)}秒。");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }