16,472
社区成员
发帖
与我相关
我的任务
分享
static HWAVEOUT playWavOut;
static WAVEHDR playWavHdr;
static WAVEFORMATEX playWaveform;
static HANDLE playWait;
playWaveform.wFormatTag = WAVE_FORMAT_PCM;
playWaveform.nChannels = N_CHANNEL;
playWaveform.nSamplesPerSec = SAMPLE_RATE;
playWaveform.wBitsPerSample = BITS_PER_SAMPLE;
playWaveform.nBlockAlign = (N_CHANNEL*BITS_PER_SAMPLE)/8;
playWaveform.nAvgBytesPerSec = SAMPLE_RATE*playWaveform.nBlockAlign;
playWaveform.cbSize = 0;
if(playWait){
CloseHandle(playWait);
playWait=NULL;
}
playWait = CreateEvent(NULL, 0, 0, NULL);
if (!waveOutGetNumDevs() ){
TRACE("waveOutGetNumDevs ERR audio.c 95 \n");
_have_init_playback = -1;
return -1;
}
if(waveOutOpen (0,0,&playWaveform,0,0,WAVE_FORMAT_QUERY))
{
TRACE("wave设备初始化失败~");
return false;
}
ret = waveOutOpen(&playWavOut, WAVE_MAPPER, &playWaveform, (DWORD_PTR)playWait, 0L, CALLBACK_EVENT);
TRACE("******* waveOutOpen *******\n");
//ret = waveOutOpen(&playWavOut, WAVE_MAPPER, &playWaveform, NULL, 0L, CALLBACK_EVENT);
if(ret != MMSYSERR_NOERROR){
TRACE("waveOutOpen ERR audio.c 102 \n");
_have_init_playback = -1;
return -1;
}
void playbackPCM(char *buf,int len)
{
int mRet = 0;
ZeroMemory(&playWavHdr, sizeof(WAVEHDR));
playWavHdr.lpData = buf;
playWavHdr.dwBufferLength = len;
playWavHdr.dwFlags = 0L;
playWavHdr.dwLoops = 1L;
mRet = waveOutPrepareHeader(playWavOut, &playWavHdr, sizeof(WAVEHDR));
if( mRet != MMSYSERR_NOERROR ) {
TRACE("waveOutPrepareHeader ERR %d\n",mRet);
}
mRet = waveOutWrite(playWavOut, &playWavHdr, sizeof(WAVEHDR));
if( mRet != MMSYSERR_NOERROR ) {
TRACE("waveOutWrite ERR %d\n",mRet);
}
waveOutUnprepareHeader(playWavOut,&playWavHdr,sizeof(WAVEHDR));
WaitForSingleObject(playWait, INFINITE);
}