⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 creatfeature.cpp

📁 语音识别的端点检测程序
💻 CPP
字号:
/*******************************************************************
****	文件:		CreatFeature.cpp			****
****	功能:		生成特征矩阵				****
**** 			 					****
****	修改记录:	2001.7.23 摘自G.732.1          		****
*******************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>

#include "Head.h"
//#include "Read_Dat.h"
#include "mfcc_xhg.h"



int ExtractFeature(char *filename_in, char *filename_VadOut);
//特征提取程序

void main(int argc,char **argv)
{
	if(argc!= 3) {
		printf("Usage: endpointD <sourcefilename.dat> <endpoint.txt>\n");
		exit(0);
	}
  char sourcefilename[100],  endpointfilename[100];
  
  strcpy(sourcefilename,argv[1]);
  strcpy(endpointfilename, argv[2]);
  int returnflag;
  
  returnflag=ExtractFeature(sourcefilename, endpointfilename);
  
  printf("Finished !\n");
}



//函数名:ExtractFeature
//传入参数:输入语音文件名 filename_in,输出文件名filename_Cepout
//         添加到文件头中的额外信息
//返回是否成功的标志,0为失败,1为成功
//说明:提取LPCC特征数据函数

int ExtractFeature(char *filename_in, char *filename_Vadout)
{
    FILE *fp_in, *fp_Vadout;
	
	//与语音数据相关的变量
	long testflag;		
	short	StartFrame,EndFrame;
	long	SentenceLength_Byte=0;
	long	lStartPnt, lEndPnt;
	
	long	lSampleRate;
	
	//与特征提取相关的变量
	short	*VoiceData_Short	= NULL;//16bit 
	wav_pcm_header62 WavHead;
	

    fp_in		= fopen(filename_in,"rb");
	fp_Vadout	= fopen(filename_Vadout, "w+");
	if((fp_in==NULL)||(fp_Vadout == NULL))
		return 0;
	memset(&WavHead,0,sizeof(wav_pcm_header62));
	fread(&WavHead,sizeof(wav_pcm_header62),1,fp_in);
	
	
	printf("\n Now the voice data come from file: %s",filename_in);
	printf("\t output: %s\n",filename_Vadout);

	
	printf("Format:%s  Channel:%d  SampleRate: %d  Bits: %d \n",WavHead.ChunkID,WavHead.NumChannels,WavHead.SampleRate,WavHead.BitsPerSample);
 /*
	int SentenceLength_L,SentenceLength_H;
	SentenceLength_L=WavHead.SubChun2Size;
	SentenceLength_H=(WavHead.SubChun2Size1 <<16);
	SentenceLength_Byte=SentenceLength_L+SentenceLength_H;

	printf("FactId:  FactDytes:%d  FactData:%d  SubChunk2ID: %s  SubChun2Size: %d \n",
		   WavHead.FactDytes,WavHead.FactData, WavHead.SubChunk2ID, WavHead.SubChun2Size);
*/
	SentenceLength_Byte=WavHead.SubChun2Size;

	printf(" Audio data size:%d \n",SentenceLength_Byte);

	
	fprintf(fp_Vadout, "The file information:\n");
	fprintf(fp_Vadout, "Format:%s  Channel:%d  SampleRate: %d  Bits: %d \n",WavHead.Format,WavHead.NumChannels,WavHead.SampleRate,WavHead.BitsPerSample);
	fprintf(fp_Vadout, "Audio data size:%d\n", SentenceLength_Byte);
	
	lSampleRate=WavHead.SampleRate;
	printf("%d\n",sizeof(WavHead));


	 printf("%s  %d \n",WavHead.SubChunk2ID,WavHead.SubChun2Size);
//	if(fseek(fp_in,sizeof(WavHead),SEEK_SET)!=0)
//		printf("fseek error!\n");

/*

	VoiceData_Short=(short *)malloc(SentenceLength_Byte);//返回内存指针,注意为什么要转换为short

	printf("VoiceData_Short  0x%x\n",VoiceData_Short);	
	testflag=0L;
	testflag=fread(VoiceData_Short,sizeof(short),SentenceLength_Byte/2,fp_in);//返回元素个数:SentenceLength_Byte/2
	printf("SentenceLength_Byte :%ld\n",SentenceLength_Byte);
	printf("Read byte  %ld\n",testflag*sizeof(short));
 对没有头文件的wav处理
	
	
	
	
	
	
	

	
		VoiceData_Short=VoiceData_Short+2000;

  StartEnd(VoiceData_Short, (SentenceLength_Byte/2-2000), &lStartPnt, &lEndPnt,&StartFrame,&EndFrame,lSampleRate);
//printf("====================");
		//输出端点结果
		fprintf(fp_Vadout, "The frame :\t%ld   to   %ld\n", StartFrame,EndFrame);
		fprintf(fp_Vadout, "The samples point:\t%ld   to   %ld\n", lStartPnt, lEndPnt);
		//删除内存的分配
		if(VoiceData_Short!=NULL)
		{
			free(VoiceData_Short);
			VoiceData_Short=NULL;
		}


	*/

	//关闭文件
	printf("\n");
	fclose(fp_in);
	fclose(fp_Vadout);
  
	return 1;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -