Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  1 сообщение 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 17.07.2005
Похоже заголовок, правильно сформировать не выходит, может кто то уже делал подобное.
Код:
#pragma pack(push,1)
struct WAVEhead
{
   char RIFF[4];
   DWORD SzOfRest;
   char WAVE[4];
   char fmt[4];
   DWORD FormatSz;
   WAVEFORMATEX Format;
   char data[4];
   DWORD dataSz;
};
#pragma pack ( pop)
{
   MMRESULT res=0;
   HWAVEIN dev;
   WAVEFORMATEX form={0};
   form.wFormatTag=WAVE_FORMAT_PCM;
   form.nChannels=1;
   form.nSamplesPerSec=22050;
   form.wBitsPerSample=16;
   form.nAvgBytesPerSec=(form.nSamplesPerSec * form.nChannels) * ( form.wBitsPerSample/8 );
   form.nBlockAlign=form.wBitsPerSample*form.nChannels/8;
   res=waveInOpen(&dev,WAVE_MAPPER,&form,0,0,CALLBACK_NULL);
   WAVEHDR wh={0};
   char *buf=(char*)malloc((1024*1024)*10);
   wh.dwBufferLength=(1024*1024)*10;
   wh.dwFlags=WHDR_PREPARED;
   wh.lpData=buf;
   res=waveInPrepareHeader(dev,&wh,sizeof(wh));
   res=waveInAddBuffer(dev,&wh,sizeof(wh));
   res=waveInStart(dev);
   Sleep(5000);
   res=waveInReset(dev);
   res=waveInUnprepareHeader(dev,&wh,sizeof(wh));
   res=waveInClose(dev);
   DWORD outSz=sizeof(WAVEhead)+wh.dwBytesRecorded;
   char *toOut=(char*)malloc(outSz);
   memset(toOut,NULL,outSz);
   WAVEhead *WFH=(WAVEhead *)toOut;
   memcpy(WFH->RIFF,"RIFF",4);
   WFH->SzOfRest=outSz-8;
   memcpy(WFH->WAVE,"WAVE",4);
   memcpy(WFH->fmt,"fmt",4);
   WFH->FormatSz=sizeof(WAVEFORMATEX);
   memcpy((void*) ( ( (DWORD)WFH )+16 ),&form,sizeof(WAVEFORMATEX));
   memcpy(WFH->data,"data",4);
   WFH->dataSz=wh.dwBytesRecorded;
   toOut+=sizeof(WAVEhead);
   memcpy(toOut,buf,wh.dwBytesRecorded);
   toOut-=sizeof(WAVEhead);
   HANDLE f=CreateFile(L"test.wav",GENERIC_WRITE ,FILE_SHARE_WRITE ,0,CREATE_ALWAYS,
   FILE_ATTRIBUTE_NORMAL,0);
   if(f!=INVALID_HANDLE_VALUE)
   {
      DWORD w=0;
      WriteFile(f,toOut,outSz,&w,0);
      CloseHandle(f);
    }
   free(toOut);
   free(buf);
}



Партнер
Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  1 сообщение 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan