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); } }
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); } }
/// <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); } }
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); } }
/// <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); } }
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); } }
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); } }