最近工作中需要用到讯飞语音合成接口,网上看了下基本都是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. classpath和环境变量设置

    一.简介: 环境变量是操作系统.应用程序.脚本程序等等的指明灯,能够告诉他们需要的资源在哪里.大多数的 系统都有一些预先设置好的环境变量,当然,我们也可以增加自己的环境变量. 为了看看当前系统的环境变 ...

  2. Spring Cloud Eureka 注册,发布,调用服务

    Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务治理框架,如Netflix Eureka.Consul和Zookeeper.在Spring ...

  3. selenium 定位元素可以用多个findElement

    selenium 定位元素可以用多个findElement,如driver.findElement(By.id"XXX").findElement(By.linkText(XXX) ...

  4. java从键盘输入一组数据,输出其最大值,平均值,最小值没法输出

    总结::需要耐心,加思考.做事不思考,那就是白做徒劳!!!!! package com.aini; import java.util.Scanner; //操...为什么数组的大小比较我硬是搞不懂,比 ...

  5. PHP 统计数据功能 有感

    统计,就是把基本的数据,整合起来. 用到sql的,有group by 功能,count功能,order by功能等等. sql将收集的数据,进行统计分析. 一般情况下,sql处理后得到的数据,还要通过 ...

  6. Docker - Upgrade from 1.12 to 1.13

    引言 历经半年,docker的更新终于来了,看着新版本中各种诱人的新特性,我们也第一时间来尝试一下. 升级 之前一直使用的是1.12,所以这次尝试的是从原来的版本升级到新版本. 1. 更新 yum p ...

  7. MFC学习(六)计算器

    1 stdafx.h  所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H.Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使 ...

  8. leetcode821

    vector<int> shortestToChar(string S, char C) { vector<int> V; ; int AYC[N]; ; ; i < S ...

  9. 「小程序JAVA实战」运行微信官方demo(四)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-04/ 微信官方小程序的demo 介绍 https://mp.weixin.qq.com/cgi-b ...

  10. clock函数返回负值~ (转)

    使用clock() 函数来进行计时,时不时的返回一个很大的负数,怎么检查也检查不出错误,现在找出错误原因,给大家分享一下. 来源网页:http://kebe-jea.blogbus.com/logs/ ...