jTTS安装及应用
问题:jTTS安装失败,出现致使错误。
解答:错把在第四张的提示“插入xiaonan的第2张光盘”认为是5张盘中的第2张了,实际应是第5张。
问题:jTTS不发音
解答:若是用jTTS测试程序,则可能是license错误;若是用其它厂商的IVR,则可能没有调用我们的TTS;
问题:jTTS系统检查工具中找不到加密狗
解答:是否正常安装了驱动程序,区分USB和并口狗驱动程序;相应的硬件端口是否打开。
问题:jTTS如何合成多音字(或指定某个字的发音)
解答:通过S3ML用拼音指定;通过jTTSLib.exe来指定。
问题:jTTS支持哪此语音板卡。
解答:jTTS产品提供的是整套的软件,可以说与板卡并没有直接关系(不论是数字卡还是模拟卡)。只是jTTS合成的语音格式与板卡所支持的格式有时并不一致,这样的话,可以进行相应的语音转化来实现二者语音格式不一致的问题。
问题:jTTS合成参数如何调整
解答:参数(如语速、音量等)调整可以通过应用程序代码、注册表或S3ML。
问题:jTTS合成参数时出现杂音
解答:播放格式是否选择正确;定制库使用是否正确;可能定制库损坏。
问题:jTTS_Edify无法合成语音
解答:判断jTTS是否正常工作;再判断Edify是否正常工作;最后查看二者是否正常工作。
问题:jTTS是否可以直接播放到语音卡
解答:jTTS提供了设置播放设备的功能,但现在绝大多数的语音卡已经不再支持此功能,建议用播放文件或是播放内存的方法来实现。
问题:jTTS提供的API接口有哪些
解答:目前我们提供的API接口包括的语言有C/C++,Visual basic,Delphi,C#,且有相应的开发实例。若使用除此之外的其它开发语言,客户需要遵循WindowsAPI调用规则自己来实现。
jTTS SDK
Q1. 是否支持男声库?
Q2. 是否支持"基频""音量""语速"的调节?
Q3. jTTSInit(const char * pcszLibPath)函数应传入什么参数,为什么总是返回"ERR_OPENLIB"或者"ERR_READLIB"?
Q4. 演示版和正式版有何区别?
Q5. 为什么我们的正式版SDK在合成过程中还是有"北京捷通华声语音技术有限公司语音合成系统"的声音?
Q6. 怎么检测我的加密狗驱动是否正确安装?
Q7. 为什么我们的正式版本的SDK使用安装中提供的TTS_TEST.EXE程序时总是提示"ERR_SECURITY"错误?
Q8. 我们使用的是正式版,为什么在我们的程序中调用jTTSSetSerialNo函数总是返回"ERR_SECURITY"错误?
Q9. SDK是否支持在VB系统下开发?是否支持在DELPHI下开发?是否提供例子?
Q10.在DELPHI中调用jTTSSet2(…)函数设置系统参数时为什么总是返回"ERR_CONFIG"?
Q11.我的程序是使用C++ Builder编写的,可以调用 jTTS_MA.DLL吗?
Q12.我使用C语言编写的工程,为什么“#include jtts.h”后程序编译通不过呢?
jTTS Service
Q1.jTTS Service语音服务器端的监听端口号是多少?
Q2.TCP连接建立后是否CLIENT端马上收到jTTS_ANS_CONNECT包?是否每次jTTS_REQ_TEXT之前都要发送jTTS_REQ_SETPARAM2?何时需要执行jTTS_REQ_QUIT?
Q3.网络通信中的USHORT和UINT等数据类型是否使用网络字节顺序?发出一个请求后在没有收到完整的应答包之前能否发出第二个请求,如果能,我如何识别返回的应答包对应哪个请求,如果不行,我何时能用上jTTS_REQ_CANCELSYNTH?
Q4.消息头中的Length是否包括消息头本身的长度
Q5.jTTS_REQ_SETPARAM2包中Pitch、Volumn和Speed的值为0~9分别表示什么意思?
Q6.jTTS_REQ_SETPARAM2包中DigitMode的几个方法是什么意思?
Q7.jTTS_REQ_SETPARAM2包中EnglishMode的几个方法是什么意思?
Q8.jTTS_REQ_SETPARAM2包中Format中哪个格式可用在NMS,哪个可用在东进等?
Q9.jTTS_REQ_TEXT包中TextLen如何计算,每个汉字(GBK)算几个字符
Q10.如果一包没有发送完,ReadBytes是表示本包合成的字符数还是累计已合成的字符数,一个汉字算一个字符还是两个字符
Q11.CLIENT端接收到jTTS_ANS_SHUTDOWN或jTTS_ANS_OUTOFTIME包后,TCP连接是否被SERVER端主动断开?
Q12.连接空闲超时是多长时间?
Q13.在注意事项一节中有如下一段:"在接收到服务器应答包时,也应当判断是否是服务器退出指令或连接空闲超时指令,而不仅仅考虑是否是正常数据包",在接收应答包时,表示CLIENT端刚刚发送了请求,SERVER端应该在很短的时间内返回应答包,为何可能出现连接空闲超时。
Q14.短时连接状态大大增加了TCP连接的次数,为何反而更有效地利用了服务器。
Q15.在CLIENT端主动断开TCP连接之前,是否一定要发送jTTS_REQ_QUIT,jTTS_REQ_PARAM2的作用周期有多长,是发送了一个jTTS_REQ_TEXT后即恢复缺省值、还是在断开TCP
jTTS SDK
Q1. 是否支持男声库?
在jTTS 2.0以后的版本中并不支持男声音库。如果需要男声音库,你可以选择jTTS 1.0版本。
Q2. 是否支持"基频""音量""语速"的调节?
在jTTS 2.5.5.5以后的版本中支持以上参数的调节,系统默认值为5。调节"基频"或"语速"后合成的声音质量上会略有损失。
Q3. jTTSInit(const char * pcszLibPath)函数应传入什么参数,为什么总是返回"ERR_OPENLIB"或者"ERR_READLIB"?
jTTSInit 函数完成TTS系统的初始化工作,包括加载音库,分配系统所需内存等。"pcszLibPath"参数可以有三种选择:
1. 指向包含"SpLib"和"Data"音库文件夹路径的字符串,表示使用本地合成。
2. 指向一个具有"ipaddr:port"格式的字符串。表示利用jTTS Service语音合成服务器进行远程合成。
3. 指向NULL,表示自动从注册表中读取初始化字符串,其形式也为上述两种。注册表的路径请参看SDK说明书。
一般在正常安装jTTS Runtime Package 后,安装程序会将安装路径写入注册表中,因此此参数使用"NULL"即可,函数将自动从注册表中读取音库路径。
Q4. 演示版和正式版有何区别?
演示版和正式版中只有jTTS_MA.DLL不同。演示版中会在合成过程中随机播放“北京捷通华声语音技术有限公司语音合成系统”,但不需要加密狗的支持,用户可以使用这个版本进行开发和评估。正式版则需要加密狗支持,但合成过程中不会随机加入其他语句。用户可以通过文件“属性”(鼠标右键 菜单)中的“版本信息”来判断是演示版还是加密版。
Q5. 为什么我们的正式版SDK在合成过程中还是有"北京捷通华声语音技术有限公司语音合成系统"的声音?
请检查使用的jTTS_MA.DLL文件的版本,确认文件"属性"(鼠标右键菜单)中的"版本信息"为"加密版"。
正式版SDK的安装在我们提供的第三张CD上的SETUP.EXE。由于jTTS Runtime Package中包含的是演示版的DLL,因此有可能是在安装jTTS Runtime Package而没有替换其中的jTTS_MA.DLL。必须在安装后将jTTS_MA.DLL替换为正式版的jTTS_MA.DLL文件。
Q6. 怎么检测我的加密狗驱动是否正确安装?
我们提供的加密狗硬件分USB和并口两种,注意NT系统可能不支持USB接口的加密狗!加密狗驱动程序一般在我们提供给用户的CD3上的"WatchDog"目录下。
驱动安装完毕后(win9x系统可能需要重新启动)USB设备
在系统的"硬件信息"下的"通用串行总线控制器"中应该显示"USB KEY"并口设备
Q7. 为什么我们的正式版本的SDK使用安装中提供的jTTS_TEST.EXE程序时总是提示"ERR_SECURITY"错误?
1. 首先确认是否安装我们提供的硬件加密狗(USB接口或并口硬件)
2. 是否正确安装加密狗驱动。见问题6。
3. 需要修改jTTS_TEST.EXE的源程序,将jTTSSetSerialNo函数传入的参数修改为我们提供给正式用户的加密序列号(序列号在CD1中的Readme.txt文件中提供) ,然后重新编译。
Q8. 我们使用的是正式版,为什么在我们的程序中调用jTTSSetSerialNo函数总是返回"ERR_SECURITY"错误?
1. 首先确认是否安装我们提供的硬件加密狗(USB接口或并口硬件)
2. 是否正确安装加密狗驱动。见问题6。
3. 调用jTTSSetSerialNo函数时传入的参数是否误,我们提供给正式用户的加密序列号在CD1中的Readme.exe文件中包括。
4. 确认使用的JTTS_MA.DLL是正式版本,检查使用的JTTS_MA.DLL文件的版本:确认文件"属性"(鼠标右键菜单)中的"版本信息"为"加密版"。
Q9. SDK是否支持在VB系统下开发?是否支持在DELPHI下开发?是否提供例子?
支持,提供VB和 DELPHI的例子。
Q10. 在DELPHI中调用jTTSSet2(…)函数设置系统参数时为什么总是返回"ERR_CONFIG"?
注意DELPHI的调用中 "JTTSCONFIG2"结构的定义,其中成员"wVersion"应定义为"DWORD"类型。或者在wVersion后增加一个"WORD"的成员,例如wReserved,具体请参看SDK包含的DHLPHI例子工程。
Q11. 我的程序是使用C++ Builder编写的,可以调用 jTTS_MA.DLL吗?
可以,但是在C++ Builder的化境下需要使用C++ Builder 自带的工具IMPLIB.EXE 生成新的jTTS_MA.LIB供编译使用.
Q12. 我使用C语言编写的工程,为什么”#include jtts.h”后程序编译通不过呢?
您使用的是3.0.6.0以前的版本,原因是C语言不支持例如以下的结构和枚举定义:
|
struct JTTSCONFIG
{
...
};
需手工改动为:
typedef struct
{
...
}JTTSCONFIG;
|
enum ERRCODE
{
...
};
需手工改动为:
typedef enum
{
...
}ERRCODE;
|
返回 目录
jTTS Service
Q1.jTTS Service语音服务器端的监听端口号是多少?
服务器端的监听端口号是可以自己设置的。具体设置方法请见jTTSService使用说明。
Q2.TCP连接建立后是否CLIENT端马上收到jTTS_ANS_CONNECT包?是否每次jTTS_REQ_TEXT之前都要发送jTTS_REQ_SETPARAM2?何时需要执行jTTS_REQ_QUIT?
TCP连接建立后,Client马上收到jTTS_ANS_CONNECT数据包,对连接请求进行验证。在jTTS_REQ_TEXT之前不是必须发送jTTS_REQ_SETPARAM2指令,当且仅当用户需要改变语音合成默认参数或者系统以前设置参数时才需发送。默认参数为:汉字编码:GB_2312,音库:男声,基频:5,音量:5,语速:5,标点符号:不阅读,数字:自动阅读方式,英文:自动方式,语音输出格式:PCM Native 16KHz 16Bit。
基本通讯流程如本文第四部分流程图所示。
Q3.网络通信中的USHORT和UINT等数据类型是否使用网络字节顺序,发出一个请求后在没有收到完整的应答包之前能否发出第二个请求,如果能,我如何识别返回的应答包对应哪个请求,如果不行,我何时能用上jTTS_REQ_CANCELSYNTH
USHORT和UINT类型使用网络字节顺序。
对于有应答的指令,应该等待收到应答数据包后,再进行后续操作。因为应答数据包中包含请求指令是否有效、是否被服务器接收的信息。当然也可以不等待应答数据包就发送下一条指令,但是这样就不能保证后续操作完全按照前面设置进行。
对于发送语音合成请求,可以连续发送多个,返回来的语音数据包按照用户发送合成文本顺序发送回来。
jTTS_REQ_CANCEL用于取消当前合成过程,即取消当前正在合成的文本的语音合成。
Q4.消息头中的Length是否包括消息头本身的长度?
每一种数据包的消息头中"数据包长"字段等于消息头和消息体的长度之和。
Q5.jTTS_REQ_SETPARAM2包中Pitch、Volumn和Speed的值为0~9分别表示什么意思?
PITCH:按照0~9分为10级,缺省值为5。数字越大基频越高。
VOLUME:按照0~9分为10级,缺省值为5。数字越大音量越大。
SPEED:按照0~9分为10级,缺省值为5。数字越大语速越快。
Q6.jTTS_REQ_SETPARAM2包中DigitMode的几个方法是什么意思?
数字串的阅读方式,缺省为DIGIT_AUTO_NUMBER
DIGIT_TELEGRAM:电报方式,即一个数字一个数字阅读。例如:1997读成"一九九七"。
DIGIT_NUMBER:数目方式,即连续的数字阅读。例如:1997读成"一千九百九十七"。
DIGIT_AUTO_NUMBER:自动方式,即根据上下文自动选择电报方式或数目方式阅读,如果无法判断,则使用数目方式。
DIGIT_AUTO_TELEGRAM:自动方式,即根据上下文自动选择电报方式或数目方式阅读,如果无法判断,则使用电报方式。
DIGIT_AUTO:等同于DIGIT_AUTO_NUMBER,为1.0兼容而保留。
Q7.jTTS_REQ_SETPARAM2包中EnglishMode的几个方法是什么意思?
英文的阅读方式,缺省为ENG_AUTO
ENG_AUTO:自动判断,可能按字母、自录音词汇或者SAPI阅读。
ENG_SAPI:不能被单字母阅读的内容,强制以SAPI方式阅读。
ENG_LETTER:强制所有英文按照单字母方式阅读。
ENG_LETTER_PHRASE:强制所有英文用jTTS核心阅读,也即用字母或自录音词汇阅读。
Q8.jTTS_REQ_SETPARAM2包中Format中哪个格式可用在NMS,哪个可用在东进等?
经过测试,NMS肯定支持的格式:1、2、3、4、6。Dialogic肯定支持的格式:1、2、3、4、5。东进肯定支持的格式:1、2、3、4。其他格式是否适用请用户具体测试。
Q9.jTTS_REQ_TEXT包中TextLen如何计算,每个汉字(GBK)算几个字符?
GBK是按2个计算,ASCII按1个计算
Q10.如果一包没有发送完,ReadBytes是表示本包合成的字符数还是累计已合成的字符数,一个汉字算一个字符还是两个字符
累计字符数,汉字算两个
Q11.CLIENT端接收到jTTS_ANS_SHUTDOWN或jTTS_ANS_OUTOFTIME包后,TCP连接是否被SERVER端主动断开
服务器端主动断开。
Q12.连接空闲超时是多长时间
在服务器端可配置,0:没有超时限制;>0:超过所设置的分钟数,服务器自动断开连接。
Q13.在注意事项一节中有如下一段:"在接收到服务器应答包时,也应当判断是否是服务器退出指令或连接空闲超时指令,而不仅仅考虑是否是正常数据包",在接收应答包时,表示CLIENT端刚刚发送了请求,SERVER端应该在很短的时间内返回应答包,为何可能出现连接空闲超时?
空闲超时指令是服务器端主动发出的,因此CLIENT发出请求的同时,可能SERVER端正好主动发出此指令,从概率上这是有可能的。因此加上判断是更加保险的措施。
Q14.短时连接状态大大增加了TCP连接的次数,为何反而更有效地利用了服务器?
短时连接时,只在需要使用TTS时和服务器有连接,因此服务器能在其他时间为其他需要TTS服务的客户端服务。如果是长连接的话,如果多个客户端都进行了连接超过服务器规定的上限,虽然可能有些客户端当时并不进行TTS请求,但服务器也不能再为其他客户端服务。jTTS Service语音合成服务器有两种加密限制,一是指同时连接的客户端数目,这样采用短时连接可以提高服务器使用的效率。二是对同时进行的合成线程数进行限制,这种方式下采用短时连接不会增加服务器效率,可以采用长连接。
Q15.在CLIENT端主动断开TCP连接之前,是否一定要发送jTTS_REQ_QUIT,jTTS_REQ_PARAM2的作用周期有多长,是发送了一个jTTS_REQ_TEXT后即恢复缺省值、还是在断开TCP连接重新连接后、还是在SERVER宕机后、还是直到下一次调用jTTS_REQ_PARAM2?
协议规定,Client端主动断开TCP连接之前,发送jTTS_REQ_QUIT,但也可以直接Close套接字。jTTS_REQ_SETPARAM2的作用周期是一个TCP连接或者下一次发送jTTS_REQ_SETPARAM2,如果不是重新连接或下一次设置jTTS_REQ_SETPARAM2,设置保持不变。
返回 目录 |