与语音听写相反,语音合成是将一段文字转换为语音,可根据需要合成出不同音色、语速和语调的声音,让机器像人一样开口说话。
语音合成详细的接口介绍及说明请参考: MSC Windows API 文档,在集成过程中如有疑问,可登录讯飞开放平台论坛,查找答案或与其他开发者交流。
小语种及少数民族方言:暂不支持,敬请期待!
1.在控制台下载对应sdk
2.进入sdk内samples目录,双击samples.sln文件(需事先安装Visual Studio)
《SDK目录结构一览》
bin:
doc:
include:
libs:
samples:
注意:
1.打开Microsoft Visual Studio(本例使用的是VS2010),选择文件->新建->项目->Visual C++ ->Win32控制台应用程序,输入项目名称,然后点击确定键
2.应用程序类型选择“控制台应用程序”,附加选项选择“空项目”,然后点击完成。
1.将SDK中bin,include,libs文件夹复制到新建工程“Demo”文件夹下
2.导入头文件
右键点击新建工程,选择 “属性“,进入工程属性页面:点击C/C++->常规->附加包含目录,输入相对于工程文件Demo.vcxproj的相对路径,即相对于$(ProjectDir)的路径,另源代码文件也需相同设置。
3.导入msc.dll
a. 加载msc.lib文件:在main.c文件中输入如下图所示代码,其他详细代码请参考Samples中对应的语音示例 注意:加载路径输入相对于工程文件的相对路径
#ifdef _WIN64
#pragma comment(lib,"../libs/msc_x64.lib")
#else
#pragma comment(lib, "../libs/msc.lib")
#endif
b. 将msc.dll所在目录设置为工作目录,即“$(ProjectDir)..\bin\”
4.将目标可执行文件复制到msc.dll所在目录
5.SDK启动后,bin/msc目录下会生成日志。(注意:msc文件夹下需有msc.cfg文件)
语音合成主要API调用流程如下图所示:
详细代码调用请参考 Samples中的 tts_sample(语音合成示例)、API详细描述请参考API文档
以下所述针对在线合成引擎,如需离线合成,请点击这里
在线引擎(TYPE_CLOUD),又称为云端模式,需要使用网络,速度稍慢,并产生一定流量,但有更好的合成效果,更多的发音人等。在线引擎下,结果返回速度基本决定于用户网络的带宽限制。
在MSPLogin接口的params参数中添加:
net_type=custom, proxy_ip=<host>, proxy_port=<port>
其中,<host>,<port>替换为实际的代理服务器地址和端口。
例如:MSPLogin(NULL, NULL, "appid = 12345678, net_type=custom, proxy_ip=192.168.1.2, proxy_port=8080"); 注意:各参数间,以英文逗号分隔。
接口原型: int MSPLogin(const char* usr, const char* pwd, const char* params)
注意: 若在设置代理参数后,使用语音服务过程中,报错10204/10205/10212等网络异常错误时,请查阅以下内容,做出相关操作:
- 讯飞语音SDK的通信协议使用的是标准HTTP1.1协议,其代理协议使用的是标准HTTP代理协议。
- 代理服务器需要支持全双工多问多答方式,即 pipeline 模式。
- 代理服务器不能对80端口做限制,不能对如下域名做拦截: hdns.openspeech.cn scs.openspeech.cn open.xf-yun.com dev.voicecloud.cn
- 需要确保代理服务器只负责转发数据包,不能改变数据包的完整性和时序性。
- 代理服务器在转发数据包时,不能在HTTP协议头部添加 IE6 标识头。
合成发音人列表请到控制台-我的应用-语音合成-在线语音合成(流式版)-发音人授权管理处查看,部分发音人支持添加试用,添加后即可查看发音人参数值:
以下为常用参数说明,更多参数请参考API文档
参数 | 名称 | 说明 |
---|---|---|
voice_name | 发音人 | 不同的发音人代表了不同的音色,如男声、女声、童声等,详细请参照控制台发音人列表 |
speed | 语速 | 合成音频对应的语速,取值范围:[0,100],数值越大语速越快。默认值:50 |
volume | 音量 | 合成音频的音量,取值范围:[0,100],数值越大音量越大。默认值:50 |
rdn | 数字发音 | 合成音频数字发音,支持参数, 0 数值优先, 1 完全数值, 2 完全字符串, 3 字符串优先, 默认值:0 |
background_sound | 背景音 | 合成音频中的背景音,支持参数,0:无背景音乐,1:有背景音乐 |
sample_rate | 合成音频采样率 | 合成音频采样率,支持参数,16000,8000,默认为16000 |
答: 错误码及相应解决方案查询
答:支持的,设置参数一栏ttp=cssml,同时在云端支持cssml标签,只有下列发音人参数xiaoyan、xiaoyu、xiaofeng、xiaoqi、catherine、mary, cssml详细使用方式参考论坛
答:const char* session_begin_params = "voice_name = xiaoyan, text_encoding = gb2312, sample_rate = 16000, speed = 50, volume = 50, pitch = 50, rdn = 2"; 可在Windows api文档:http://mscdoc.xfyun.cn/windows/api/iFlytekMSCReferenceManual/qtts_8h.html查看参数具体说明。
答:拿到的合成音频是没有音频头的,音频头中含有音频格式、采样率、音频长度等播放音频所需信息。拿到合成音频后,用户可以添加音频头,可参考例子tts_sample中的代码,然后使用常规播放器来播放;也可以使用Cool Edit等软件手动选择音频参数来播放。
答:语音云一次语音合成允许的合成文本大小不超过8192个字节,所以对于长度超过此值的大合成文本,用户可以采用“分段合成”的方式,即先将大文本按照标点符号如句号进行切分,然后对每一段文本分别进行合成。进行分段合成时,用户既可以在一路会话中循环使用QTTSTextPut+QTTSAudioGet组合完成合成,也可以为每一段文本使用一路独立的会话完成合成。
答:在MSPLogin接口中添加:server_url = http://YourDomainName/msp.do (YourDomainName是指语音云服务域名,请开发者自行替换) 例如:MSPLogin(NULL, NULL, "appid = 12345678, server_url = http://sdk.openspeech.cn/msp.do"); 注意:各参数间,以英文逗号分隔。 接口原型: int MSPLogin(const char* usr, const char* pwd, const char* params)