HTK语音识别生成hmmdef文件小工具

最近一直在参考HTKbook第三章做HTK语音识别,其中有一步是根据proto和monophones0生成一个hmmdefs文件。自己的训练数据太多,没有找到合适的脚本来生成这个hmmdef文件,所以就用C语言写了一个小工具来生成这个文件。

工具名字:gethmmdefs

参数说明:一共需要三个参数

1.proto文件路径

2.monophones0文件路径

3.生成的hmmdefs文件保存路径

文件下载链接:http://pan.baidu.com/s/1eQvTshs

例子:



C源代码

#include 

int main(int argc,char *argv[])
{
	FILE* proto;
	FILE* monophone0;
	FILE* hmmdefs;
	int i=0;
	char ch,ch1;
	char word[20];
	int w=0;
	if (argc < 3)
	{
		printf("error:请输入参数\n");
		return 0;
	}
	proto = fopen(argv[1],"r");
	if (NULL == proto)
	{
		printf("error:打开文件%s异常\n",argv[1]);
		return 0;
	}
	monophone0 = fopen(argv[2],"r");
	if (NULL == monophone0)
	{
		printf("error:打开文件%s异常\n",argv[2]);
		return 0;
	}
	hmmdefs = fopen(argv[3],"w");
	if (NULL == hmmdefs)
	{
		printf("error:打开文件%s异常\n",argv[3]);
		return 0;
	}
	fprintf(hmmdefs,"~o\n");
	fprintf(hmmdefs," 1 39\n");
	fprintf(hmmdefs," 39\n");
	ch = fgetc(monophone0);
	while (1)
	{
		w = 0;
		while (ch != '\n'&& ch != EOF)
		{
			word[w] = ch;
			w++;
			ch = fgetc(monophone0);
		}
		word[w] = '\0';
		if (0 == w)
		{
			break;
		}
		fprintf(hmmdefs,"~h \"%s\"\n",word);
		i = 0;
		ch1 = fgetc(proto);
		while (4 != i)
		{
			if ('\n' == ch1)
			{
				++i;
			}
			ch1 = fgetc(proto);
		}
		while(ch1 != EOF)
		{
			fprintf(hmmdefs,"%c",ch1);
			ch1 = fgetc(proto);
		}
		rewind(proto);
		ch = fgetc(monophone0);
	}
	fclose(proto);
	fclose(monophone0);
	fclose(hmmdefs);
	return 0;
}

如果有不对的地方,还请多多指正。




你可能感兴趣的:(工具,语音识别,C语言,HTK,C语言,HTK,工具,语音识别)