⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waveplay.cpp

📁 MDF监控源码2
💻 CPP
字号:
LPSTR szFileName;//声音文件名 
MMCKINFO mmckinfoParent; 
MMCKINFO mmckinfoSubChunk; 
DWORD dwFmtSize; 
HMMIO m_hmmio;//音频文件句柄 
DWORD m_WaveLong; 
HPSTR lpData;//音频数据 
HANDLE m_hData; 
HANDLE m_hFormat; 
WAVEFORMATEX * lpFormat; 
DWORD m_dwDataOffset; 
DWORD m_dwDataSize; 
WAVEHDR pWaveOutHdr; 
WAVEOUTCAPS pwoc; 
HWAVEOUT hWaveOut; 
//打开波形文件 
if(!(m_hmmio=mmioOpen(szFileName,NULL,MMIO_READ|MMIO_ALLOCBUF))) 
{ 
	//File open Error 
	Error("Failed to open the file.");//错误处理函数 
return false; 
} 

//检查打开文件是否是声音文件 
mmckinfoParent.fccType =mmioFOURCC('W','A','V','E'); 
if(mmioDescend(m_hmmio,(LPMMCKINFO)&mmckinfoParent,NULL,MMIO_FINDRIFF)) 
{ 
//NOT WAVE FILE AND QU99v 
} 
//寻找 'fmt' 块 
mmckinfoSubChunk.ckid =mmioFOURCC('f','m','t',' '); 
if(mmioDescend(m_hmmio,&mmckinfoSubChunk,&mmckinfoParent,MMIO_FINDCHUNK)) 
{ 
//Can't find 'fmt' chunk 
} 
//获得 'fmt '块的大小,申请内存 
dwFmtSize=mmckinfoSubChunk.cksize ; 
m_hFormat=LocalAlloc(LMEM_MOVEABLE,LOWORD(dwFmtSize)); 
if(!m_hFormat) 
{ 
//failed alloc memory 
} 
lpFormat=(WAVEFORMATEX*)LocalLock(m_hFormat); 
if(!lpFormat) 
{ 
//failed to lock the memory 
} 
if((unsigned long)mmioRead(m_hmmio,(HPSTR)lpFormat,dwFmtSize)!=dwFmtSize) 
{ 
//failed to read format chunk 
} 
//离开 fmt 块 
mmioAscend(m_hmmio,&mmckinfoSubChunk,0); 
//寻找 'data' 块 
mmckinfoSubChunk.ckid=mmioFOURCC('d','a','t','a'); 
if(mmioDescend(m_hmmio,&mmckinfoSubChunk,&mmckinfoParent,MMIO_FINDCHUNK)) 
{ 
//Can't find 'data' chunk 
} 
//获得 'data'块的大小 
m_dwDataSize=mmckinfoSubChunk.cksize ;


m_dwDataOffset =mmckinfoSubChunk.dwDataOffset ; 
if(m_dwDataSize==0L) 
{ 
//no data in the 'data' chunk 
} 
//为音频数据分配内存 
lpData=new char[m_dwDataSize]; 
if(!lpData) 
{ 
//faile 
} 
if(mmioSeek(m_hmmio,SoundOffset,SEEK_SET)<0) 
{ 
//Failed to read the data chunk 
} 
m_WaveLong=mmioRead(m_hmmio,lpData,SoundLong); 
if(m_WaveLong<0) 
{ 
//Failed to read the data chunk 
} 
//检查音频设备,返回音频输出设备的性能 
if(waveOutGetDeVCaps(WAVE_MAPPER,&pwoc,sizeof(WAVEOUTCAPS))!=0) 
{ 
//Unable to allocate or lock memory 
} 
//检查音频输出设备是否能播放指定的音频文件 
if(waveOutOpen(&hWaveOut,DevsNum,lpFormat,NULL,NULL,CALLBACK_NULL)!=0) 
{ 
//Failed to OPEN the wave out devices 
} 
//准备待播放的数据 
pWaveOutHdr.lpData =(HPSTR)lpData; 
pWaveOutHdr.dwBufferLength =m_WaveLong; 
pWaveOutHdr.dwFlags =0; 
if(waveOutPrepareHeader(hWaveOut,&pWaveOutHdr,sizeof(WAVEHDR))!=0) 
{ 
//Failed to prepare the wave data buffer 
} 
//播放音频数据文件 
if(waveOutWrite(hWaveOut,&pWaveOutHdr,sizeof(WAVEHDR))!=0) 
{ 
//Failed to write the wave data buffer 
} 
//关闭音频输出设备,释放内存 
waveOutReset(hWaveOut); 
waveOutClose(hWaveOut); 
LocalUnlock(m_hFormat); 
LocalFree(m_hFormat); 
delete [] lpData; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -