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

📄 wave.cpp

📁 经典飞机游戏的源代码 dx实现
💻 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 + -