623 lines
20 KiB
C++
623 lines
20 KiB
C++
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Crytek (C) 2001
|
|
//
|
|
// CrySound Source Code
|
|
//
|
|
// File: ISound.h
|
|
// Description: Sound interface.
|
|
//
|
|
// History:
|
|
// - August 28, 2001: Created by Marco Corbetta
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef CRYSOUND_ISOUND_H
|
|
#define CRYSOUND_ISOUND_H
|
|
|
|
//forward declarations
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "Cry_Math.h"
|
|
#include <vector>
|
|
#include <map>
|
|
#include "StlUtils.h"
|
|
#include "TString.h"
|
|
|
|
class CCamera;
|
|
struct IMusicSystem;
|
|
class ICrySizer;
|
|
struct IVisArea;
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
#define MAX_SFX 1024
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
#define FLAG_SOUND_LOOP 1<<0
|
|
#define FLAG_SOUND_2D 1<<1
|
|
#define FLAG_SOUND_3D 1<<2
|
|
#define FLAG_SOUND_STEREO 1<<3
|
|
#define FLAG_SOUND_16BITS 1<<4
|
|
#define FLAG_SOUND_STREAM 1<<5
|
|
#define FLAG_SOUND_RELATIVE 1<<6 // sound position moves relative to player
|
|
#define FLAG_SOUND_RADIUS 1<<7 // sound has a radius, custom attenuation calculation
|
|
#define FLAG_SOUND_DOPPLER 1<<8 // use doppler effect for this sound
|
|
#define FLAG_SOUND_NO_SW_ATTENUATION 1<<9 // doesn't use SW attenuation for this sound
|
|
#define FLAG_SOUND_MUSIC 1<<10 // pure music sound, to use to set pure music volume
|
|
#define FLAG_SOUND_OUTDOOR 1<<11 // play the sound only if the listener is in outdoor
|
|
#define FLAG_SOUND_INDOOR 1<<12 // play the sound only if the listener is in indoor
|
|
#define FLAG_SOUND_UNSCALABLE 1<<13 // for all sounds with this flag the volume can be scaled separately respect to the master volume
|
|
#define FLAG_SOUND_OCCLUSION 1<<14 // the sound uses sound occlusion
|
|
//#define FLAG_SOUND_FAILED 32768 // the loading of this sound has failed - do not try to load again every frame
|
|
#define FLAG_SOUND_LOAD_SYNCHRONOUSLY 1<<15 // the loading of this sound will be synchronous (asynchronously by default).
|
|
#define FLAG_SOUND_FADE_OUT_UNDERWATER 1<<16
|
|
|
|
#define FLAG_SOUND_ACTIVELIST (FLAG_SOUND_RADIUS | FLAG_SOUND_OCCLUSION | FLAG_SOUND_INDOOR | FLAG_SOUND_OUTDOOR)
|
|
|
|
#define SOUNDBUFFER_FLAG_MASK (FLAG_SOUND_LOOP | FLAG_SOUND_2D | FLAG_SOUND_3D | FLAG_SOUND_STEREO | FLAG_SOUND_16BITS | FLAG_SOUND_STREAM) // flags affecting the sound-buffer, not its instance
|
|
|
|
#define MAX_SOUNDSCALE_GROUPS 8
|
|
|
|
#define SOUNDSCALE_MASTER 0
|
|
#define SOUNDSCALE_SCALEABLE 1
|
|
#define SOUNDSCALE_DEAFNESS 2
|
|
#define SOUNDSCALE_UNDERWATER 3
|
|
#define SOUNDSCALE_MISSIONHINT 4
|
|
|
|
struct ISound;
|
|
|
|
//These values are used with CS_FX_Enable to enable DirectX 8 FX for a channel.
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
enum SOUND_FX_MODES
|
|
{
|
|
S_FX_CHORUS,
|
|
S_FX_COMPRESSOR,
|
|
S_FX_DISTORTION,
|
|
S_FX_ECHO,
|
|
S_FX_FLANGER,
|
|
S_FX_GARGLE,
|
|
S_FX_I3DL2REVERB,
|
|
S_FX_PARAMEQ,
|
|
S_FX_WAVES_REVERB
|
|
};
|
|
|
|
//eax modes
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
enum {
|
|
EAX_PRESET_OFF=0,
|
|
EAX_PRESET_GENERIC,
|
|
EAX_PRESET_PADDEDCELL,
|
|
EAX_PRESET_ROOM,
|
|
EAX_PRESET_BATHROOM,
|
|
EAX_PRESET_LIVINGROOM,
|
|
EAX_PRESET_STONEROOM,
|
|
EAX_PRESET_AUDITORIUM,
|
|
EAX_PRESET_CONCERTHALL,
|
|
EAX_PRESET_CAVE,
|
|
EAX_PRESET_ARENA,
|
|
EAX_PRESET_HANGAR,
|
|
EAX_PRESET_CARPETTEDHALLWAY,
|
|
EAX_PRESET_HALLWAY,
|
|
EAX_PRESET_STONECORRIDOR,
|
|
EAX_PRESET_ALLEY,
|
|
EAX_PRESET_FOREST,
|
|
EAX_PRESET_CITY,
|
|
EAX_PRESET_MOUNTAINS,
|
|
EAX_PRESET_QUARRY,
|
|
EAX_PRESET_PLAIN,
|
|
EAX_PRESET_PARKINGLOT,
|
|
EAX_PRESET_SEWERPIPE,
|
|
EAX_PRESET_UNDERWATER
|
|
};
|
|
|
|
//! Sound events sent to callback that can registered to every sound.
|
|
enum ESoundCallbackEvent
|
|
{
|
|
SOUND_EVENT_ON_LOADED, //!< Fired when sound is loaded.
|
|
SOUND_EVENT_ON_LOAD_FAILED, //!< Fired if sound loading is failed.
|
|
SOUND_EVENT_ON_PLAY, //!< Fired when sound is begin playing on channel.
|
|
SOUND_EVENT_ON_STOP //!< Fired when sound stops being playing on channel and frees channel.
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//! Listener interface for the sound.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
struct ISoundEventListener
|
|
{
|
|
//! Callback event.
|
|
virtual void OnSoundEvent( ESoundCallbackEvent event,ISound *pSound ) = 0;
|
|
};
|
|
|
|
// Marco's NOTE: this is a redefine of the EAX preset OFF, since it seems
|
|
// that audigy cards are having problems when the default EAX off preset
|
|
#define MY_CS_PRESET_OFF {0, 1.0f, 0.00f, -10000, -10000, -10000, 0.1f, 0.1f, 0.1f, -10000, 0.0f, { 0.0f,0.0f,0.0f }, -10000, 0.0f, { 0.0f,0.0f,0.0f }, 0.0750f, 0.00f, 0.04f, 0.000f, 0.0f, 1000.0f, 20.0f, 0.0f, 0.0f, 0.0f, 0 }
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//crysound definitions
|
|
#ifdef WIN64
|
|
#include <CrySound64.h>
|
|
#else
|
|
#include <CrySound.h>
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Sound system interface
|
|
struct ISoundSystem
|
|
{
|
|
virtual void Release() = 0;
|
|
virtual void Update() = 0;
|
|
|
|
/*! Create a music-system. You should only create one music-system at a time.
|
|
*/
|
|
virtual IMusicSystem* CreateMusicSystem() = 0;
|
|
|
|
/*! Load a sound from disk
|
|
@param szfile filename
|
|
@param nFlags sound flags combination
|
|
@return sound interface
|
|
*/
|
|
virtual struct ISound* LoadSound(const char *szFile, int nFlags) = 0;
|
|
|
|
/*! SetMasterVolume
|
|
@param nVol volume (0-255)
|
|
*/
|
|
virtual void SetMasterVolume(unsigned char nVol) = 0;
|
|
|
|
/*! Set the volume scale for all sounds with FLAG_SOUND_SCALABLE
|
|
@param fScale volume scale (default 1.0)
|
|
*/
|
|
virtual void SetMasterVolumeScale(float fScale, bool bForceRecalc=false) = 0;
|
|
|
|
/*! Get a sound interface from the sound system
|
|
@param nSoundId sound id
|
|
*/
|
|
virtual struct ISound* GetSound(int nSoundID) = 0;
|
|
|
|
/*! Play a sound from the sound system
|
|
@param nSoundId sound id
|
|
*/
|
|
virtual void PlaySound(int nSoundID) = 0;
|
|
|
|
/*! Set the listener position
|
|
@param cCam camera position
|
|
@param vVel velocity
|
|
*/
|
|
virtual void SetListener(const CCamera &cCam, const Vec3 &vVel)=0;
|
|
|
|
/*! to be called when something changes in the environment which could affect
|
|
sound occlusion, for example a door closes etc.
|
|
@param bRecomputeListener recomputes the listener vis area
|
|
@param bForceRecompute forces to recompute the vis area connections even if
|
|
the listener didn't move (useful for moving objects that can occlude)
|
|
*/
|
|
virtual void RecomputeSoundOcclusion(bool bRecomputeListener,bool bForceRecompute,bool bReset=false)=0;
|
|
|
|
//! Check for EAX support.
|
|
virtual bool IsEAX( int version ) = 0;
|
|
//! Set EAX listener environment; one of the predefined presets
|
|
//! listened above or a custom environmental reverb set
|
|
virtual bool SetEaxListenerEnvironment(int nPreset, CS_REVERB_PROPERTIES *pProps=NULL, int nFlags=0) = 0;
|
|
|
|
//! Gets current EAX listener environment or one of the predefined presets
|
|
//! used to save into the savegame
|
|
virtual bool GetCurrentEaxEnvironment(int &nPreset, CS_REVERB_PROPERTIES &Props)=0;
|
|
|
|
//! Set the scaling factor for a specific scale group (0-31)
|
|
virtual bool SetGroupScale(int nGroup, float fScale) = 0;
|
|
|
|
//! Stop all sounds and music
|
|
virtual void Silence()=0;
|
|
|
|
//! pause all sounds
|
|
virtual void Pause(bool bPause,bool bResetVolume=false)=0;
|
|
|
|
//! Mute/unmute all sounds
|
|
virtual void Mute(bool bMute)=0;
|
|
|
|
//! get memory usage info
|
|
virtual void GetSoundMemoryUsageInfo(size_t &nCurrentMemory,size_t &nMaxMemory)=0;
|
|
|
|
//! get number of voices playing
|
|
virtual int GetUsedVoices()=0;
|
|
|
|
//! get cpu-usuage
|
|
virtual float GetCPUUsage()=0;
|
|
|
|
//! get music-volume
|
|
virtual float GetMusicVolume()=0;
|
|
|
|
//! sets parameters for directional attenuation (for directional microphone effect); set fConeInDegree to 0 to disable the effect
|
|
virtual void CalcDirectionalAttenuation(Vec3 &Pos, Vec3 &Dir, float fConeInRadians) = 0;
|
|
|
|
//! returns the maximum sound-enhance-factor to use it in the binoculars as "graphical-equalizer"...
|
|
virtual float GetDirectionalAttenuationMaxScale() = 0;
|
|
|
|
//! returns if directional attenuation is used
|
|
virtual bool UsingDirectionalAttenuation() = 0;
|
|
|
|
virtual void GetMemoryUsage(class ICrySizer* pSizer) = 0;
|
|
|
|
//! get the current area the listener is in
|
|
virtual IVisArea *GetListenerArea()=0;
|
|
|
|
//! get listener position
|
|
virtual Vec3 GetListenerPos()=0;
|
|
|
|
//! returns true if sound is being debugged
|
|
virtual bool DebuggingSound()=0;
|
|
|
|
//! Set minimal priority for sounds to be played.
|
|
//! Sound`s with priority less then that will not be played.
|
|
//! @return previous minimal priority.
|
|
virtual int SetMinSoundPriority( int nPriority ) = 0;
|
|
|
|
//! Lock all sound buffer resources to prevent them from unloading (when restoring checkpoint).
|
|
virtual void LockResources() = 0;
|
|
//! Unlock all sound buffer resources to prevent them from unloading.
|
|
virtual void UnlockResources() = 0;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// String Iterator
|
|
struct IStringItVec
|
|
{
|
|
virtual bool IsEnd() = 0;
|
|
virtual const char* Next() = 0;
|
|
virtual void MoveFirst() = 0;
|
|
virtual void AddRef() = 0;
|
|
virtual void Release() = 0;
|
|
};
|
|
|
|
//////////////////////////////
|
|
// A sound...
|
|
struct ISound
|
|
{
|
|
// Register listener to the sound.
|
|
virtual void AddEventListener( ISoundEventListener *pListener ) = 0;
|
|
virtual void RemoveEventListener( ISoundEventListener *pListener ) = 0;
|
|
|
|
virtual bool IsPlaying() = 0;
|
|
virtual bool IsPlayingVirtual() = 0;
|
|
//! Return true if sound is now in the process of asynchronous loading of sound buffer.
|
|
virtual bool IsLoading() = 0;
|
|
//! Return true if sound have already loaded sound buffer.
|
|
virtual bool IsLoaded() = 0;
|
|
|
|
virtual void Play(float fVolumeScale=1.0f, bool bForceActiveState=true, bool bSetRatio=true) = 0;
|
|
virtual void PlayFadeUnderwater(float fVolumeScale=1.0f, bool bForceActiveState=true, bool bSetRatio=true) = 0;
|
|
virtual void Stop() = 0;
|
|
|
|
//! Get name of sound file.
|
|
virtual const char* GetName() = 0;
|
|
//! Get uniq id of sound.
|
|
virtual const int GetId() = 0;
|
|
|
|
//! Set looping mode of sound.
|
|
virtual void SetLoopMode(bool bLoop) = 0;
|
|
|
|
virtual bool Preload() = 0;
|
|
|
|
//! retrieves the currently played sample-pos, in milliseconds or bytes
|
|
virtual unsigned int GetCurrentSamplePos(bool bMilliSeconds=false)=0;
|
|
//! set the currently played sample-pos in bytes or milliseconds
|
|
virtual void SetCurrentSamplePos(unsigned int nPos,bool bMilliSeconds)=0;
|
|
|
|
//! sets automatic pitching amount (0-1000)
|
|
virtual void SetPitching(float fPitching) = 0;
|
|
|
|
//! sets the volume ratio
|
|
virtual void SetRatio(float fRatio)=0;
|
|
|
|
//! Return frequency of sound.
|
|
virtual int GetFrequency() = 0;
|
|
|
|
//! Set sound pitch.
|
|
//! 1000 is default pitch.
|
|
virtual void SetPitch(int nPitch) = 0;
|
|
|
|
//! Set panning values
|
|
virtual void SetPan(int nPan)=0;
|
|
|
|
//! set the maximum distance / the sound will be stopped if the
|
|
//! distance from the listener and this sound is bigger than this max distance
|
|
// virtual void SetMaxSoundDistance(float fMaxSoundDistance)=0;
|
|
|
|
//! Set Minimal/Maximal distances for sound.
|
|
//! Sound is not attenuated below minimal distance and not heared outside of max distance.
|
|
virtual void SetMinMaxDistance(float fMinDist, float fMaxDist) = 0;
|
|
|
|
//! Define sound cone.
|
|
//! Angles are in degrees, in range 0-360.
|
|
virtual void SetConeAngles(float fInnerAngle,float fOuterAngle) = 0;
|
|
|
|
//! Add sound to specific sound-scale-group (0-31)
|
|
virtual void AddToScaleGroup(int nGroup) = 0;
|
|
//! Remove sound from specific sound-scale-group (0-31)
|
|
virtual void RemoveFromScaleGroup(int nGroup) = 0;
|
|
//! Set sound-scale-groups by bitfield.
|
|
virtual void SetScaleGroup(unsigned int nGroupBits) = 0;
|
|
|
|
//! Set sound volume.
|
|
//! Range: 0-100
|
|
virtual void SetVolume( int nVolume ) = 0;
|
|
//! Get sound volume.
|
|
virtual int GetVolume() = 0;
|
|
|
|
//! Set sound source position.
|
|
//IVO
|
|
virtual void SetPosition(const Vec3 &pos) = 0;
|
|
|
|
//! Get sound source position.
|
|
virtual const bool GetPosition(Vec3 &vPos) = 0;
|
|
|
|
//! Set sound source velocity.
|
|
virtual void SetVelocity(const Vec3 &vel) = 0;
|
|
//! Get sound source velocity.
|
|
virtual Vec3 GetVelocity( void ) = 0;
|
|
|
|
//! Set orientation of sound.
|
|
//! Only relevant when cone angles are specified.
|
|
virtual void SetDirection( const Vec3 &dir ) = 0;
|
|
virtual Vec3 GetDirection() = 0;
|
|
|
|
virtual void SetLoopPoints(const int iLoopStart, const int iLoopEnd) = 0;
|
|
virtual bool IsRelative() const = 0;
|
|
|
|
// Add/remove sounds.
|
|
virtual int AddRef() = 0;
|
|
virtual int Release() = 0;
|
|
|
|
/* Sets certain sound properties
|
|
//@param fFadingValue the value that should be used for fading / sound occlusion
|
|
// more to come
|
|
*/
|
|
virtual void SetSoundProperties(float fFadingValue)=0;
|
|
|
|
//virtual void AddFlags(int nFlags) = 0;
|
|
|
|
//! enable fx effects for this sound
|
|
//! must be called after each play
|
|
virtual void FXEnable(int nEffectNumber)=0;
|
|
|
|
virtual void FXSetParamEQ(float fCenter,float fBandwidth,float fGain)=0;
|
|
|
|
//! returns the size of the stream in ms
|
|
virtual int GetLengthMs()=0;
|
|
|
|
//! returns the size of the stream in bytes
|
|
virtual int GetLength()=0;
|
|
|
|
//! set sound priority (0-255)
|
|
virtual void SetSoundPriority(unsigned char nSoundPriority)=0;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// MusicSystem
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Structures to pass as data-entry for musicsystem
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
struct SPatternDef;
|
|
struct SMusicPatternSet;
|
|
struct SMusicMood;
|
|
struct SMusicTheme;
|
|
|
|
// Helper integer-vector
|
|
typedef std::vector<int> TIntVec;
|
|
typedef TIntVec::iterator TIntVecIt;
|
|
|
|
typedef std::vector<SPatternDef*> TPatternDefVec;
|
|
typedef TPatternDefVec::iterator TPatternDefVecIt;
|
|
|
|
typedef std::map<CryBasicString,string,stl::less_stricmp<CryBasicString> > TThemeBridgeMap;
|
|
typedef TThemeBridgeMap::iterator TThemeBridgeMapIt;
|
|
|
|
typedef std::map<CryBasicString,SMusicMood*,stl::less_stricmp<CryBasicString> > TMoodMap;
|
|
typedef TMoodMap::iterator TMoodMapIt;
|
|
|
|
typedef std::vector<SMusicPatternSet*> TPatternSetVec;
|
|
typedef TPatternSetVec::iterator TPatternSetVecIt;
|
|
|
|
typedef std::map<CryBasicString,SMusicTheme*,stl::less_stricmp<CryBasicString> > TThemeMap;
|
|
typedef TThemeMap::iterator TThemeMapIt;
|
|
|
|
// Pattern-definition
|
|
struct SPatternDef
|
|
{
|
|
CryBasicString sName;
|
|
CryBasicString sFilename;
|
|
TIntVec vecFadePoints;
|
|
int nLayeringVolume;
|
|
float fProbability;
|
|
|
|
SPatternDef()
|
|
{
|
|
nLayeringVolume = 255;
|
|
fProbability = 0;
|
|
}
|
|
};
|
|
|
|
// PatternSet-Structure used by moods
|
|
struct SMusicPatternSet
|
|
{
|
|
float fMinTimeout;
|
|
float fMaxTimeout;
|
|
float fTotalMainPatternProbability; // added probabilities of all containing patterns
|
|
TPatternDefVec vecMainPatterns;
|
|
int nMaxSimultaneousRhythmicPatterns;
|
|
float fRhythmicLayerProbability;
|
|
float fTotalRhythmicPatternProbability; // added probabilities of all containing patterns
|
|
TPatternDefVec vecRhythmicPatterns;
|
|
int nMaxSimultaneousIncidentalPatterns;
|
|
float fIncidentalLayerProbability;
|
|
float fTotalIncidentalPatternProbability; // added probabilities of all containing patterns
|
|
TPatternDefVec vecIncidentalPatterns;
|
|
|
|
SMusicPatternSet()
|
|
{
|
|
fMinTimeout = 0;
|
|
fMaxTimeout = 0;
|
|
fRhythmicLayerProbability = 0;
|
|
fTotalMainPatternProbability = 0;
|
|
fTotalRhythmicPatternProbability = 0;
|
|
fIncidentalLayerProbability = 0;
|
|
fTotalIncidentalPatternProbability = 0;
|
|
nMaxSimultaneousRhythmicPatterns = 1;
|
|
nMaxSimultaneousIncidentalPatterns = 1;
|
|
}
|
|
};
|
|
|
|
// Mood-Structure
|
|
struct SMusicMood
|
|
{
|
|
CryBasicString sName;
|
|
int nPriority;
|
|
float fFadeOutTime;
|
|
TPatternSetVec vecPatternSets;
|
|
bool bPlaySingle;
|
|
// internal
|
|
SMusicPatternSet *pCurrPatternSet;
|
|
float fCurrPatternSetTime;
|
|
float fCurrPatternSetTimeout;
|
|
|
|
SMusicMood()
|
|
{
|
|
nPriority = 0;
|
|
fFadeOutTime = 0;
|
|
bPlaySingle = false;
|
|
pCurrPatternSet = NULL;
|
|
fCurrPatternSetTime = 0;
|
|
fCurrPatternSetTimeout = 0;
|
|
}
|
|
};
|
|
|
|
// Theme-Structure
|
|
struct SMusicTheme
|
|
{
|
|
CryBasicString sName;
|
|
TMoodMap mapMoods;
|
|
TThemeBridgeMap mapBridges;
|
|
// default mood
|
|
CryBasicString sDefaultMood;
|
|
float fDefaultMoodTimeout;
|
|
|
|
SMusicTheme()
|
|
{
|
|
fDefaultMoodTimeout = 0;
|
|
}
|
|
};
|
|
|
|
// Data-struct (which needs to be passed to SetData())
|
|
struct SMusicData
|
|
{
|
|
TPatternDefVec vecPatternDef;
|
|
TThemeMap mapThemes;
|
|
};
|
|
|
|
// Different layers
|
|
#define MUSICLAYER_MAIN 0
|
|
#define MUSICLAYER_RHYTHMIC 1
|
|
#define MUSICLAYER_INCIDENTAL 2
|
|
|
|
#define DEFAULT_CROSSFADE_TIME 3.0
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Status struct
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
struct SPlayingPatternsStatus
|
|
{
|
|
CryBasicString sName;
|
|
int nLayer;
|
|
int nVolume;
|
|
};
|
|
|
|
typedef std::vector<SPlayingPatternsStatus> TPatternStatusVec;
|
|
typedef TPatternStatusVec::iterator TPatternStatusVecIt;
|
|
|
|
struct SMusicSystemStatus
|
|
{
|
|
bool bPlaying;
|
|
CryBasicString sTheme;
|
|
CryBasicString sMood;
|
|
TPatternStatusVec m_vecPlayingPatterns;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Main music-interface
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
struct IMusicSystem
|
|
{
|
|
virtual void Release() = 0;
|
|
virtual struct ISystem* GetSystem() = 0;
|
|
virtual int GetBytesPerSample() = 0;
|
|
virtual struct IMusicSystemSink* SetSink(struct IMusicSystemSink *pSink) = 0;
|
|
virtual bool SetData(struct SMusicData *pMusicData,bool bNoRelease=false) = 0;
|
|
virtual void Unload() = 0;
|
|
virtual void Pause(bool bPause) = 0;
|
|
virtual void EnableEventProcessing(bool bEnable) = 0;
|
|
virtual bool ResetThemeOverride() = 0;
|
|
virtual bool SetTheme(const char *pszTheme, bool bOverride=false) = 0;
|
|
virtual const char* GetTheme() = 0;
|
|
virtual bool SetMood(const char *pszMood) = 0;
|
|
virtual bool SetDefaultMood(const char *pszMood) = 0;
|
|
virtual const char* GetMood() = 0;
|
|
virtual IStringItVec* GetThemes() = 0;
|
|
virtual IStringItVec* GetMoods(const char *pszTheme) = 0;
|
|
virtual bool AddMusicMoodEvent(const char *pszMood, float fTimeout) = 0;
|
|
virtual void Update() = 0;
|
|
virtual SMusicSystemStatus* GetStatus() = 0; // retrieve status of music-system... dont keep returning pointer !
|
|
virtual void GetMemoryUsage(class ICrySizer* pSizer) = 0;
|
|
virtual bool LoadMusicDataFromLUA(struct IScriptSystem* pScriptSystem, const char *pszFilename) = 0;
|
|
virtual bool StreamOGG() = 0;
|
|
virtual void LogMsg( const char *pszFormat, ... ) = 0;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//! Load music data from XML.
|
|
//! @param bAddAdata if true data from XML will be added to currently loaded music data.
|
|
virtual bool LoadFromXML( const char *sFilename,bool bAddData ) = 0;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Editing support.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
virtual void UpdateTheme( SMusicTheme *pTheme ) = 0;
|
|
virtual void UpdateMood( SMusicMood *pMood ) = 0;
|
|
virtual void UpdatePattern( SPatternDef *pPattern ) = 0;
|
|
virtual void RenamePattern( const char *sOldName,const char *sNewName ) = 0;
|
|
virtual void PlayPattern( const char *sPattern,bool bStopPrevious ) = 0;
|
|
virtual void DeletePattern( const char *sPattern ) = 0;
|
|
virtual void Silence() = 0;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Sink to release data (if allocated in a different DLL
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
struct IMusicSystemSink
|
|
{
|
|
virtual void ReleaseData(struct SMusicData *pData) = 0;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
typedef ISoundSystem* (*PFNCREATESOUNDSYSTEM)(struct ISystem*, void*);
|
|
|
|
#ifdef WIN32
|
|
extern "C"
|
|
#ifdef CRYSOUNDSYSTEM_EXPORTS
|
|
#define CRYSOUND_API __declspec(dllexport)
|
|
#else
|
|
#define CRYSOUND_API __declspec(dllimport)
|
|
#endif
|
|
#else //WIN32
|
|
#define CRYSOUND_API
|
|
#endif //WIN32
|
|
|
|
extern "C"
|
|
{
|
|
CRYSOUND_API ISoundSystem* CreateSoundSystem(struct ISystem*, void *pInitData);
|
|
}
|
|
|
|
#endif // CRYSOUND_ISOUND_H
|