最近工作中需要用到讯飞语音合成接口,网上看了下基本都是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);
}
        httpwebresponse = (HttpWebResponse)httpwebrequest.GetResponse();
        Stream res_strem = httpwebresponse.GetResponseStream();
        if (httpwebresponse.ContentType == "text/plain")//ContentType等于"text/plain"即表示生成失败,等于"audio/mpeg"即生成成功
        {
          StreamReader s_reader = new StreamReader(res_strem, Encoding.UTF8);
          String a = s_reader.ReadToEnd();
        }else{
        StreamWriter sw = new StreamWriter(@"D:\abc.mp3");
        res_strem.CopyTo(sw.BaseStream);
        sw.Flush();
        sw.Close();
        res_strem.Dispose();
      }  

上面使用到的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进行语音合成的更多相关文章

  1. .Net中使用SendGrid Web Api发送邮件(附源码)

    SendGrid是一个第三方的解决邮件发送服务的提供商,在国外使用的比较普遍.国内类似的服务是SendCloud.SendGrid提供的发送邮件方式主要是两种, 一种是SMTP API, 一种是Web ...

  2. 在ASP.NET Core MVC中构建简单 Web Api

    Getting Started 在 ASP.NET Core MVC 框架中,ASP.NET 团队为我们提供了一整套的用于构建一个 Web 中的各种部分所需的套件,那么有些时候我们只需要做一个简单的 ...

  3. asp.net MVC中实现调取web api

    public ActionResult Index(string city) { if (string.IsNullOrEmpty(city)) { city = "上海"; } ...

  4. ASP.NET Web API WebHost宿主环境中管道、路由

    ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...

  5. ASP.NET Web API Selfhost宿主环境中管道、路由

    ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...

  6. 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 ...

  7. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  8. 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

    在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...

  9. web api中的RouteHandler

    ASP.NET MVC4中引入的Web API可以说是进行REST软件开发的利器(个人意见),但是最近在web form中混入web api时,发现一个问题:由于以前的web form项目中,使用到了 ...

随机推荐

  1. FPGA中计数器设计探索

    FPGA中计数器设计探索,以计数器为32位为例: 第一种方式,直接定义32位计数器. reg [31:0]count; quartus ii 下的编译,资源消耗情况. 85C模型下的时钟频率. 0C模 ...

  2. 【转】Jmeter测试结果分析

    Jmeter测试结果分析这一篇,我打算分成上下两部分.上篇,主要讲述如何使用jmeter中Assertion对结果进行简单的分类:下篇,主要讲述的是当我们拿到测试结果后,我们应该如何去看待这些测试结果 ...

  3. 求 s=a+aa+ aaa+ aaaa +aaaaa+........的值,a是从键盘输入的,项数也为键盘输入

    总结:这道题目.主要是那个位数,需要*10, while(i<f){ x+=y;//决定位数上的那个数 sum+=x//求和 y*10=y;//决定位数 } package com.b; imp ...

  4. 杂项-公司:星巴克百科-un

    ylbtech-杂项-公司:星巴克百科 星巴克(Starbucks)是美国一家连锁咖啡公司的名称,1971年成立,是全球最大的咖啡连锁店,其总部坐落美国华盛顿州西雅图市.星巴克旗下零售产品包括30多款 ...

  5. python开发socket套接字:粘包问题&udp套接字&socketserver

    一,发生粘包 服务器端 from socket import * phone=socket(AF_INET,SOCK_STREAM) #套接字 phone.setsockopt(SOL_SOCKET, ...

  6. 20181101_将WCF寄宿到控制台

    使用管理员权限打开VS2017 2. 创建以下代码进行测试: a)         创建一个空白解决方案 b)         创建三个类库文件 c)         IMathService代码如下 ...

  7. Venom的简单使用

    工具地址:https://github.com/r00t-3xp10it/venom 打开到venom目录,输入./venom.sh 打开程序 按回车键继续 这里有很多的模块,要用哪个模块就输入它的编 ...

  8. Checker Challenge跳棋的挑战(n皇后问题)

    Description 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子. 列号 0 1 2 3 4 5 6 ...

  9. 【289】◀▶ Python I/O & 读写文本文件

    参考:Python 文件 I/O 参考:Python OS 文件/目录方法 目录: 01   open 函数 用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写. 02   F ...

  10. iPython notebook 安装使用

    pip install jupyter jupyter notebook --allow-root