axmol/CocosDenshion/linux/FmodAudioPlayer.h

172 lines
3.9 KiB
C
Raw Normal View History

2012-08-02 13:02:59 +08:00
/*
* FmodAudioPlayer.h
*
* Created on: Aug 18, 2011
* Author: laschweinski
*/
#ifndef FMODAUDIOPLAYER_H_
#define FMODAUDIOPLAYER_H_
#include "fmod.hpp"
#include "fmod_errors.h"
#include "AudioPlayer.h"
#include "string"
#include <map>
using namespace std;
namespace CocosDenshion {
class FmodAudioPlayer : public AudioPlayer{
public:
FmodAudioPlayer();
virtual ~FmodAudioPlayer();
static FmodAudioPlayer* sharedPlayer();
virtual void close();
/**
@brief Preload background music
@param pszFilePath The path of the background music file,or the FileName of T_SoundResInfo
*/
virtual void preloadBackgroundMusic(const char* pszFilePath);
/**
@brief Play background music
@param pszFilePath The path of the background music file,or the FileName of T_SoundResInfo
@param bLoop Whether the background music loop or not
*/
virtual void playBackgroundMusic(const char* pszFilePath, bool bLoop);
/**
@brief Stop playing background music
@param bReleaseData If release the background music data or not.As default value is false
*/
virtual void stopBackgroundMusic(bool bReleaseData);
/**
@brief Pause playing background music
*/
virtual void pauseBackgroundMusic();
/**
@brief Resume playing background music
*/
virtual void resumeBackgroundMusic();
/**
@brief Rewind playing background music
*/
virtual void rewindBackgroundMusic();
virtual bool willPlayBackgroundMusic();
/**
@brief Whether the background music is playing
@return If is playing return true,or return false
*/
virtual bool isBackgroundMusicPlaying();
// properties
/**
@brief The volume of the background music max value is 1.0,the min value is 0.0
*/
virtual float getBackgroundMusicVolume();
/**
@brief set the volume of background music
@param volume must be in 0.0~1.0
*/
virtual void setBackgroundMusicVolume(float volume);
/**
@brief The volume of the effects max value is 1.0,the min value is 0.0
*/
virtual float getEffectsVolume();
/**
@brief set the volume of sound effecs
@param volume must be in 0.0~1.0
*/
virtual void setEffectsVolume(float volume);
// for sound effects
/**
@brief Play sound effect
@param pszFilePath The path of the effect file,or the FileName of T_SoundResInfo
@bLoop Whether to loop the effect playing, default value is false
*/
virtual unsigned int playEffect(const char* pszFilePath, bool bLoop = false);
/**
@brief Stop playing sound effect
@param nSoundId The return value of function playEffect
*/
virtual void stopEffect(unsigned int nSoundId);
/**
@brief preload a compressed audio file
@details the compressed audio will be decode to wave, then write into an
internal buffer in SimpleaudioEngine
*/
virtual void preloadEffect(const char* pszFilePath);
/**
@brief unload the preloaded effect from internal buffer
@param[in] pszFilePath The path of the effect file,or the FileName of T_SoundResInfo
*/
virtual void unloadEffect(const char* pszFilePath);
/**
@brief pause an effect identified by sound id
@param[in] uSoundId sound id
*/
virtual void pauseEffect(unsigned int uSoundId);
/**
@brief pause all playing effects
*/
virtual void pauseAllEffects();
/**
@brief resume an effect identified by sound id
@param[in] uSoundId sound id
*/
virtual void resumeEffect(unsigned int uSoundId);
/**
@brief resume a effect identified by sound id
*/
virtual void resumeAllEffects();
/**
@brief stop all playing effects
*/
virtual void stopAllEffects();
private:
void init();
map<string, FMOD::Sound*> mapEffectSound;
map<unsigned int, FMOD::Channel*> mapEffectSoundChannel;
FMOD::System* pSystem;
FMOD::Sound* pMusic; //BGM
FMOD::Channel* pBGMChannel;
FMOD::ChannelGroup* pChannelGroup;
unsigned int iSoundChannelCount;
string sMusicPath;
};
} /* namespace CocosDenshion */
#endif /* FMODAUDIOPLAYER_H_ */