微信小程序+.NET(六) 科大讯飞语音接口-tts语音生成

  科大讯飞语音接口-tts语音生成

  Demo下载链接:https://download.csdn.net/download/jinglell/11566459
文本转语音(tts/语音生成)
语音生成是另一个难点,我的应用场景是参考科大讯飞的APP"听书神器",在微信小程序端小说爬取完之后,可以对当前的文章进行朗读处理,由于每天的免费次数有限,所以我对生成的音频流并没有直接返回而是也存储为.wav格式的音频的形式到本地资源服务器。
  首先正常情况下也是查看msc.dll,
在这里插入图片描述
但是语音合成我这次采用的是另一种形式:在线合成形式,通过请求接口和POST传参合成语音,需要注意的是要MD5加密APIKey+时间+参数Md5(APIKey + curTime + paraBase64);
  下面是我的代码:

public static void Text2Audio(string text,string path,string speeker = "xiaoyan")
        {
            // 应用APPID(必须为webapi类型应用,并开通语音合成服务,参考帖子如何创建一个webapi应用:http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481)
            string appID = "**your appID**";
            // 接口密钥(webapi类型应用开通合成服务后,控制台--我的应用---语音合成---相应服务的apikey)
            string APIKey = "**your API key**";
            // 语音合成webapi接口地址
            String url = "http://api.xfyun.cn/v1/service/v1/tts";
            String bodys;
            // 待合成文本
            //string text = "test测试音频";
            // 对要合成语音的文字先用utf-8然后进行URL加密
            byte[] textData = Encoding.UTF8.GetBytes(text);
            text = HttpUtility.UrlEncode(textData);
            bodys = string.Format("text={0}", text);


            //aue = raw, 音频文件保存类型为 wav或者pcm
            //aue = lame, 音频文件保存类型为 mp3
            string AUE = "raw";
            string param =
                "{\"aue\":\"" + AUE + "\","+
                "\"auf\":\"audio/L16;rate=16000\","+
                "\"voice_name\":\"" + speeker + "\"," +
                "\"engine_type\":\"intp65\"}";
            // 获取十位的时间戳
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            string curTime = Convert.ToInt64(ts.TotalSeconds).ToString();
            // 对参数先utf-8然后用base64编码
            byte[] paramData = Encoding.UTF8.GetBytes(param);
            string paraBase64 = Convert.ToBase64String(paramData);
            // 形成签名
            string checkSum = Md5(APIKey + curTime + paraBase64);
            // 组装http请求头
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.Headers.Add("X-Param", paraBase64);
            request.Headers.Add("X-CurTime", curTime);
            request.Headers.Add("X-Appid", appID);
            request.Headers.Add("X-CheckSum", checkSum);

            Stream requestStream = request.GetRequestStream();
            StreamWriter streamWriter = new StreamWriter(requestStream, Encoding.GetEncoding("gb2312"));
            streamWriter.Write(bodys);
            streamWriter.Close();

            String htmlStr = string.Empty;
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            Stream responseStream = response.GetResponseStream();
            using (StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("UTF-8")))
            {
                string header_type = response.Headers["Content-Type"];
                if (header_type == "audio/mpeg")
                {
                    Stream st = response.GetResponseStream();
                    MemoryStream memoryStream = StreamToMemoryStream(st);
                    // 保存音频文件地址和音频格式类型
                    //string path = "D:/audios/temp/audioTest23334455.pcm";
                    File.WriteAllBytes(path, streamTobyte(memoryStream));
                    
                    //Console.WriteLine(response.Headers);
                    //Console.ReadLine();
                }
                else
                {
                    htmlStr = reader.ReadToEnd();
                    //Console.WriteLine(htmlStr);
                    //Console.ReadLine();
                }
            }
            responseStream.Close();
        }

科大讯飞的两个接口iat/tts到此结束,有问题欢迎留言。{>_<}
ps:刚刚想着改改我发布的项目里的appID什么的突然想到了,除了配置appID appKey、替换msc.dll、配置IIS Server外,还要记得在你的科大讯飞应用控制台里添加你的IP 白名单,不然会无效的。我csdn下载里的项目里的appID、appKey虽然没改,但是别想着直接用我的了哈,因为我没添加你们的IP到我的应用白名单,你们的请求都是无效的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值