www.pudn.com > TrueSpeech > main.cpp


# include "iostream.h" 
# include "conio.h" 
# include "stdio.h" 
 
# include "windows.h" 
# include "mmsystem.h" 
# include "mmreg.h"  // Multimedia registration 
# include "msacm.h"	// Audio Compression Manager 
 
WAVEFORMATEX           waveFormat; 
PTRUESPEECHWAVEFORMAT mp3format = NULL; 
 
void convert(); 
 
BOOL CALLBACK FormatEnumProc 
( 
    HACMDRIVERID            hadid, 
    LPACMFORMATDETAILSA     pafd, 
    DWORD                   dwInstance, 
    DWORD                   fdwSupport 
) 
{ 
 
	WORD        wFormatTag;         /* format type */ 
    WORD        nChannels;          /* number of channels (i.e. mono, stereo...) */ 
    DWORD       nSamplesPerSec;     /* sample rate */ 
    DWORD       nAvgBytesPerSec;    /* for buffer estimation */ 
    WORD        nBlockAlign;        /* block size of data */ 
    WORD        wBitsPerSample;     /* number of bits per sample of mono data */ 
    WORD        cbSize;    
	 
	if(pafd->pwfx->wFormatTag == WAVE_FORMAT_DSPGROUP_TRUESPEECH) // WAVE_FORMAT_MPEGLAYER3 
	{ 
		if(mp3format == NULL) 
			mp3format = (PTRUESPEECHWAVEFORMAT)pafd->pwfx;	 
		/* 
		cout<<"Channel:"<pwfx->nChannels<<" Sample Rate:"<pwfx->nSamplesPerSec<< \ 
			  " AvgBytes:"<pwfx->nAvgBytesPerSec << \ 
			  " Block Align:"<pwfx->nBlockAlign<< \ 
			  " Bit sample:"<pwfx->wBitsPerSample<< \ 
			  " cbSize:"<pwfx->cbSize<< \ 
			  pafd->endl; 
		*/	   
	} 
 
	return true; 
 
} 
 
BOOL CALLBACK fnCallback( 
    HACMDRIVERID            hadid, 
    DWORD                   dwInstance, 
    DWORD                   fdwSupport 
) 
{ 
	 
	MMRESULT			mmRet = 0; 
	DWORD				dwSize = 0; 
	ACMDRIVERDETAILS	add; 
	ACMFORMATDETAILS	fd;  
	HACMDRIVER			had; 
 
	if(fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC) 
	{ 
		add.cbStruct = sizeof(add); 
		mmRet = acmDriverDetails(hadid,&add,0); 
		/* 
		cout<<"Full Name:"<cbSize = LOWORD(dwSize) - sizeof(WAVEFORMATEX); 
		pwf->wFormatTag = WAVE_FORMAT_UNKNOWN; 
 
		memset(&fd,0,sizeof(fd)); 
		fd.cbStruct = sizeof(fd); 
		fd.pwfx = pwf; 
		fd.cbwfx = dwSize; 
		fd.dwFormatTag = WAVE_FORMAT_UNKNOWN; 
		mmRet = acmFormatEnum((HACMDRIVER)had,&fd,FormatEnumProc,(DWORD)hadid,0); 
		 
		acmDriverClose(had,0); 
	} 
	return true; 
} 
 
void main() 
{ 
 
 
	DWORD dwCode = 0; 
	acmDriverEnum((ACMDRIVERENUMCB)fnCallback,dwCode,ACM_DRIVERENUMF_DISABLED); 
	convert(); 
	 
} 
 
void convert() 
{ 
 
	HACMSTREAM hstr = NULL; 
	MMRESULT	mmRet = 0; 
	DWORD		NumberofRead,NumberofWrite; 
	ACMSTREAMHEADER shdr; 
	HANDLE hsrcFile,hdesFile; 
 
	char *srcBuf,*desBuf; 
 
	waveFormat.wFormatTag = WAVE_FORMAT_PCM; 
	waveFormat.nChannels = 1;//2; // stereo 
	waveFormat.nSamplesPerSec = 8000; // 44.1kHz 
	waveFormat.wBitsPerSample = 16; // 16 bits 
	waveFormat.nBlockAlign = 2;//4; // 4 bytes of data at a time are useful (1 sample) 
	waveFormat.nAvgBytesPerSec = 2*8000;//4 * 44100; // byte-rate 
	waveFormat.cbSize = 0; // no more data to follow 
 
	hsrcFile = CreateFile("111.tsp",GENERIC_READ,FILE_SHARE_READ, 
		               NULL, 
					   OPEN_EXISTING, 
					   FILE_ATTRIBUTE_NORMAL, 
					   NULL);    
	 
	hdesFile = CreateFile("demo5.pcm",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ, 
		               NULL, 
					   CREATE_ALWAYS, 
					   FILE_ATTRIBUTE_NORMAL, 
					   NULL);    
	 
	DWORD nSize = GetFileSize(hsrcFile,0); 
	DWORD nDesSize = 0; 
 
	mmRet = acmStreamOpen(&hstr,0,(WAVEFORMATEX *)mp3format,&waveFormat,NULL,NULL,0,ACM_STREAMOPENF_NONREALTIME); 
	cout<<"Open Code:"<