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 파일이 생성된다-_-)/
댓글 없음:
댓글 쓰기