语音合成及TTS,我们尝试使用百度的语音合成技术 不过我发现

有一种缺点在于没有离线包让我有些很不舒服,可能是在线版的

原因微软语音识别技术在Windows 2000是默认集成在系统组件中

或许我们不必去寻找新的语音合成替代方案,不过在线版一旦离线

只有Game Over,Hah不过有一点好处在于使用方便适合广发开发

者,第二百度语音合成后的音频流,妹子的声音听着较舒服 如果可

以在“卡哇伊”的萌妹妹,一定会更好,不过应该在解决一下声音坚

硬的感觉或许会更好,虽然语音合成技术发展这么多年 至少目前我

还没有见到有什么服务可以提供与人说话的自然感,始终会有些机

械干不过要谈到“百度语音识别”与“光学识别 / OCR”的话,我不好意

思讨论 但是支持国产的心是不变的,不过百度的文档只有那么简洁

我可以断定一定是百度的开发人员做的,Hah 我们又不是日本人与

印度人写不好什么注释与文档,人家那是写作文 我们能造吗?

首先你需要具备一个百度账号,然后到新版百度语音的官方的首页

http://yuyin.baidu.com/fc.html

届时你会看到上面的两种不同的技术,我们选择语音合成技术

你可以试试快速体验实际上它就是利用REST API实现的,不要纠结

我们点击立即使用,如果是第一次使用百度的技术服务 那么你需要

注册开发者信息一次 烂填最好 免得百度把你的信息哪去卖钱,Hah.

如果是你已经登记信息,没有创建应用你也无法使用百度的服务

你必须创建一个项目,在下图如所示右上角“创建新应用”

那么你会看见如下页面,随意填写一个有效名称确认即可 应用类别

也是随意选择,搞那么清楚给百度干什么 只是用服务 又不是卖信息

当应用创建完毕后你会看到如下的页面,那么你需要点击开通服务

如果你没有看到开通服务的标签按钮,可以回到百度语音支持首页

选择“百度语音合成”然后直接点击“立即使用”

它会提示你选择你的应用随便选择一个充数就可以,然后点击下一步

如果提示如下页面表示成功,你也可以直接点击上图右边的“创建应用”

超链接快速开通服务

好吧,如果有需要百度帮助文档的可以去“应用管理”页面点击你需

要的技术按钮,会弹出如下的快捷菜单 选择“下载SDK”即可,或者

从百度语音支持首页选择“百度语音合成”

点击工具栏中的“相关下载”后我们选择“REST API”选项卡,请参照下图

点击下载文档,不过百度的文档你或许看了可能会认为没有看过 Hah。

现在我们需要去“获取 Access Token”又是百度搞出来的新玩意

我们需要进入“应用管理”页面中点击包含“百度语音识别”技术的

应用,点击“查看Key”图形按钮,会出现如下图所示

我们现在需要提取两个重要的参数及API Key、Secret Key话

说为什么叫做“秘密Key”我估摸着是与密码差不多的一个玩意

我们根据文档拼接一个连接用于查询自己的“Access Token”

https://openapi.baidu.com/oauth/2.0/token?

grant_type=client_credentials&

client_id=hINQTsu6G8C6XqwFvfbWT7Tm&

client_secret=8d5dbdb1b92bf945dca42f75c9eb1a69

解释:

grant_type // 授权类型

client_id // API Key

client_secret // Secret Key

在浏览中访问了上面的连接会看到如上图的文本Json代码

我们什么只需要“access_token / 访问令牌”中的东西其他直

接删删删 没什么太大的作用

下面开始用C#编写使用百度语音合成服务的代码,首先我们

需要知道,百度语音合成后输出的音频流是mp3不是wav所

以我们需要播放该音频流则需要求助支持mp3音频格式的媒体

库,不过我们只是简单的播放它的音频而不是需要制作音乐播

放器,那么使用mci是最方便与节省内存的一个办法

  1. private const string lan = "zh";
  2. private const string per = "0";
  3. private const string ctp = "1";
  4. private const string spd = "3";
  5. private const string pit = "6";
  6. private const string vol = "9";
  7. private const string cuid = "00-12-7B-16-74-8D";
  8. private const string tex = "远去的山河 沉寂,恋过的风景 如昔" +
  9. "苍何斩落了 情迷,生死轻付了 别离" +
  10. "捣一脉相思 成泥,沐四海悲风 无迹" +
  11. "往生海烟波 又起,妙华镜风雪 共历";
  12. private const string tok = "24.fffd842a3fe829c873fe1c4cd0cb9c4e.2592000.1439044224.282335-6396988";
  13. private const string rest = "tex={0}&lan={1}&per={2}&ctp={3}&cuid={4}&tok={5}&spd={6}&pit={7}&vol={8}";
  14. private const int NULL = 0, ERROR_SUCCESS = NULL;
  15. [DllImport("WinMm.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
  16. private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);

从上面的代码你或许会很疑惑为什么或有那么多常量那么你看下图

你便知道了,有些观看文档的朋友则不用

现在是不是发现与上述常量相同呢?它是“百度语音合成”所需要

的一些“必要或可选”的参数,我们在这里使用POST的方式主要

在于使用GET方式显得我有些太屌了,虽然文档内是GET方式

  1. protected override void OnLoad(EventArgs e)
  2. {
  3. string strUpdateData = string.Format(rest, tex, lan, per, ctp, cuid, tok, spd, pit, vol);
  4. HttpWebRequest req = WebRequest.Create("http://tsn.baidu.com/text2audio") as HttpWebRequest;
  5. req.Method = "POST";
  6. req.ContentType = "application/x-www-form-urlencoded";
  7. req.ContentLength = Encoding.UTF8.GetByteCount(strUpdateData);
  8. using (StreamWriter sw = new StreamWriter(req.GetRequestStream()))
  9. sw.Write(strUpdateData);
  10. HttpWebResponse res = req.GetResponse() as HttpWebResponse;
  11. using (Stream stream = res.GetResponseStream())
  12. {
  13. string strFullFileName = Application.StartupPath + "/app.mp3";
  14. using (FileStream fs = new FileStream(strFullFileName, FileMode.Truncate | FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
  15. stream.CopyTo(fs);
  16. if (mciSendString(string.Format("open \"{0}\" alias app", strFullFileName), null, NULL, NULL) == ERROR_SUCCESS)
  17. mciSendString("play app", null, NULL, NULL);
  18. }
  19. }

.NET POST的方式无外乎那几种,一般最常用的还是

.NET上层提供HttpWebRequest,不过百度语音识别

要求使用UTF-8的字符串POST,一定注意这里的细节

否则你无法使用百度提供的服务,而对你返回错误代码

想必这些细节作为一个开发人员应该是不会犯的

我们把POST后返回的HTTP流写到文件,不过在上面

我说过百度是返回的mp3流,那么你就需要以mp3的方

式写到文件,如果使用BASS则不必它可以播放内存中

的媒体流,不过mci方式则不可以,如果你没有看懂代码

又急需要使用可以拷贝我的代码 不过建议你能读懂最好

依赖的命名空间:

  1. using System.Net;
  2. using System.IO;
  3. using System.Text;
  4. using System.Runtime.InteropServices;

到这里基本结束了,百度语音合成 在C#中的使用并不是

你想象中的那么困难,你没有必要去纠结它的使用方法

C# 百度语音合成的更多相关文章

  1. 百度语音合成AI

    注意:不要使用Dw编辑PHP代码,会因为编码问题出错!!<?php require_once 'AipSpeech.php'; // 你的 APPID AK SK const APP_ID = ...

  2. flask 第六章 人工智能 百度语音合成 识别 NLP自然语言处理+simnet短文本相似度 图灵机器人

    百度智能云文档链接 : https://cloud.baidu.com/doc/SPEECH/index.html 1.百度语音合成 概念: 顾名思义,就是将你输入的文字合成语音,例如: from a ...

  3. Android 开发 框架系列 百度语音合成

    官方文档:http://ai.baidu.com/docs#/TTS-Android-SDK/6d5d6899 官方百度语音合成控制台:https://cloud.baidu.com/product/ ...

  4. 树莓派3b安装Nginx和php7和百度语音合成模块

    1.安装sox系统mp3音频播放模块(项目需要) sudo apt-get install lame sudo apt-get install sox sudo apt-get install lib ...

  5. Android 百度语音合成集成

    一.环境配置: 下载资料:http://ai.baidu.com/sdk 官方视频讲解:http://ai.baidu.com/support/video 接入指南:http://ai.baidu.c ...

  6. 百度语音合成api/sdk及demo

    1.流程 1)换取token 用Api Key 和 SecretKey.访问https://openapi.baidu.com/oauth/2.0/token 换取 token // appKey = ...

  7. Python实战---制作专属有声小说(调用百度语音合成接口)

    这一次的目标是使用百度云的人工智能接口,实现文字转语音的实时转换,将小说文字转换成语音朗读出来. 百度云接口调用 百度的这个接口对于我们普通用户非常友好,他的很多功能都是免费的,而且我们每天可以免费调 ...

  8. csharp: 百度语音合成

    public string API_id = "3333"; //你的ID public string API_record = null; public string API_r ...

  9. 文本转音频(百度语音合成api)(python)(原创)

    应之前的一家小学教育培训机构的要求设计的一款 将文字转音频的程序.(注:后面应该是生成音频才对,没有改过来) 技术难点: ①语音合成,如果没有现在这么多的云服务-百度云语音合成,我估计这个程序会费很大 ...

随机推荐

  1. Jade之Includes

    Includes jade允许利用include将其他文件(支持filters所支持的类型)中的代码嵌入当前代码中. jade: //- index.jade doctype html html in ...

  2. 编译jsoncpp库以及要注意的问题

    原创文章,转载请注明原作者与本文原始URL. 版本:jsoncpp-src-0.5.0.zip简介:jsoncpp是用cpp实现的json库,可以拼装,解析,生成json串.我们要把他编译成动态库.这 ...

  3. 【半平面交】bzoj1038 [ZJOI2008]瞭望塔

    http://m.blog.csdn.net/blog/qpswwww/44105605 #include<cstdio> #include<cmath> #include&l ...

  4. iOS多线程编程之NSThread的使用(转)

    本文由http://blog.csdn.net/totogo2010/原创 1.简介: 1.1 iOS有三种多线程编程的技术,分别是: 1..NSThread 2.Cocoa NSOperation  ...

  5. SQL Server存储过程中防止线程重入处理方式

    对于线程重入,在C#中有lock关键字锁住一个SyncObject,而SQL Server也可用一个表来模拟实现. 先创建一个同步表,相当于C#中的SyncObject,并插入一条记录(初始值为1) ...

  6. Django学习(二)

    一  高亮显示 <script type="text/javascript"> $(document).ready(function () { $("#nav ...

  7. Linux下oracle11gR2系统安装到数据库建立配置及最后oracle的dmp文件导入一站式操作记录

    简介 之前也在linux下安装过oralce,可每次都是迷迷糊糊的,因为大脑一片空白,网上随便看见一个文档就直接复制,最后搞了乱七八糟,虽然装上了,却乱得很,现在记录下来,希望能给其他网上朋友遇到问题 ...

  8. Eclipse配置详解(包括智能提示设置、智能提示插件修改,修改空格自动上屏、JDK配置、各种快捷键列表……)

    Eclipse编辑器基本设置 1.添加行号 在边缘处右键 2.改字体 字体的一般配置 3.去掉拼写错误检查 4.Java代码风格 代码格式化 Ctrl + Shift + F 之后点击右边的New按钮 ...

  9. 献上两个java小算法

    直接上代码: /** * Name: 求数组中元素重复次数对多的数和重复次数 * Description: * 数组中的元素可能会重复,这个方法可以找出重复次数最多的数,同时可以返回重复了多少次. * ...

  10. Spring基本概念

    spring优点: 1降低组件间耦合度,实现软件各层之间的解耦. 2可以使用容器提供的各种服务.如,事务管理服务,消息服务等等. 当我们使用容器管理事务时,开发人员就不再需要手工控制事务,也不需处理复 ...