/* * AudioSystem.h * Jonathan Boldiga * 09/03/03 * * Description: The Audio class represents a single sound object, such * as a song, ambient sound, an object's sound, etc. * The AudioSystem class is the controller for creating and * playing Audio objects. * */ #ifndef __AUDIOSYSTEM_H #define __AUDIOSYSTEM_H //#include // standard Windows app include #include // DirectMusic includes #include #include // for D3DVECTOR #include // for GUID_NULL //Audio class, used for all audio objects. class Audio{ private: IDirectMusicSegment8* dmusicSegment; // the segment // The 3D buffer might not be used (e.g. background music). // It should only be used for 3D positional sounds. IDirectSound3DBuffer* ds3DBuffer; bool is3DSound; // true if this is a 3D sound protected: public: Audio() { dmusicSegment = NULL; ds3DBuffer = NULL; is3DSound = false; } ~Audio(){ if (dmusicSegment != NULL){ dmusicSegment->Release(); dmusicSegment = NULL; } if (ds3DBuffer != NULL){ ds3DBuffer->Release(); ds3DBuffer = NULL; } } void setSegment(IDirectMusicSegment8* seg) { dmusicSegment = seg; } IDirectMusicSegment8* GetSegment() { return dmusicSegment; } void set3DBuffer(IDirectSound3DBuffer* dsBuff); IDirectSound3DBuffer* Get3DBuffer() { return ds3DBuffer; } bool is3DSound() { return is3DSound; } void set3DSound(bool b) { is3DSound = b; } void set3DParams(float minDistance, float maxDistance); void set3DPos(float x, float y, float z); }; //AudioSystem, controls all Audio objects. class AudioSystem{ private: IDirectMusicLoader8* dmusicLoader; // the loader IDirectMusicPerformance8* dmusicPerformance; // the performance IDirectMusiAudioPath8* dmusic3DAudioPath; // the audiopath IDirectSound3DListener8* ds3DListener; // 3d listener DS3DLISTENER dsListenerParams; // 3d listener properties public: AudioSystem(); ~AudioSystem(); bool InitDirectXAudio(HWND hwnd); IDirectSound3DBuffer8* Create3DBuffer(); Audio* create(char* filename, bool is3DSound); IDirectMusicSegment8* CreateSegment(char *filename, bool is3DSound); void play(Audio* audio, DWORD numRepeats); void stop(Audio* audio); void playSegment(IDirectMusicSegment8* dmSeg, bool is3DSound, DWORD numRepeats); void stopSegment(IDirectMusicSegment8* dmSeg); void shutdown(); void setListenerPos(float cameraX, float cameraY, float cameraZ); void setListenerRolloff(float rolloff); void setListenerOrientation(float forwardX, float forwardY, float forwardZ, float topX, float topY, float topZ){ ds3DListener->SetOrientation(forwardX, forwardY, -forwardZ, topX, topY, topZ, DS3D_IMMEDIATE); } IDirectMusicPerformance8* GetPerformance() { return dmusicPerformance; } }; #endif