History: File SoundManager.h
Source of version: 3 (current)
Copy to clipboard
{CODE(wrap="1", colors="c++")}#ifndef __SOUNDMANAGER_H__
#define __SOUNDMANAGER_H__
#include <fmod.hpp>
#define MAX_SOUND_CHANNELS 200
#define INVALID_SOUND_INDEX 0
#define INVALID_SOUND_CHANNEL -1
using namespace Ogre;
typedef enum
{
SOUND_TYPE_INVALID = 0,
SOUND_TYPE_3D_SOUND,
SOUND_TYPE_3D_SOUND_LOOPED,
SOUND_TYPE_2D_SOUND,
SOUND_TYPE_2D_SOUND_LOOPED,
} SOUND_TYPE;
class SoundInstance
{
public:
void Clear(void);
String fileName;
Archive * fileArchive;
DataStreamPtr streamPtr;
SOUND_TYPE soundType;
FMOD::Sound * fmodSound;
};
class ChannelInstance
{
public:
void Clear(void);
Ogre::SceneNode * sceneNode;
Ogre::Vector3 prevPosition;
};
class SoundManager : public Ogre::Singleton<SoundManager>
{
public:
SoundManager();
virtual ~SoundManager();
void Initialize(void);
void StopAllSounds(void);
void FrameStarted(Ogre::SceneNode *listenerNode, Ogre::Real timeElapsed);
int CreateSound(String &fileName); // single-shot 3D sound. returns soundIndex
int CreateStream(String &fileName); // single-shot 2D stream. returns soundIndex
int CreateLoopedSound(String &fileName); // looping 3D sound. returns soundIndex
int CreateLoopedStream(String &fileName); // looping 2D stream. returns soundIndex
int CreateSound(String &fileName, SOUND_TYPE soundType);
void PlaySound(int soundIndex, SceneNode *soundNode, int *channelIndex);
void StopSound(int *channelIndex);
int FindSound(String &fileName, SOUND_TYPE soundType); // returns soundIndex;
void Set3DMinMaxDistance(int channelIndex, float minDistance, float maxDistance);
float GetSoundLength(int soundIndex); // returns seconds
SoundInstance *GetSoundInstance(int soundIndex);
FMOD::Channel *GetSoundChannel(int channelIndex);
static SoundManager& getSingleton(void);
static SoundManager* getSingletonPtr(void);
private:
typedef std::vector<SoundInstance *> SoundInstanceVector;
typedef SoundInstanceVector::iterator SoundInstanceVectorItr;
int nextSoundInstanceIndex;
FMOD::System * system;
Ogre::Vector3 prevListenerPosition;
SoundInstanceVector *soundInstanceVector;
ChannelInstance channelArray[MAX_SOUND_CHANNELS];
void IncrementNextSoundInstanceIndex(void);
static FMOD_RESULT F_CALLBACK fmodFileOpenCallback(const char *fileName, int unicode, unsigned int *filesize, void **handle, void **userdata);
static FMOD_RESULT F_CALLBACK fmodFileCloseCallback(void *handle, void *userdata);
static FMOD_RESULT F_CALLBACK fmodFileReadCallback(void *handle, void *buffer, unsigned int sizebytes, unsigned int *bytesread, void *userdata);
static FMOD_RESULT F_CALLBACK fmodFileSeekCallback(void *handle, unsigned int pos, void *userdata);
};
#endif // __SOUNDMANAGER_H__{CODE}