在C#中使用科大讯飞Web API进行语音合成
最近工作中需要用到讯飞语音合成接口,网上看了下基本都是Java,PHP,Python版本的,正好补上C# 版本,代码比较简单。
首先在讯飞开放平台上创建一个WebApi项目,取到APPID与APIKey,按官方文档提前准备好一个参数类备用,每个参数是什么意思,官方文档上有很详细的说明:
public class Parameter
{
public string auf { get; set; } = "audio/L16;rate=16000";
public string aue { get; set; } = "lame";
public string voice_name { get; set; } = "xiaoyan";
public string speed { get; set; } = "";
public string volume { get; set; } = "";
public string pitch { get; set; } = "";
public string engine_type { get; set; } = "intp65";
public string text_type { get; set; } = "text";
}
实例化一个Parameter并转换为Base64:
Parameter parameter = new Parameter();
var json_str = JsonConvert.SerializeObject(parameter);
var base64_str = Convert.ToBase64String(Encoding.UTF8.GetBytes(json_str));
分别创建一个HttpWebRequest与HttpWebResponse,并将请求方式设为POST:
HttpWebRequest httpwebrequest = null;
HttpWebResponse httpwebresponse = null;
httpwebrequest = (HttpWebRequest)WebRequest.Create("http://api.xfyun.cn/v1/service/v1/tts");
httpwebrequest.Method = "POST";
接下来按照文档设置一些必要参数及请求头部:
String t_s_1970 =TimestampSince1970;
String checksum = GetMD5("你的APIKey" +t_s_1970 + base64_str);//准备好一个checksum备用
httpwebrequest.Headers.Add("X-Param", base64_str);
httpwebrequest.Headers.Add("X-CurTime", t_s_1970);
httpwebrequest.Headers.Add("X-Appid", "你的APPID");
httpwebrequest.Headers.Add("X-CheckSum", checksum);
httpwebrequest.Headers.Add("X-Real-Ip", "127.0.0.1");
httpwebrequest.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
httpwebrequest.Headers.Add("charset", "utf-8");
上面准备好之后将要合成的内容写入到Body里,并获取返回结果:
using (Stream stream = httpwebrequest.GetRequestStream())
{
byte[] data = Encoding.UTF8.GetBytes("text=这是中国,那里也是中国。");//更改生成内容时,text= 要保留
stream.Write(data, , data.Length);
}
}
上面使用到的GetMD5与TimestampSince1970方法体为:
public static string GetMD5(string source, bool need16 = false, bool toUpper = false)
{
var t_toUpper = toUpper ? "X2" : "x2";
if (string.IsNullOrWhiteSpace(source))
{
return string.Empty;
}
string t_md5_code = string.Empty;
try
{
MD5 t_md5 = MD5.Create();
byte[] _t = t_md5.ComputeHash(Encoding.UTF8.GetBytes(source));
for (int i = ; i < _t.Length; i++)
{
t_md5_code += _t[i].ToString(t_toUpper);
}
if (need16)
{
t_md5_code = t_md5_code.Substring(, );
}
}
catch { }
return t_md5_code;
}
public static string TimestampSince1970
=> Convert.ToInt64((DateTime.UtcNow - new DateTime(, , , , , , )).TotalSeconds).ToString();
至此一个完整个方法就好了,是不是很简单。
在C#中使用科大讯飞Web API进行语音合成的更多相关文章
- .Net中使用SendGrid Web Api发送邮件(附源码)
SendGrid是一个第三方的解决邮件发送服务的提供商,在国外使用的比较普遍.国内类似的服务是SendCloud.SendGrid提供的发送邮件方式主要是两种, 一种是SMTP API, 一种是Web ...
- 在ASP.NET Core MVC中构建简单 Web Api
Getting Started 在 ASP.NET Core MVC 框架中,ASP.NET 团队为我们提供了一整套的用于构建一个 Web 中的各种部分所需的套件,那么有些时候我们只需要做一个简单的 ...
- asp.net MVC中实现调取web api
public ActionResult Index(string city) { if (string.IsNullOrEmpty(city)) { city = "上海"; } ...
- ASP.NET Web API WebHost宿主环境中管道、路由
ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...
- ASP.NET Web API Selfhost宿主环境中管道、路由
ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...
- ASP.NET Core 中文文档 第二章 指南(2)用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API
原文:Building Your First Web API with ASP.NET Core MVC and Visual Studio 作者:Mike Wasson 和 Rick Anderso ...
- 在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
- web api中的RouteHandler
ASP.NET MVC4中引入的Web API可以说是进行REST软件开发的利器(个人意见),但是最近在web form中混入web api时,发现一个问题:由于以前的web form项目中,使用到了 ...
随机推荐
- 【转】Jmeter Http请求界面解释
一个HTTP请求有着许多的配置参数,下面将详细介绍: 名称:本属性用于标识一个取样器,建议使用一个有意义的名称. 注释:对于测试没有任何作用,仅用户记录用户可读的注释信息. 服务器名称或IP :HTT ...
- ITextSharp Table使用 (转)
原文:http://www.cnblogs.com/LifelongLearning/archive/2011/05/16/2048116.html 表格是我们在制作文档时,经常使用的一个元素.对布局 ...
- java成神之——Stream和Optional
Stream流 基本使用 流关闭 平行流 流重用 iterator转换成流 分组计数 无限流 流转集合 压缩流 统计数值流 集合转换流遍历 流拼接 reduce 使用流生成随机字符串 流的包装流 几种 ...
- python实现文件加密
前言: 想实现批量文件加密,可惜批量.展时没有思路 0x1 没有加密前的图片 加密后!!! !!!打不开了 0x02: 代码 import hashlib def get_sha1(f): xd=op ...
- 2014.8.25 CAD系统事件触发流程
各进近.离场.进场Arinc424数据录入界面在CADDataManager/UC/UCIAP(UCSID)下 UCAirport是一抽象用户控件类,在FormADHP初始化时实例化成airport控 ...
- Deep Learning 学习笔记(6):神经网络( Neural Network )
神经元: 在神经网络的模型中,神经元可以表示如下 神经元的左边是其输入,包括变量x1.x2.x3与常数项1, 右边是神经元的输出 神经元的输出函数被称为激活函数(activation function ...
- Delphi IOS 蓝牙锁屏后台运行
Delphi IOS 后台运行 同样的程序,编译成android,锁屏后继续运行正常,蓝牙通讯正常,但在IOS下锁屏后程序的蓝牙就中断通讯了? IOS的机制就是这样,锁屏就关闭了. 音乐播放器是怎么做 ...
- C++加载位图跟SOCKET通信的编写
//将屏幕信息转换为位图结构 CDC *pDeskDC=GetDesktopWindow()->GetDC();//获取桌面的额画图对象 ; ; CDC memDC;//定义一个内存画布 mem ...
- 【转载】C# 从服务器下载文件
支持并尊重原创!原文地址:https://www.cnblogs.com/GoCircle/p/6429136.html 一.//TransmitFile实现下载 protected void But ...
- Vulkan Tutorial 03 理解Instance
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Creating an instance 与Vulkan打交道,通常的步骤是创建一个 ...