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()