123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- //
- // soundtemplates.h
- //
- // Several useful sound template implementations.
- //
- namespace SoundEngine {
- // creates a sound template for the given wave file
- HRESULT CreateWaveFileSoundTemplate(TRef<ISoundTemplate>& pstDest, const ZString& strFilename);
- // creates a dummy sound template
- // (NOTE: Not optimized - fix or use only for error handling!)
- HRESULT CreateDummySoundTemplate(TRef<ISoundTemplate>& pstDest);
- // creates a sound template which uses the given sound template to create
- // sounds and turns then into a 3D sounds with the given minimum distance.
- HRESULT Create3DSoundTemplate(TRef<ISoundTemplate>& pstDest,
- ISoundTemplate* pstSource, float fMinimumDistance);
- // creates a sound template which adds a sound cone to the given sound
- HRESULT CreateSoundConeTemplate(TRef<ISoundTemplate>& pstDest, ISoundTemplate* pstSource,
- float fInnerAngle, float fOuterAngle, float fOutsideGain);
- // creates a sound template which shifts the pitch of the created sound
- HRESULT CreatePitchSoundTemplate(TRef<ISoundTemplate>& pstDest, ISoundTemplate* pstSource,
- float fPitch);
- // creates a sound template which adjusts the gain of the created sound
- HRESULT CreateGainSoundTemplate(TRef<ISoundTemplate>& pstDest, ISoundTemplate* pstSource,
- float fGain);
- // creates a sound template which adjusts the Priority of the created sound
- HRESULT CreatePrioritySoundTemplate(TRef<ISoundTemplate>& pstDest, ISoundTemplate* pstSource,
- float fPriority);
- // creates a looping sound from the given template
- HRESULT CreateLoopingSoundTemplate(TRef<ISoundTemplate>& pstDest, ISoundTemplate* pstSource);
- // creates an ASR sound from the given template with the given loop start and loop length (in seconds)
- HRESULT CreateASRSoundTemplate(TRef<ISoundTemplate>& pstDest, ISoundTemplate* pstSource,
- float fLoopStart, float fLoopLength);
- // creates a sound template which plays two sounds at once
- HRESULT CreatePairedSoundTemplate(TRef<ISoundTemplate>& pstDest, ISoundTemplate* pstSource1,
- ISoundTemplate* pstSource2);
- // Creates an ASR sound from the given template for a weapon that fires every n
- // seconds. This assumes the sound for a single shot falls off dramaticly after
- // 2n seconds, and plays some tricks based on this like only playing the two
- // most recent sounds.
- HRESULT CreateRepeatingFireSoundTemplate(TRef<ISoundTemplate>& pstDest,
- ISoundTemplate* pstSource,
- float fFireDelay);
- // provides an interface for adding new sound templates to a random sound
- // template.
- class IRandomSoundTemplate : public ISoundTemplate
- {
- public:
- // adds the given template as a possible sound to play, with the given
- // weight. The weight can be any arbitrary number, but a sound with weight
- // f will play half as often as a sound with weight 2*f.
- virtual HRESULT AddSoundTemplate(ISoundTemplate* pstSource, float fWeight) = 0;
- };
- // creates a sound template which randomly chooses from the sound templates
- // it contains each time a sound is played.
- HRESULT CreateRandomSoundTemplate(TRef<IRandomSoundTemplate>& pstDest);
- // creates a sound template for a sound which plays intermittently, and has a 50%
- // chance of playing over a period of fPeriod seconds. If bMultipleSounds is
- // true, this allows multiple sounds to play at the same time.
- HRESULT CreateIntermittentSoundTemplate(TRef<ISoundTemplate>& pstDest, ISoundTemplate* pstSource,
- float fPeriod, bool bMultipleSounds);
- // provides an interface for manipulating a sound mutex
- class ISoundMutex : public ISoundObject
- {
- public:
- // erases any pending sounds without playing them
- virtual HRESULT Reset() = 0;
- };
- // Creates a mutex used for the serialized sound template below. Each
- // mutex represents a single syncronization point - sounds with the same mutex
- // won't overlap, but sounds with different mutexes won't be prevented from
- // overlapping.
- HRESULT CreateSoundMutex(TRef<ISoundMutex>& pmutex);
- // Creates a sound template for a sound which will not be played at the same
- // time as any other sound created by a serial sound template with the same
- // mutex. fTimeout specifies the amount of time a sound can be delayed before
- // it is discarded. fPriority specifies the relative priority of the sound,
- // which is added to the age of a sound when trying to find the oldest sound
- // to play next. bSingleInstance specifies whether multiple copies of the
- // given sound can queue up - if false, just the most recent one will play.
- HRESULT CreateSerializedSoundTemplate(TRef<ISoundTemplate>& pstDest, ISoundTemplate* pstSource,
- ISoundMutex* pmutex, float fTimeout, float fPriority,
- bool bSingleInstance);
- };
|