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

3 篇文章 0 订阅
1 篇文章 0 订阅

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

工具名字:gethmmdefs

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

1.proto文件路径

2.monophones0文件路径

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

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

例子:



C源代码

#include <STDIO.H>

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,"<STREAMINFO> 1 39\n");
	fprintf(hmmdefs,"<VECSIZE> 39<NULLD><MFCC_D_A_0><DIAGC>\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;
}

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值