client/MilesLib/SoundInstance.h

119 lines
3.2 KiB
C++

#ifndef __MILESLIB_CSOUNDINSTANCE_H__
#define __MILESLIB_CSOUNDINSTANCE_H__
#include "SoundBase.h"
class ISoundInstance : public CSoundBase
{
public:
ISoundInstance() {}
virtual ~ISoundInstance() {}
virtual bool Initialize() = 0;
virtual void Destroy() = 0;
virtual bool SetSound(CSoundData* pSound) = 0;
virtual void Play(int iLoopCount = 1, DWORD dwPlayCycleTimeLimit = 0) const = 0;
virtual void Pause() const = 0;
virtual void Resume() const = 0;
virtual void Stop() = 0;
virtual void GetVolume(float& rfVolume) const = 0;
virtual void SetVolume(float volume) const = 0;
virtual bool IsDone() const = 0;
virtual void SetPosition(float x, float y, float z) const = 0;
virtual void SetOrientation(float x_face, float y_face, float z_face,
float x_normal, float y_normal, float z_normal) const = 0;
virtual void SetVelocity(float x, float y, float z, float fMagnitude) const = 0;
};
class CSoundInstance2D : public ISoundInstance
{
public:
CSoundInstance2D();
virtual ~CSoundInstance2D();
public: // from interface
bool Initialize();
void Destroy();
bool SetSound(CSoundData* pSound);
void Play(int iLoopCount = 1, DWORD dwPlayCycleTimeLimit = 0) const;
void Pause() const;
void Resume() const;
void Stop();
void GetVolume(float& rfVolume) const;
void SetVolume(float volume) const;
bool IsDone() const;
void SetPosition(float x, float y, float z) const;
void SetOrientation(float x_face, float y_face, float z_face,
float x_normal, float y_normal, float z_normal) const;
void SetVelocity(float fx, float fy, float fz, float fMagnitude) const;
private:
HSAMPLE m_sample;
CSoundData* m_pSoundData;
};
class CSoundInstance3D : public ISoundInstance
{
public:
CSoundInstance3D();
virtual ~CSoundInstance3D();
public: // from interface
bool Initialize();
void Destroy();
bool SetSound(CSoundData * pSound);
void Play(int iLoopCount = 1, DWORD dwPlayCycleTimeLimit = 0) const;
void Pause() const;
void Resume() const;
void Stop();
void GetVolume(float& rfVolume) const;
void SetVolume(float volume) const;
bool IsDone() const;
void SetPosition(float x, float y, float z) const;
void SetOrientation(float x_face, float y_face, float z_face,
float x_normal, float y_normal, float z_normal) const;
void SetVelocity(float fx, float fy, float fz, float fMagnitude) const;
void UpdatePosition(float fElapsedTime);
private:
H3DSAMPLE m_sample;
CSoundData * m_pSoundData;
};
class CSoundInstanceStream : public ISoundInstance
{
public:
CSoundInstanceStream();
virtual ~CSoundInstanceStream();
public: // from interface
bool Initialize();
void Destroy();
void SetStream(HSTREAM stream);
bool SetSound(CSoundData* pSound);
void Play(int iLoopCount = 1, DWORD dwPlayCycleTimeLimit = 0) const;
void Pause() const;
void Resume() const;
void Stop();
void GetVolume(float& rfVolume) const;
void SetVolume(float volume) const;
bool IsDone() const;
bool IsData() const;
void SetPosition(float x, float y, float z) const;
void SetOrientation(float x_face, float y_face, float z_face,
float x_normal, float y_normal, float z_normal) const;
void SetVelocity(float fx, float fy, float fz, float fMagnitude) const;
private:
HSTREAM m_stream;
};
#endif