Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

#ifndef __DSOUNDMANAGER_H__
#define __DSOUNDMANAGER_H__

#include "dsoundversion.h"
#include "SoundManager.h"

namespace Sexy
{

class DSoundInstance;

class DSoundManager : public SoundManager
{
        friend class DSoundInstance;
        friend class DSoundMusicInterface;

protected:
        LPDIRECTSOUNDBUFFER             mSourceSounds[MAX_SOURCE_SOUNDS];
        std::string                             mSourceFileNames[MAX_SOURCE_SOUNDS];
        LPDIRECTSOUNDBUFFER             mPrimaryBuffer;
        ulong                                   mSourceDataSizes[MAX_SOURCE_SOUNDS];
        double                                  mBaseVolumes[MAX_SOURCE_SOUNDS];
        int                                             mBasePans[MAX_SOURCE_SOUNDS];
        DSoundInstance*                 mPlayingSounds[MAX_CHANNELS];  
        double                                  mMasterVolume;
        DWORD                                   mLastReleaseTick;

protected:
        int                                             FindFreeChannel();
        int                                             VolumeToDB(double theVolume);
        bool                                    LoadOGGSound(unsigned int theSfxID, const std::string& theFilename);
        bool                                    LoadFModSound(unsigned int theSfxID, const std::string& theFilename);
        bool                                    LoadWAVSound(unsigned int theSfxID, const std::string& theFilename);
        bool                                    LoadAUSound(unsigned int theSfxID, const std::string& theFilename);
        bool                                    WriteWAV(unsigned int theSfxID, const std::string& theFilename, const std::string& theDepFile);
        bool                                    GetTheFileTime(const std::string& theDepFile, FILETIME* theFileTime);
        void                                    ReleaseFreeChannels();

public:
        LPDIRECTSOUND                   mDirectSound;
        bool                                    mHaveFMod;

        DSoundManager(HWND theHWnd, bool haveFMod);
        virtual ~DSoundManager();

        virtual bool                    Initialized();
       
        virtual bool                    LoadSound(unsigned int theSfxID, const std::string& theFilename);
        virtual int                             LoadSound(const std::string& theFilename);
        virtual void                    ReleaseSound(unsigned int theSfxID);   

        virtual void                    SetVolume(double theVolume);
        virtual bool                    SetBaseVolume(unsigned int theSfxID, double theBaseVolume);
        virtual bool                    SetBasePan(unsigned int theSfxID, int theBasePan);

        virtual SoundInstance*  GetSoundInstance(unsigned int theSfxID);

        virtual void                    ReleaseSounds();
        virtual void                    ReleaseChannels();             

        virtual double                  GetMasterVolume();
        virtual void                    SetMasterVolume(double theVolume);

        virtual void                    Flush();

        virtual void                    SetCooperativeWindow(HWND theHWnd, bool isWindowed);
        virtual void                    StopAllSounds();
        virtual int                             GetFreeSoundId();
        virtual int                             GetNumSounds();
};

}

#endif //__DSOUNDMANAGER_H__