📄 wave.cpp
字号:
#include "wave.h"
CWave::CWave()
{
Wave_Data = NULL;
Wave_Size = 0;
}
CWave::CWave(LPSTR fn)
{
Wave_Data = NULL;
Wave_Size = 0;
LoadWaveFile(fn);
}
CWave::~CWave()
{
GlobalFree(Wave_Data);
delete lpWaveFormatEx;
Wave_Data = NULL;
Wave_Size = 0;
}
BOOL CWave::LoadWaveFile(LPSTR fn)
{
// declare useful local variables
HMMIO hmmio; // a MMio stucture;
MMCKINFO mmCkRiff; // The Riff chunk information
MMCKINFO mmCkChunk; // The Chunks information (Format 'Fmt 'and Data 'data');
MMRESULT result; // Check the result for each preparing stage
LONG bytesread;
Wave_Size = NULL;
// Open a file which name from the parameter
hmmio = mmioOpen(fn, NULL, MMIO_READ | MMIO_ALLOCBUF);
if (hmmio == NULL)
return FALSE;
// Find the first level chunk: Riff chunk, with fccType 'WAVE'
mmCkRiff.fccType = mmioFOURCC('W', 'A', 'V', 'E');
result = mmioDescend(hmmio, &mmCkRiff, NULL, MMIO_FINDRIFF);
if (result != MMSYSERR_NOERROR)
{
return FALSE;
}
// find second level chunk: Format chunk, with ckid 'fmt '
mmCkChunk.ckid = mmioFOURCC('f', 'm', 't', ' ');
result = mmioDescend(hmmio, &mmCkChunk, &mmCkRiff, MMIO_FINDCHUNK);
if (result != MMSYSERR_NOERROR)
{
return FALSE;
}
lpWaveFormatEx = new WAVEFORMATEX;
// load all information about format to a WAVEFORMATEX structure
bytesread = mmioRead(hmmio, (char *)lpWaveFormatEx, sizeof(WAVEFORMATEX));
if (bytesread == -1)
{
return FALSE;
}
// return to first level of chunk: RIFF
result = mmioAscend(hmmio, &mmCkChunk, 0);
if (result != MMSYSERR_NOERROR)
{
return FALSE;
}
// find second level chunk: chunk data, with ckid 'data'
mmCkChunk.ckid = mmioFOURCC('d', 'a', 't', 'a');
result = mmioDescend(hmmio, &mmCkChunk, &mmCkRiff, MMIO_FINDCHUNK);
if (result != MMSYSERR_NOERROR)
{
return FALSE;
}
// save size of this wave file.
Wave_Size = mmCkChunk.cksize;
//now, allocate memory for Wave_Data
Wave_Data = (char *)GlobalAlloc(GMEM_FIXED, Wave_Size);
if (Wave_Data == NULL)
{
return FALSE;
}
// read all data from wave file
bytesread = mmioRead(hmmio, (char *)Wave_Data, Wave_Size);
if (bytesread == -1)
{
return FALSE;
}
// we've done, close up the file
mmioClose(hmmio, 0);
return TRUE;
}
DWORD CWave::GetWaveSize()
{
return Wave_Size;
}
char *CWave::GetWaveData()
{
return Wave_Data;
}
WAVEFORMATEX *CWave::GetWaveFormatEXPtr()
{
return lpWaveFormatEx;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -