📄 cwave.cpp
字号:
//声波处理程序
//
//修正:jzZ 2000,05,27
#include "CWave.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)
{
//申明变量
HMMIO hmmio;
MMCKINFO mmCkRiff;
MMCKINFO mmCkChunk;
MMRESULT result;
LONG bytesread;
Wave_Size = NULL;
//打开参数指向的文件
hmmio = mmioOpen(fn, NULL, MMIO_READ | MMIO_ALLOCBUF);
if (hmmio == NULL)
return FALSE;
//首先以WAVE文件方式打开
mmCkRiff.fccType = mmioFOURCC('W', 'A', 'V', 'E');
result = mmioDescend(hmmio, &mmCkRiff, NULL, MMIO_FINDRIFF);
if (result != MMSYSERR_NOERROR)
{
return FALSE;
}
//再用fmt方式打开
mmCkChunk.ckid = mmioFOURCC('f', 'm', 't', ' ');
result = mmioDescend(hmmio, &mmCkChunk, &mmCkRiff, MMIO_FINDCHUNK);
if (result != MMSYSERR_NOERROR)
{
return FALSE;
}
lpWaveFormatEx = new WAVEFORMATEX;
//在中WAVEFORMATEX填写信息
bytesread = mmioRead(hmmio, (char *)lpWaveFormatEx, sizeof(WAVEFORMATEX));
if (bytesread == -1)
{
return FALSE;
}
result = mmioAscend(hmmio, &mmCkChunk, 0);
if (result != MMSYSERR_NOERROR)
{
return FALSE;
}
mmCkChunk.ckid = mmioFOURCC('d', 'a', 't', 'a');
result = mmioDescend(hmmio, &mmCkChunk, &mmCkRiff, MMIO_FINDCHUNK);
if (result != MMSYSERR_NOERROR)
{
return FALSE;
}
//保存文件尺寸
Wave_Size = mmCkChunk.cksize;
//为波形文件分配内存
Wave_Data = (char *)GlobalAlloc(GMEM_FIXED, Wave_Size);
if (Wave_Data == NULL)
{
return FALSE;
}
// 从波形文件读取数据
bytesread = mmioRead(hmmio, (char *)Wave_Data, Wave_Size);
if (bytesread == -1)
{
return FALSE;
}
// 完成,关闭文件
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 + -