合成语音归根到底是根据汉字在字符集的定位来取语音库中的数据
定位方法:
根据救字的两个字节中的值.从高字节算出汉字的位wm.从低字节算出汉字的区qm,
(qm一176)*94+wm一160就是该况字在汉字集里的位置position,
而该汉字所对应的语音数据的偏移量就是(position一1) 3200+46。
根据定位方法取得汉字在语音库中的发音数据后,根据WAV格式合成语音文件。
定位和合成代码如下:
#define MAXLEN 32000
/*
参数str:为纯汉字的字符串,且编码格式为GBK
返回值:
-1:表示语音库文件打开错误
-2:表示合成语音文件 打开/生成错误
其它:函数执行成功
*/
int wav(char *str)
{
FILE * fpf,*fpt; //文件指针
int qm,wm; //汉字区、位码
int re; //函数返回值
long fileleng=0; //文件长度 后面修改WAV格式时有用
if((fpf=fopen("ddd.wav","rb+"))==NULL) //打开语音库文件
return -1;
if((fpt=fopen("china.wav","wb+"))==NULL) //打开或生成合成后的语音文件,用来播放