File SoundManager.h         FMOD SoundManager - header
Print
#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__

Contributors to this page: jacmoe111451 points  and OgreWikiBot .
Page last modified on Saturday 02 of January, 2010 21:40:44 GMT by jacmoe111451 points .


The content on this page is licensed under the terms of the Creative Commons Attribution-ShareAlike License.
As an exception, any source code contributed within the content is released into the Public Domain.