/*
* 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