tts引擎和数据

资料来自:
[url]http://blog.csdn.net/dedodong/archive/2006/08/22/1105879.aspx[/url]

取得每个汉字读音的代码
#include <stdio.h>
#include <unistd.h>
#define maxlen 32000

int main(){

FILE * fpr;
FILE * fpw;

//打开临时r.wav语音库
if((fpr=fopen("r.wav","r+"))==NULL){
printf("open r.wav error");
return -1;
}
//打开w.wav文件
if((fpw=fopen("w.wav","w+"))==NULL){
printf("open w.wav error");
return -1;
}

char head[46];//存放wav的头信息
char data[1000];
char buffer[maxlen];//存放每个汉字的读音
int fpoint;//文件当前的位置
int fpointtemp=47;
int isnozero=1;
int num=0;

memset(buffer,0,sizeof(buffer));//初始化buffer
fread(head,sizeof(head),1,fpr);//读wav的头信息46个字节
fwrite(head,sizeof(head),1,fpw);//把头信息写到w.wav文件中去
fread(buffer,sizeof(buffer),1,fpr);
fwrite(buffer,sizeof(buffer),1,fpw);

while(!feof(fpr)){//读文件的信息,直到文件尾


// printf("*****************\n");

//读16个字节判断.找到第一次出现都为0的位置
isnozero=1;
while(isnozero){
fread(data,16,1,fpr);


int i;
int j;
int k=0;
for(i=0;i<16;i++){
j=(int)data[i];
k+=j;


}
if(k==0){
printf("read 1000\n");
fread(data,1000,1,fpr);
if(feof(fpr)){

printf("文件被读完1");
fpoint=ftell(fpr);
printf("fpoint si :%d",fpoint);

exit(1);

}

for( i=0;i<1000;i++){
j=(int)data[i];
k+=j;


}
if(k==0){
fpoint=ftell(fpr);
isnozero=0;
printf(" fpoint data is :%d\n",fpoint);

}else{

isnozero=1;


}



}else{

isnozero=1;

}





}

//找到非0的那一行

int iszero=1;
while(iszero){
fread(data,16,1,fpr);

// printf("num is :%d\n",num);


if(feof(fpr)){
printf("num is :%d\n",num);
printf("文件读完了\n");
fpoint=ftell(fpr);

printf("file len is :%d",fpoint);
fclose(fpr);
fclose(fpw);
exit(-1);

}
int i,j,k=0;
for(i=0;i<16;i++){

j=(int)data[i];
k+=j;
// printf("k is :%d\n",k);

}
if(k==0){
iszero=1;
// printf("k==0\n");


}else{
iszero=0;



fseek(fpr,fpoint-16,SEEK_SET);
int isz=1;
while(isz){

fread(data,1,1,fpr);
if((int)data[0]!=0){

//主要的工作{得到每个汉字的语音数据}
fpoint=ftell(fpr);
printf(" num is --%d fpoint is :%d\n",++num,fpoint);

fseek(fpr,fpoint-2,SEEK_SET);
fread(buffer,sizeof(buffer),1,fpr);
fwrite(buffer,sizeof(buffer),1,fpw);
isz=0;

}

}





}


}
}



fclose(fpr);
fclose(fpw);
return 0;


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值