一个关于用waveout××进行声音播放的问题,请高手帮忙!来者有分~~谢了
我在做视频会议得项目。我们用电话伴侣(和电脑相连,控制电话的)录音然后在本机声卡上播放,现在可以实现,但是内存总是在增加,到最后死掉,我是实时得在电话伴侣得消息处理函数中申请内存,用于声音得线性转化,然后将转化后得声音在声卡上播放出来。代码如下。
//电话伴侣录音消息处理函数
void CVideo::OnRecordBuf1(WPARAM wParam,LPARAM lParam)
{
if(m_recnum1 == 1)
{
//申请头。
LPWAVEHDR pWaveHdr5 = new WAVEHDR;
ZeroMemory(pWaveHdr5,sizeof(WAVEHDR));
//申请空间存放线性转换后的内存。
char *temp = new char[128];
//初始化
memset(temp,0,128);
//电话伴侣将声音线性转换得函数,转换后得声音放在temp中。
TV_ALaw2Linear((char*)lParam,wParam,(short int*)temp);
//填充Pwavehdr。
pWaveHdr5->lpData = (LPSTR)temp;
pWaveHdr5->dwBufferLength = 2*wParam;
pWaveHdr5->dwBytesRecorded = 0;
pWaveHdr5->dwUser = 0;
pWaveHdr5->dwFlags = 0;
pWaveHdr5->dwLoops = 0;
// 准备头写声卡
waveOutPrepareHeader (hWaveOut, pWaveHdr5, sizeof(WAVEHDR));
waveOutWrite(hWaveOut, pWaveHdr5, sizeof(WAVEHDR));
}
}
播放完一块内存,都会进入声卡的回调函数,我将播放完的内存在这里释放。
//使用电话伴侣时本机声卡播放的回调函数
void CALLBACK CVideo::waveOutProc(HWAVEOUT hwo,UINT uMsg,DWORD dwInstance,DWORD dwParam1,DWORD dwParam2)
{
if( uMsg == WOM_DONE)
{
//得到刚播放完的wavehdr。
PWAVEHDR hdr = (PWAVEHDR)dwParam1;
//释放掉存放播放的内存数据。
delete []hdr->lpData;
hdr->lpData = NULL;
waveOutUnprepareHeader(hWaveOut,(WAVEHDR*)dwParam1,sizeof(WAVEHDR));
//删除wavehdr指针。
delete hdr;
hdr = NULL;
}
}
为什么我在播放的时候申请的内存已经释放了,为什么运行程序的时候内存还是在增加呢,说明还有内存泄漏,关于waveout××api函数,我释放的时候,过程对嘛,有什么遗漏的地方嘛,
请各位帮忙,急,在线等,顶者有分,谢了。