www.pudn.com > coolMEMORY.rar > Sound.cpp


//----------------------------------------------------------------------------- 
// File: Sound.cpp 
//----------------------------------------------------------------------------- 
 
#include "AS\AS_Engine.h" 
#include "ModuleHeaders.h" 
 
 
// Variables: ***************************************************************** 
char byCurrentMusic[256]; // The current played music file 
AS_FMOD_SAMPLE GameSample[GAME_SAMPLES]; 
AS_FMOD_SAMPLE *pPairFoundSample = &GameSample[0], 
			   *pNoPairFoundSample = &GameSample[1], 
			   *pRotateCardSample = &GameSample[2], 
			   *pClickOnCardSample = &GameSample[3]; 
AS_FMOD_MUSIC GameMusic; 
char **pbyFoundMusic; // The names of the found music 
int iFoundMusic; // The number of found music files 
/////////////////////////////////////////////////////////////////////////////// 
 
// Functions: ***************************************************************** 
void LoadSamples(void); 
void StartCurrentMusic(void); 
void RestartSoundSystem(void); 
void StartMusic(char *); 
void StopMusic(void); 
void CheckMusic(void); 
void EnumerateMusic(void); 
void DestroyFoundMusic(void); 
/////////////////////////////////////////////////////////////////////////////// 
 
 
void LoadSamples(void) 
{ // begin LoadSamples() 
	char byFilename[GAME_SAMPLES][256] = {"PairFound.wav", "NoPairFound.wav", 
										  "RotateCard.wav", "ClickOnCard.wav"}; 
	 
	ASLoadFmodSamples(byFilename, GAME_SAMPLES, GameSample); 
} // end LoadSamples() 
 
void StartCurrentMusic(void) 
{ // begin StartCurrentMusic() 
	char byTemp[256]; 
  
	sprintf(byTemp, "%s%s\\%s", _AS->byProgramPath, _AS->byMusicDirectory, byCurrentMusic); 
	if(!_AS->bSoundPossible || !_ASConfig->bMusic) 
		return; 
 
	ASDestroyFmodMusic(&GameMusic); 
	// Play the game music: 
	_AS->WriteLogMessage("Load music: %s", byTemp); 
	if(ASPlayFmodMusic(&GameMusic, byTemp)) 
		_AS->WriteLogMessage("Couldn't load this music!"); 
} // end StartCurrentMusic() 
 
void RestartSoundSystem(void) 
{ // begin RestartSoundSystem() 
	_AS->WriteLogMessage("Restart sound system"); 
 
	ASDestroyFmodSamples(GAME_SAMPLES, GameSample); 
	StopMusic(); 
	ASDestroyFmod(); 
	ASInitFmod(); 
	LoadSamples(); 
	StartCurrentMusic(); 
} // end RestartSoundSystem() 
 
void StartMusic(char *pbyFilename) 
{ // begin StartMusic() 
	char byTemp[256]; 
  
	if(!strcmp(byCurrentMusic, pbyFilename)) 
		return; 
 
	ASDestroyFmodMusic(&GameMusic); 
 
	// Play the menu music: 
	sprintf(byTemp, "%s%s\\%s", _AS->byProgramPath, _AS->byMusicDirectory, pbyFilename); 
	strcpy(byCurrentMusic, pbyFilename); 
	if(!_AS->bSoundPossible || !_ASConfig->bMusic) 
		return; 
 
	_AS->WriteLogMessage("Load music: %s", byTemp); 
	if(ASPlayFmodMusic(&GameMusic, byTemp)) 
	{ 
		strcpy(byCurrentMusic, ""); 
		_AS->WriteLogMessage("Couldn't load this music!"); 
	} 
	ShowSmallMessage(byTemp, 3000); 
} // end StartMusic() 
 
void StopMusic(void) 
{ // begin StopMusic() 
	if(!_AS->bSoundPossible) 
		return; 
 
	ASDestroyFmodMusic(&GameMusic); 
	memset(&GameMusic, 0, sizeof(AS_FMOD_MUSIC)); 
} // end StopMusic() 
 
void CheckMusic(void) 
{ // begin CheckMusic() 
	if((GameMusic.pMod && !FMUSIC_IsFinished(GameMusic.pMod)) || 
	   !bASMusicFinished) 
		return; // The music is still playing! 
 
	StartCurrentMusic(); // Restart the current music! 
} // end CheckMusic() 
 
void EnumerateMusic(void) 
{ // begin EnumerateMusic() 
	WIN32_FIND_DATA FindFileData; 
	char byTemp[256]; 
	HANDLE Find; 
	                    
	_AS->WriteLogMessage("Enumerate music files"); 
	if(pbyFoundMusic) 
		DestroyFoundMusic(); 
	iFoundMusic = 0; 
	sprintf(byTemp, "%s%s\\*.*", _AS->byProgramPath, _AS->byMusicDirectory); 
	Find = FindFirstFile(byTemp, &FindFileData); 
	for(;;) 
	{ 
		// Check if its an supported music file: 
		if(ASCheckStringEnding(FindFileData.cFileName, "mid") || 
		   ASCheckStringEnding(FindFileData.cFileName, "mp3") || 
		   ASCheckStringEnding(FindFileData.cFileName, "s3m") || 
		   ASCheckStringEnding(FindFileData.cFileName, "xm") || 
		   ASCheckStringEnding(FindFileData.cFileName, "it")) 
		{ // We found an supported music file: 
			iFoundMusic++; 
			pbyFoundMusic = (char **) realloc(pbyFoundMusic, sizeof(char **)*iFoundMusic); 
			pbyFoundMusic[iFoundMusic-1] = new char[strlen(FindFileData.cFileName)+1]; 
			strcpy(pbyFoundMusic[iFoundMusic-1], FindFileData.cFileName); 
		} 
 
		if(!FindNextFile(Find, &FindFileData)) 
			break; 
	} 
} // end EnumerateMusic() 
 
void DestroyFoundMusic(void) 
{ // begin DestroyFoundMusic() 
	for(int i = 0; i < iFoundMusic; i++) 
		SAFE_DELETE(pbyFoundMusic[i]); 
	SAFE_DELETE(pbyFoundMusic); 
	iFoundMusic = 0; 
} // end DestroyFoundMusic()