winCE에서 winmm.lib를 쓸 수 없는 관계로,, mmio 함수들을 하나도 쓰지 못하고.ㅠㅜ
결국엔 wave file을 손수 만들어 주어야 하는 귀찮음에 봉착하였다.
wave file header 구조에 따라 다음과 같은 구조체를 선언한다.
typedef struct 
{
           FOURCC		ckID;				// 'RIFF'인지 'LIST'인지 넣어준다. 
           DWORD		dwFileSize;		// 전체 file크기 저장 (data크기 + 40)
           FOURCC		fccType;			// 'WAVE'
           FOURCC		subckID;			// 'fmr '
           DWORD		dwSubChunkSize;	// 16
           WORD		wFormatTag;		// WAVE_FORMAT_PCM
           WORD		nChannels;		// 1 = mono, 2 = stereo
           DWORD		nSamplesPerSec;	// 11025, 22050 등등등
           DWORD		wBitsPerSample;		// 8, 16, 등등등
           WORD		nBlockAlign;		// nChannels * wBitsPerSample/8
           WORD		nAvgBytesPerSec;	// nChannels * wBitsPerSample/8 * nSamplesPerSec
           FOURCC		datackID;			// 'data'
           DWORD		dwDataSize;		// data크기
} WaveFormChunk;
그리고 이 구조체에 대한 변수를 하나 선언하여 알맞은 값을 넣어주고, 
파일의 맨 앞부분에 write한다. 
	WaveFormChunk WaveHeader;
	WaveHeader.ckID = FOURCC_RIFF;
	WaveHeader.dwFileSize = m_dwDataLen + 40;
	WaveHeader. fccType = MAKEFOURCC('W', 'A', 'V', 'E');
	WaveHeader.subckID = MAKEFOURCC('f', 'm', 't', ' ');
	WaveHeader.dwSubChunkSize = 16;
	WaveHeader. wFormatTag = WAVE_FORMAT_PCM;
	WaveHeader. nChannels = 2;//pWaveFormat->nChannels;
	WaveHeader. nSamplesPerSec = 11025;//pWaveFormat->nSamplesPerSec;
	WaveHeader. wBitsPerSample = 8;//pWaveFormat->wBitsPerSample;
	WaveHeader. nBlockAlign = WaveHeader. nChannels * WaveHeader. wBitsPerSample /8;
	WaveHeader. nAvgBytesPerSec = WaveHeader. nSamplesPerSec * WaveHeader. nBlockAlign;          
	WaveHeader.datackID = MAKEFOURCC('d','a','t','a');
	WaveHeader.dwDataSize = m_dwDataLen;
	WriteFile(hFile, & WaveHeader, sizeof(WaveFormChunk), &dwSize, NULL);
	//파일 입출력 참고 (포스팅보러가기)
그리고 나머지  data를 write하면 wave 파일이 생성된다-_-)/
 
댓글 없음:
댓글 쓰기