안녕하세요...
답변 잘 봤습니다...
추석은 잘 보내셨는지요...
임프님 말씀대로 전에 로레벨수준의 waveinstart 등의 api를 써서
작업을 해보려고 했습니다...
다음은 녹음하는 부분입니다...
WaveRecord.wf.wFormatTag = 1;
WaveRecord.wf.nChannels = 1;
WaveRecord.wf.nSamplesPerSec = 8000;
WaveRecord.wf.nBlockAlign = 1;
WaveRecord.wf.nAvgBytesPerSec = 8000 * WaveRecord.wf.nChannels * WaveRecord.wf.nBlockAlign;
WaveRecord.wBitsPerSample = 8;
lDatasize = (DWORD)WaveRecord.wf.nAvgBytesPerSec * ctime;
WaveDataBlockIn1 = ::GlobalAlloc(GMEM_MOVEABLE,lDatasize);
pWaveIn1 = (LPBYTE)::GlobalLock(WaveDataBlockIn1);
// pWaveOut1 = pWaveIn1;
waveInOpen((LPHWAVEIN)&hWaveInn1,WAVE_MAPPER,(tWAVEFORMATEX*)&WaveRecord,0L,0L,0L);
WaveHeaderIn1.lpData = (LPSTR)pWaveIn1;
WaveHeaderIn1.dwBufferLength = lDatasize;
WaveHeaderIn1.dwFlags = 0L;
WaveHeaderIn1.dwLoops = 0L;
WaveHeaderIn1.dwBytesRecorded = 0;//lDatasize;
waveInPrepareHeader(hWaveInn1,&WaveHeaderIn1,sizeof(WaveHeaderIn1));
waveInAddBuffer(hWaveInn1,&WaveHeaderIn1,sizeof(WaveHeaderIn1));
waveInStart(hWaveInn1);
while( WaveHeaderIn1.dwBytesRecorded != lDatasize )
Application->ProcessMessages();
waveInReset(hWaveInn1);
waveInUnprepareHeader(hWaveInn1,&WaveHeaderIn1,sizeof(WaveHeaderIn1));
waveInClose(hWaveInn1);
위에서 pWaveIn1 이라는 것이 녹음이 시작되서 자료가 저장되는
부분의 시작 포인터입니다...
물론 웨이브포맷으로 저장되있겠죠...
이 부분부터 원하는 만큼 버퍼에 옮기고 다시 다른장소의 메모리
블록으로 옮겨서 편집을 해보려고 하거든요...
근데 이부분에서 저는 간단히 버퍼를 char Buf[SIZE] 로 잡고
strncpy( Buf , (char *)pWaveIn1 , SIZE)를 써서 다시 다른
메모리 블록으로 옮기니까 자료가 영 엉망인지 출력 자체가 안되더군
요...
음.... 제 설명이 너무 두서가 없어서리.... 이거원....
조언을 부탁드리겠습니다...
안녕히계세요...
|