导读:
nt DSound_Load_Wav(char* filename,int control_flags)
{
HMMIO handle ;
MMCKINFO mmckriff,mmckIn;
PCMWAVEFORMAT pwfm;
memset(&mmckriff,0,sizeof(MMCKINFO));
if((handle= mmioOpen(filename,NULL,MMIO_READ|MMIO_ALLOCBUF))==NULL)
return 0;
//--------------------------------------------
//进入块(chunk),查找 riff和wave的标记
//----------------------------------------------
if(0 !=mmioDescend(handle,&mmckriff,NULL,0))
{
mmioClose(handle,0);
return -1;
}
//-----------------------------------------
//#define FOURCC_RIFF mmioFOURCC('R','I','F','F')
//----------------------------------------------
if(mmckriff.ckid !=FOURCC_RIFF||mmckriff.fccType !=mmioFOURCC('W','A','V','E'))
{
mmioClose(handle,0);
return -1;
}
/
//查找 fmt 块
mmckIn.ckid = mmioFOURCC('f','m','t',' ');
if(0 !=mmioDescend(handle,&mmckIn,&mmckriff,MMIO_FINDCHUNK))
{
mmioClose(handle,0);
return -1;
}
//fmt块的格式与PCMWAVEFORMAT 的格式定义相同
//所以读入临时变量,最后写入 wmtf中
if(mmioRead(handle,(HPSTR)&pwfm,sizeof(PCMWAVEFORMAT))!=sizeof(PCMWAVEFORMAT))
{
mmioClose(handle,0);
return -1;
}
//检测是不是 pc的wave标准格式
//
//
if(pwfm.wf.wFormatTag != WAVE_FORMAT_PCM)
{
mmioClose(handle,0);
return -1;
}
/
//给wmfx赋值
/
memcpy(&wfmx,&pwfm,sizeof(pwfm));
wfmx.cbSize =0;
if(0 != mmioAscend(handle,&mmckIn,0))
{
mmioClose(handle,0);
return -1;
}
/
//查找 data chunk
/
mmckIn.ckid = mmioFOURCC('d','a','t','a');
if(0 !=mmioDescend(handle,&mmckIn,&mmckriff,MMIO_FINDCHUNK))
{
mmioClose(handle,0);
return -1;
}
sndBuffer = new UCHAR[mmckIn.cksize];
/
//数据写入sndBuffer
/
mmioRead(handle,(HPSTR)sndBuffer,mmckIn.cksize);
mmioClose(handle,0);
本文转自
http://soa.5d6d.com/redirect.php?fid=11&tid=51&goto=nextnewset
nt DSound_Load_Wav(char* filename,int control_flags)
{
HMMIO handle ;
MMCKINFO mmckriff,mmckIn;
PCMWAVEFORMAT pwfm;
memset(&mmckriff,0,sizeof(MMCKINFO));
if((handle= mmioOpen(filename,NULL,MMIO_READ|MMIO_ALLOCBUF))==NULL)
return 0;
//--------------------------------------------
//进入块(chunk),查找 riff和wave的标记
//----------------------------------------------
if(0 !=mmioDescend(handle,&mmckriff,NULL,0))
{
mmioClose(handle,0);
return -1;
}
//-----------------------------------------
//#define FOURCC_RIFF mmioFOURCC('R','I','F','F')
//----------------------------------------------
if(mmckriff.ckid !=FOURCC_RIFF||mmckriff.fccType !=mmioFOURCC('W','A','V','E'))
{
mmioClose(handle,0);
return -1;
}
/
//查找 fmt 块
mmckIn.ckid = mmioFOURCC('f','m','t',' ');
if(0 !=mmioDescend(handle,&mmckIn,&mmckriff,MMIO_FINDCHUNK))
{
mmioClose(handle,0);
return -1;
}
//fmt块的格式与PCMWAVEFORMAT 的格式定义相同
//所以读入临时变量,最后写入 wmtf中
if(mmioRead(handle,(HPSTR)&pwfm,sizeof(PCMWAVEFORMAT))!=sizeof(PCMWAVEFORMAT))
{
mmioClose(handle,0);
return -1;
}
//检测是不是 pc的wave标准格式
//
//
if(pwfm.wf.wFormatTag != WAVE_FORMAT_PCM)
{
mmioClose(handle,0);
return -1;
}
/
//给wmfx赋值
/
memcpy(&wfmx,&pwfm,sizeof(pwfm));
wfmx.cbSize =0;
if(0 != mmioAscend(handle,&mmckIn,0))
{
mmioClose(handle,0);
return -1;
}
/
//查找 data chunk
/
mmckIn.ckid = mmioFOURCC('d','a','t','a');
if(0 !=mmioDescend(handle,&mmckIn,&mmckriff,MMIO_FINDCHUNK))
{
mmioClose(handle,0);
return -1;
}
sndBuffer = new UCHAR[mmckIn.cksize];
/
//数据写入sndBuffer
/
mmioRead(handle,(HPSTR)sndBuffer,mmckIn.cksize);
mmioClose(handle,0);
本文转自
http://soa.5d6d.com/redirect.php?fid=11&tid=51&goto=nextnewset