Exemple #1
0
        static async void TTS()
        {
            string str = "量子论是现代物理学的两大基石之一。" +
                         "量子论给我们提供了新的关于自然界的表述方法和思考方法。" +
                         "量子论揭示了微观物质世界的基本规律,为原子物理学、固体物理学、核物理学和粒子物理学奠定了理论基础。" +
                         "它能很好地解释原子结构、原子光谱的规律性、化学元素的性质、光的吸收与辐射等。";

            try
            {
                TTSApi tts = new ApiBuilder()
                             .WithAppSettings(new AppSettings()
                {
                    ApiKey    = "7b845bf729c3eeb97be6de4d29e0b446",
                    ApiSecret = "50c591a9cde3b1ce14d201db9d793b01",
                    AppID     = "5c56f257"
                })
                             .UseError((sender, e) =>
                {
                    Console.WriteLine(e.Message);
                })
                             .UseMessage((sender, e) =>
                {
                    try
                    {
                        byte[] buffer = Convert.FromBase64String(e);
                        Play(new CacheBuffer(buffer));
                    }
                    catch { }
                })
                             .BuildTTS();

                ResultModel <byte[]> result = await tts.Convert(str);

                if (result.Code == ResultCode.Success)
                {
                    //结束标识
                    Play(new CacheBuffer(null, true));
                    Console.WriteLine($"[{DateTime.Now.ToString()}]本次识别完成...");
                }
                else
                {
                    Console.WriteLine("\n错误:" + result.Message);
                }

                while (_status)
                {
                    await Task.Delay(10);
                }
                Console.WriteLine($"[{DateTime.Now.ToString()}]结束...");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Exemple #2
0
        static async void TTS()
        {
            string str = @"两只黄鹂鸣翠柳,一行白鹭上青天";

            try
            {
                TTSApi tts = new ApiBuilder()
                             .WithAppSettings(new AppSettings()
                {
                    ApiKey    = "7b845bf729c3eeb97be6de4d29e0b446",
                    ApiSecret = "50c591a9cde3b1ce14d201db9d793b01",
                    AppID     = "5c56f257"
                })
                             .UseError((sender, e) =>
                {
                    Console.WriteLine(e.Message);
                })
                             .UseMessage((sender, e) =>
                {
                    Console.WriteLine("结果:" + e.Substring(0, 20) + "...");      //Base64的结果。没显示完
                })
                             .BuildTTS();

                ResultModel <byte[]> result = await tts.Convert(str);

                if (result.Code == ResultCode.Success)
                {
                    //注意:转换后的结果为16K的单声道原始音频,可以使用ffmpeg来测试播放。
                    string path = Path.Combine(Environment.CurrentDirectory, "test.pcm");
                    using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write))
                    {
                        fs.Write(result.Data, 0, result.Data.Length);
                        fs.Flush();
                    }
                    if (File.Exists(path))
                    {
                        Console.WriteLine("保存成功!");
                    }
                    else
                    {
                        Console.WriteLine("保存失败!");
                    }
                }
                else
                {
                    Console.WriteLine("\n错误:" + result.Message);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Exemple #3
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);
            }
        }
Exemple #4
0
        static async void ASR()
        {
            string path = @"03.pcm";  //测试文件路径,自己修改

            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();

                ResultModel <string> result = await iat.Convert(data);

                if (result.Code == ResultCode.Success)
                {
                    Console.WriteLine("\n识别结果:" + result.Data);
                }
                else
                {
                    Console.WriteLine("\n识别错误:" + result.Message);
                }

                sw.Stop();
                Console.WriteLine($"总共花费{sw.Elapsed.TotalSeconds}秒。");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Exemple #5
0
        /// <summary>
        /// 使用TTS时必须添加IP白名单
        /// </summary>
        static async void TTS()
        {
            string str = @"两只黄鹂鸣翠柳,一行白鹭上青天";

            try
            {
                TTSApi tts = new ApiBuilder()
                             .WithAppSettings(new AppSettings()
                {
                    //不同类型接口APIKey不一样,比如ASR和TTS的WebApi接口APIKey是不一样的
                    ApiKey = "a8fae54d39911418e8501e97e783878f",
                    AppID  = "5c56f257"
                })
                             .WithSavePath("test.wav")
                             .BuildTTS();

                ResultModel <MemoryStream> result = await tts.Convert(str);

                if (result.Code == ResultCode.Success)
                {
                    File.WriteAllBytes("test.wav", await StreamToByte(result.Data));
                    string path = Environment.CurrentDirectory + "\\" + "test.wav";
                    if (File.Exists(path))
                    {
                        Console.WriteLine("保存成功!");
                    }
                }
                else
                {
                    Console.WriteLine("\n错误:" + result.Message);
                }

                //或者直接采用ConvertAndSave方法
                //ResultModel<string> result = await iat.ConvertAndSave(str);
                //if (result.Code == ResultCode.Success)
                //{
                //    Console.WriteLine("\n保存成功:" + result.Data);
                //}
                //else
                //{
                //    Console.WriteLine("\n错误:" + result.Message);
                //}
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
        static async void TTS()
        {
            string str = @"正在为您查询合肥的天气情况。今天是2020年2月24日,合肥市今天多云,最低温度9摄氏度,最高温度15摄氏度,微风。";

            try
            {
                TTSApi tts = new ApiBuilder()
                             .WithAppSettings(new AppSettings()
                {
                    ApiKey    = "7b845bf729c3eeb97be6de4d29e0b446",
                    ApiSecret = "50c591a9cde3b1ce14d201db9d793b01",
                    AppID     = "5c56f257"
                })
                             //设置发音人
                             .WithVcn("xiaoyan")
                             //设置音量
                             .WithVolume(50)
                             //设置语速
                             .WithSpeed(50)
                             .UseError((sender, e) =>
                {
                    Console.WriteLine(e.Message);
                })
                             .UseMessage((sender, e) =>
                {
                    Console.WriteLine("结果:" + e.Substring(0, 20) + "...");      //Base64的结果。没显示完
                })
                             .BuildTTS();

                ResultModel <byte[]> result = await tts.Convert(str);

                if (result.Code == IflySdk.Enum.ResultCode.Success)
                {
                    //注意:转换后的结果为16K的单声道原始音频,可以使用ffmpeg来测试播放。
                    string path = Path.Combine(Environment.CurrentDirectory, "test.pcm");
                    using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write))
                    {
                        fs.Write(result.Data, 0, result.Data.Length);
                        fs.Flush();
                    }
                    if (File.Exists(path))
                    {
                        //转pcm为wav格式
                        PcmToWav pcm = new PcmToWav();
                        pcm.ConverterToWav(path);

                        Console.WriteLine("保存成功!");
                    }
                    else
                    {
                        Console.WriteLine("保存失败!");
                    }
                }
                else
                {
                    Console.WriteLine("\n错误:" + result.Message);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }