кто знает, подскажите, что неправльно в моем коде. цикл выполняется только 500 раз=( программа позволяет выбрать устройство входа и выхода и должна просто транслировать звук.... собсно программа Код | #include <iostream.h> #include <windows.h> #include <MMSYSTEM.H> #include <MMREG.H> #include <MSACM.H>
#pragma comment(lib, "winmm.lib") void CALLBACK dmsg(HWAVE Handle,UINT Msg, DWORD Instance, DWORD Param1, DWORD Param2) { switch(Msg) { case MM_WOM_OPEN: cout<<"Out dev opened"<<endl; break; case MM_WIM_OPEN: cout<<"In dev opened"<<endl; break; case MM_WOM_CLOSE: cout<<"Out dev closed"<<endl; break; case MM_WIM_CLOSE: cout<<"In dev closed"<<endl; break; default: cout<<"Dev event"<<endl; break; };
} void main() { char buf[1000]; WAVEFORMATEX wfex; WAVEINCAPS wic; WAVEOUTCAPS woc; WAVEHDR whdr; MMTIME mmt;
HWAVEIN hwi; HWAVEOUT hwo;
wfex.wFormatTag=WAVE_FORMAT_PCM; wfex.nChannels=1; wfex.nSamplesPerSec=100; wfex.nAvgBytesPerSec=200; wfex.nBlockAlign=2; wfex.wBitsPerSample=16; wfex.cbSize=0; whdr.dwBufferLength=1000; whdr.lpData=buf; whdr.dwUser=0; //èãðîðèðóåòñÿ whdr.dwFlags=0; whdr.dwLoops=0;
mmt.wType=TIME_MS; int t; cout<<"Num in devs: "<<(t=waveInGetNumDevs ())<<endl; for(int i=0;i<t;i++) { waveInGetDevCaps (i,&wic,sizeof(wic)); cout<<i<<" - "<<wic.szPname<<endl;
} cout<<"Num out devs: "<<(t=waveOutGetNumDevs ())<<endl; for(i=0;i<t;i++) { waveOutGetDevCaps (i,&woc,sizeof(woc)); cout<<i<<" - "<<woc.szPname<<endl;
} cout<<"Select In dev : "; cin>>t;
t=0; if(waveInOpen (&hwi,t,&wfex,(DWORD)dmsg,NULL,CALLBACK_FUNCTION)!=0) cerr<<"Error opening dev"<<endl;
cout<<"Select Out dev : "; cin>>t; if(waveOutOpen (&hwo,t,&wfex,(DWORD)dmsg,NULL,CALLBACK_FUNCTION)!=0) cerr<<"Error opening dev"<<endl;
int f=0; while(1) { if((t=waveInPrepareHeader(hwi,&whdr, sizeof(whdr)))!=0) { cerr<<"Error in header prepearing "<<t<<endl; break; } if((t=waveInAddBuffer (hwi, &whdr, sizeof(whdr)))!=0) { cerr<<"Error adding input buffer "<<t<<endl; switch(t) { case MMSYSERR_NODRIVER: cerr<<"No driver"<<endl; break; case MMSYSERR_BADDEVICEID: cerr<<"No device"<<endl; break; case MMSYSERR_ALLOCATED: cerr<<"Oppend"<<endl; break; case MMSYSERR_NOMEM: cerr<<"No mem "<<whdr.dwBytesRecorded<<endl; break; } break; break; } waveInStart(hwi); while(!whdr.dwFlags==WHDR_DONE) {;} whdr.dwFlags=0; if((t=waveInUnprepareHeader(hwi,&whdr, sizeof(whdr)))!=0) { cerr<<"Error in header unprepearing "<<t<<endl; break; } cout<<"Filtered "<<f<<endl; f++; if((t=waveOutPrepareHeader(hwo,&whdr, sizeof(whdr)))!=0) { cerr<<"Error out header prepearing "<<t<<endl; } if((t=waveOutWrite (hwo, &whdr, sizeof(whdr)))!=0) { cerr<<"Error adding output buffer"<<endl; switch(t) { case MMSYSERR_NODRIVER: cerr<<"No driver"<<endl; break; case MMSYSERR_BADDEVICEID: cerr<<"No device"<<endl; break; case MMSYSERR_ALLOCATED: cerr<<"Oppend"<<endl; break; case MMSYSERR_NOMEM: cerr<<"No mem "<<whdr.dwBytesRecorded<<endl; break; } while(!whdr.dwFlags==WHDR_DONE) {;} whdr.dwFlags=0; if((t=waveOutUnprepareHeader(hwo,&whdr, sizeof(whdr)))!=0) { cerr<<"Error out header unprepearing "<<t<<endl; break; } } waveInClose(hwi); waveOutClose(hwo); }
|
это первая моя программа со звуком, так что сильно не бить Это сообщение отредактировал(а) finomen - 23.9.2008, 14:54
|