mirror of
https://github.com/ReactionQuake3/reaction.git
synced 2024-11-26 22:21:16 +00:00
OpenAL special effects
This commit is contained in:
parent
6d65ca4c38
commit
84a674813e
5 changed files with 2360 additions and 18 deletions
|
@ -62,6 +62,7 @@ LPALSOURCEF qalSourcef;
|
|||
LPALSOURCE3F qalSource3f;
|
||||
LPALSOURCEFV qalSourcefv;
|
||||
LPALSOURCEI qalSourcei;
|
||||
LPALSOURCE3I qalSource3i;
|
||||
LPALGETSOURCEF qalGetSourcef;
|
||||
LPALGETSOURCE3F qalGetSource3f;
|
||||
LPALGETSOURCEFV qalGetSourcefv;
|
||||
|
@ -107,6 +108,46 @@ LPALCCAPTURESTART qalcCaptureStart;
|
|||
LPALCCAPTURESTOP qalcCaptureStop;
|
||||
LPALCCAPTURESAMPLES qalcCaptureSamples;
|
||||
|
||||
// Effect objects
|
||||
LPALGENEFFECTS qalGenEffects = NULL;
|
||||
LPALDELETEEFFECTS qalDeleteEffects = NULL;
|
||||
LPALISEFFECT qalIsEffect = NULL;
|
||||
LPALEFFECTI qalEffecti = NULL;
|
||||
LPALEFFECTIV qalEffectiv = NULL;
|
||||
LPALEFFECTF qalEffectf = NULL;
|
||||
LPALEFFECTFV qalEffectfv = NULL;
|
||||
LPALGETEFFECTI qalGetEffecti = NULL;
|
||||
LPALGETEFFECTIV qalGetEffectiv = NULL;
|
||||
LPALGETEFFECTF qalGetEffectf = NULL;
|
||||
LPALGETEFFECTFV qalGetEffectfv = NULL;
|
||||
|
||||
//Filter objects
|
||||
LPALGENFILTERS qalGenFilters = NULL;
|
||||
LPALDELETEFILTERS qalDeleteFilters = NULL;
|
||||
LPALISFILTER qalIsFilter = NULL;
|
||||
LPALFILTERI qalFilteri = NULL;
|
||||
LPALFILTERIV qalFilteriv = NULL;
|
||||
LPALFILTERF qalFilterf = NULL;
|
||||
LPALFILTERFV qalFilterfv = NULL;
|
||||
LPALGETFILTERI qalGetFilteri = NULL;
|
||||
LPALGETFILTERIV qalGetFilteriv = NULL;
|
||||
LPALGETFILTERF qalGetFilterf = NULL;
|
||||
LPALGETFILTERFV qalGetFilterfv = NULL;
|
||||
|
||||
// Auxiliary slot object
|
||||
LPALGENAUXILIARYEFFECTSLOTS qalGenAuxiliaryEffectSlots = NULL;
|
||||
LPALDELETEAUXILIARYEFFECTSLOTS qalDeleteAuxiliaryEffectSlots = NULL;
|
||||
LPALISAUXILIARYEFFECTSLOT qalIsAuxiliaryEffectSlot = NULL;
|
||||
LPALAUXILIARYEFFECTSLOTI qalAuxiliaryEffectSloti = NULL;
|
||||
LPALAUXILIARYEFFECTSLOTIV qalAuxiliaryEffectSlotiv = NULL;
|
||||
LPALAUXILIARYEFFECTSLOTF qalAuxiliaryEffectSlotf = NULL;
|
||||
LPALAUXILIARYEFFECTSLOTFV qalAuxiliaryEffectSlotfv = NULL;
|
||||
LPALGETAUXILIARYEFFECTSLOTI qalGetAuxiliaryEffectSloti = NULL;
|
||||
LPALGETAUXILIARYEFFECTSLOTIV qalGetAuxiliaryEffectSlotiv = NULL;
|
||||
LPALGETAUXILIARYEFFECTSLOTF qalGetAuxiliaryEffectSlotf = NULL;
|
||||
LPALGETAUXILIARYEFFECTSLOTFV qalGetAuxiliaryEffectSlotfv = NULL;
|
||||
|
||||
|
||||
static void *OpenALLib = NULL;
|
||||
|
||||
static qboolean alinit_fail = qfalse;
|
||||
|
@ -195,6 +236,7 @@ qboolean QAL_Init(const char *libname)
|
|||
qalSource3f = GPA("alSource3f");
|
||||
qalSourcefv = GPA("alSourcefv");
|
||||
qalSourcei = GPA("alSourcei");
|
||||
qalSource3i = GPA("alSource3i");
|
||||
qalGetSourcef = GPA("alGetSourcef");
|
||||
qalGetSource3f = GPA("alGetSource3f");
|
||||
qalGetSourcefv = GPA("alGetSourcefv");
|
||||
|
|
|
@ -47,6 +47,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#include "qal_efx.h"
|
||||
|
||||
|
||||
#ifdef USE_OPENAL_DLOPEN
|
||||
extern LPALENABLE qalEnable;
|
||||
extern LPALDISABLE qalDisable;
|
||||
|
@ -142,6 +145,46 @@ extern LPALCCAPTURECLOSEDEVICE qalcCaptureCloseDevice;
|
|||
extern LPALCCAPTURESTART qalcCaptureStart;
|
||||
extern LPALCCAPTURESTOP qalcCaptureStop;
|
||||
extern LPALCCAPTURESAMPLES qalcCaptureSamples;
|
||||
|
||||
// Effect objects
|
||||
extern LPALGENEFFECTS qalGenEffects;
|
||||
extern LPALDELETEEFFECTS qalDeleteEffects;
|
||||
extern LPALISEFFECT qalIsEffect;
|
||||
extern LPALEFFECTI qalEffecti;
|
||||
extern LPALEFFECTIV qalEffectiv;
|
||||
extern LPALEFFECTF qalEffectf;
|
||||
extern LPALEFFECTFV qalEffectfv;
|
||||
extern LPALGETEFFECTI qalGetEffecti;
|
||||
extern LPALGETEFFECTIV qalGetEffectiv;
|
||||
extern LPALGETEFFECTF qalGetEffectf;
|
||||
extern LPALGETEFFECTFV qalGetEffectfv;
|
||||
|
||||
//Filter objects
|
||||
extern LPALGENFILTERS qalGenFilters;
|
||||
extern LPALDELETEFILTERS qalDeleteFilters;
|
||||
extern LPALISFILTER qalIsFilter;
|
||||
extern LPALFILTERI qalFilteri;
|
||||
extern LPALFILTERIV qalFilteriv;
|
||||
extern LPALFILTERF qalFilterf;
|
||||
extern LPALFILTERFV qalFilterfv;
|
||||
extern LPALGETFILTERI qalGetFilteri;
|
||||
extern LPALGETFILTERIV qalGetFilteriv;
|
||||
extern LPALGETFILTERF qalGetFilterf;
|
||||
extern LPALGETFILTERFV qalGetFilterfv;
|
||||
|
||||
// Auxiliary slot object
|
||||
extern LPALGENAUXILIARYEFFECTSLOTS qalGenAuxiliaryEffectSlots;
|
||||
extern LPALDELETEAUXILIARYEFFECTSLOTS qalDeleteAuxiliaryEffectSlots;
|
||||
extern LPALISAUXILIARYEFFECTSLOT qalIsAuxiliaryEffectSlot;
|
||||
extern LPALAUXILIARYEFFECTSLOTI qalAuxiliaryEffectSloti;
|
||||
extern LPALAUXILIARYEFFECTSLOTIV qalAuxiliaryEffectSlotiv;
|
||||
extern LPALAUXILIARYEFFECTSLOTF qalAuxiliaryEffectSlotf;
|
||||
extern LPALAUXILIARYEFFECTSLOTFV qalAuxiliaryEffectSlotfv;
|
||||
extern LPALGETAUXILIARYEFFECTSLOTI qalGetAuxiliaryEffectSloti;
|
||||
extern LPALGETAUXILIARYEFFECTSLOTIV qalGetAuxiliaryEffectSlotiv;
|
||||
extern LPALGETAUXILIARYEFFECTSLOTF qalGetAuxiliaryEffectSlotf;
|
||||
extern LPALGETAUXILIARYEFFECTSLOTFV qalGetAuxiliaryEffectSlotfv;
|
||||
|
||||
#else
|
||||
#define qalEnable alEnable
|
||||
#define qalDisable alDisable
|
||||
|
|
737
reaction/code/client/qal_efx.h
Normal file
737
reaction/code/client/qal_efx.h
Normal file
|
@ -0,0 +1,737 @@
|
|||
#ifndef __qefx_h_
|
||||
#define __qefx_h_
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define ALC_EXT_EFX_NAME "ALC_EXT_EFX"
|
||||
|
||||
/**
|
||||
* Context definitions to be used with alcCreateContext.
|
||||
* These values must be unique and not conflict with other
|
||||
* al context values.
|
||||
*/
|
||||
#define ALC_EFX_MAJOR_VERSION 0x20001
|
||||
#define ALC_EFX_MINOR_VERSION 0x20002
|
||||
#define ALC_MAX_AUXILIARY_SENDS 0x20003
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Listener definitions to be used with alListener functions.
|
||||
* These values must be unique and not conflict with other
|
||||
* al listener values.
|
||||
*/
|
||||
#define AL_METERS_PER_UNIT 0x20004
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Source definitions to be used with alSource functions.
|
||||
* These values must be unique and not conflict with other
|
||||
* al source values.
|
||||
*/
|
||||
#define AL_DIRECT_FILTER 0x20005
|
||||
#define AL_AUXILIARY_SEND_FILTER 0x20006
|
||||
#define AL_AIR_ABSORPTION_FACTOR 0x20007
|
||||
#define AL_ROOM_ROLLOFF_FACTOR 0x20008
|
||||
#define AL_CONE_OUTER_GAINHF 0x20009
|
||||
#define AL_DIRECT_FILTER_GAINHF_AUTO 0x2000A
|
||||
#define AL_AUXILIARY_SEND_FILTER_GAIN_AUTO 0x2000B
|
||||
#define AL_AUXILIARY_SEND_FILTER_GAINHF_AUTO 0x2000C
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Effect object definitions to be used with alEffect functions.
|
||||
*
|
||||
* Effect parameter value definitions, ranges, and defaults
|
||||
* appear farther down in this file.
|
||||
*/
|
||||
|
||||
/* Reverb Parameters */
|
||||
#define AL_REVERB_DENSITY 0x0001
|
||||
#define AL_REVERB_DIFFUSION 0x0002
|
||||
#define AL_REVERB_GAIN 0x0003
|
||||
#define AL_REVERB_GAINHF 0x0004
|
||||
#define AL_REVERB_DECAY_TIME 0x0005
|
||||
#define AL_REVERB_DECAY_HFRATIO 0x0006
|
||||
#define AL_REVERB_REFLECTIONS_GAIN 0x0007
|
||||
#define AL_REVERB_REFLECTIONS_DELAY 0x0008
|
||||
#define AL_REVERB_LATE_REVERB_GAIN 0x0009
|
||||
#define AL_REVERB_LATE_REVERB_DELAY 0x000A
|
||||
#define AL_REVERB_AIR_ABSORPTION_GAINHF 0x000B
|
||||
#define AL_REVERB_ROOM_ROLLOFF_FACTOR 0x000C
|
||||
#define AL_REVERB_DECAY_HFLIMIT 0x000D
|
||||
|
||||
/* Chorus Parameters */
|
||||
#define AL_CHORUS_WAVEFORM 0x0001
|
||||
#define AL_CHORUS_PHASE 0x0002
|
||||
#define AL_CHORUS_RATE 0x0003
|
||||
#define AL_CHORUS_DEPTH 0x0004
|
||||
#define AL_CHORUS_FEEDBACK 0x0005
|
||||
#define AL_CHORUS_DELAY 0x0006
|
||||
|
||||
/* Distortion Parameters */
|
||||
#define AL_DISTORTION_EDGE 0x0001
|
||||
#define AL_DISTORTION_GAIN 0x0002
|
||||
#define AL_DISTORTION_LOWPASS_CUTOFF 0x0003
|
||||
#define AL_DISTORTION_EQCENTER 0x0004
|
||||
#define AL_DISTORTION_EQBANDWIDTH 0x0005
|
||||
|
||||
/* Echo Parameters */
|
||||
#define AL_ECHO_DELAY 0x0001
|
||||
#define AL_ECHO_LRDELAY 0x0002
|
||||
#define AL_ECHO_DAMPING 0x0003
|
||||
#define AL_ECHO_FEEDBACK 0x0004
|
||||
#define AL_ECHO_SPREAD 0x0005
|
||||
|
||||
/* Flanger Parameters */
|
||||
#define AL_FLANGER_WAVEFORM 0x0001
|
||||
#define AL_FLANGER_PHASE 0x0002
|
||||
#define AL_FLANGER_RATE 0x0003
|
||||
#define AL_FLANGER_DEPTH 0x0004
|
||||
#define AL_FLANGER_FEEDBACK 0x0005
|
||||
#define AL_FLANGER_DELAY 0x0006
|
||||
|
||||
/* Frequencyshifter Parameters */
|
||||
#define AL_FREQUENCY_SHIFTER_FREQUENCY 0x0001
|
||||
#define AL_FREQUENCY_SHIFTER_LEFT_DIRECTION 0x0002
|
||||
#define AL_FREQUENCY_SHIFTER_RIGHT_DIRECTION 0x0003
|
||||
|
||||
/* Vocalmorpher Parameters */
|
||||
#define AL_VOCAL_MORPHER_PHONEMEA 0x0001
|
||||
#define AL_VOCAL_MORPHER_PHONEMEA_COARSE_TUNING 0x0002
|
||||
#define AL_VOCAL_MORPHER_PHONEMEB 0x0003
|
||||
#define AL_VOCAL_MORPHER_PHONEMEB_COARSE_TUNING 0x0004
|
||||
#define AL_VOCAL_MORPHER_WAVEFORM 0x0005
|
||||
#define AL_VOCAL_MORPHER_RATE 0x0006
|
||||
|
||||
/* Pitchshifter Parameters */
|
||||
#define AL_PITCH_SHIFTER_COARSE_TUNE 0x0001
|
||||
#define AL_PITCH_SHIFTER_FINE_TUNE 0x0002
|
||||
|
||||
/* Ringmodulator Parameters */
|
||||
#define AL_RING_MODULATOR_FREQUENCY 0x0001
|
||||
#define AL_RING_MODULATOR_HIGHPASS_CUTOFF 0x0002
|
||||
#define AL_RING_MODULATOR_WAVEFORM 0x0003
|
||||
|
||||
/* Autowah Parameters */
|
||||
#define AL_AUTOWAH_ATTACK_TIME 0x0001
|
||||
#define AL_AUTOWAH_RELEASE_TIME 0x0002
|
||||
#define AL_AUTOWAH_RESONANCE 0x0003
|
||||
#define AL_AUTOWAH_PEAK_GAIN 0x0004
|
||||
|
||||
/* Compressor Parameters */
|
||||
#define AL_COMPRESSOR_ONOFF 0x0001
|
||||
|
||||
/* Equalizer Parameters */
|
||||
#define AL_EQUALIZER_LOW_GAIN 0x0001
|
||||
#define AL_EQUALIZER_LOW_CUTOFF 0x0002
|
||||
#define AL_EQUALIZER_MID1_GAIN 0x0003
|
||||
#define AL_EQUALIZER_MID1_CENTER 0x0004
|
||||
#define AL_EQUALIZER_MID1_WIDTH 0x0005
|
||||
#define AL_EQUALIZER_MID2_GAIN 0x0006
|
||||
#define AL_EQUALIZER_MID2_CENTER 0x0007
|
||||
#define AL_EQUALIZER_MID2_WIDTH 0x0008
|
||||
#define AL_EQUALIZER_HIGH_GAIN 0x0009
|
||||
#define AL_EQUALIZER_HIGH_CUTOFF 0x000A
|
||||
|
||||
/* Effect type */
|
||||
#define AL_EFFECT_FIRST_PARAMETER 0x0000
|
||||
#define AL_EFFECT_LAST_PARAMETER 0x8000
|
||||
#define AL_EFFECT_TYPE 0x8001
|
||||
|
||||
/* Effect type definitions to be used with AL_EFFECT_TYPE. */
|
||||
#define AL_EFFECT_NULL 0x0000 /* Can also be used as an Effect Object ID */
|
||||
#define AL_EFFECT_REVERB 0x0001
|
||||
#define AL_EFFECT_CHORUS 0x0002
|
||||
#define AL_EFFECT_DISTORTION 0x0003
|
||||
#define AL_EFFECT_ECHO 0x0004
|
||||
#define AL_EFFECT_FLANGER 0x0005
|
||||
#define AL_EFFECT_FREQUENCY_SHIFTER 0x0006
|
||||
#define AL_EFFECT_VOCAL_MORPHER 0x0007
|
||||
#define AL_EFFECT_PITCH_SHIFTER 0x0008
|
||||
#define AL_EFFECT_RING_MODULATOR 0x0009
|
||||
#define AL_EFFECT_AUTOWAH 0x000A
|
||||
#define AL_EFFECT_COMPRESSOR 0x000B
|
||||
#define AL_EFFECT_EQUALIZER 0x000C
|
||||
|
||||
/**
|
||||
* Auxiliary Slot object definitions to be used with alAuxiliaryEffectSlot functions.
|
||||
*/
|
||||
#define AL_EFFECTSLOT_EFFECT 0x0001
|
||||
#define AL_EFFECTSLOT_GAIN 0x0002
|
||||
#define AL_EFFECTSLOT_AUXILIARY_SEND_AUTO 0x0003
|
||||
|
||||
/**
|
||||
* Value to be used as an Auxiliary Slot ID to disable a source send..
|
||||
*/
|
||||
#define AL_EFFECTSLOT_NULL 0x0000
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Filter object definitions to be used with alFilter functions.
|
||||
*/
|
||||
|
||||
/* Lowpass parameters. */
|
||||
#define AL_LOWPASS_GAIN 0x0001
|
||||
#define AL_LOWPASS_GAINHF 0x0002
|
||||
|
||||
/* Highpass Parameters */
|
||||
#define AL_HIGHPASS_GAIN 0x0001
|
||||
#define AL_HIGHPASS_GAINLF 0x0002
|
||||
|
||||
/* Bandpass Parameters */
|
||||
#define AL_BANDPASS_GAIN 0x0001
|
||||
#define AL_BANDPASS_GAINLF 0x0002
|
||||
#define AL_BANDPASS_GAINHF 0x0003
|
||||
|
||||
/* Filter type */
|
||||
#define AL_FILTER_FIRST_PARAMETER 0x0000
|
||||
#define AL_FILTER_LAST_PARAMETER 0x8000
|
||||
#define AL_FILTER_TYPE 0x8001
|
||||
|
||||
/* Filter type definitions to be used with AL_FILTER_TYPE. */
|
||||
#define AL_FILTER_NULL 0x0000 /* Can also be used as a Filter Object ID */
|
||||
#define AL_FILTER_LOWPASS 0x0001
|
||||
#define AL_FILTER_HIGHPASS 0x0002
|
||||
#define AL_FILTER_BANDPASS 0x0003
|
||||
|
||||
|
||||
/**
|
||||
* Effect object functions.
|
||||
*/
|
||||
|
||||
/* Create Effect objects. */
|
||||
typedef void (__cdecl *LPALGENEFFECTS)( ALsizei n, ALuint* effects );
|
||||
|
||||
/* Delete Effect objects. */
|
||||
typedef void (__cdecl *LPALDELETEEFFECTS)( ALsizei n, ALuint* effects );
|
||||
|
||||
/* Verify a handle is a valid Effect. */
|
||||
typedef ALboolean (__cdecl *LPALISEFFECT)( ALuint eid );
|
||||
|
||||
/* Set an integer parameter for an Effect object. */
|
||||
typedef void (__cdecl *LPALEFFECTI)( ALuint eid, ALenum param, ALint value);
|
||||
typedef void (__cdecl *LPALEFFECTIV)( ALuint eid, ALenum param, ALint* values );
|
||||
|
||||
/* Set a floating point parameter for an Effect object. */
|
||||
typedef void (__cdecl *LPALEFFECTF)( ALuint eid, ALenum param, ALfloat value);
|
||||
typedef void (__cdecl *LPALEFFECTFV)( ALuint eid, ALenum param, ALfloat* values );
|
||||
|
||||
/* Get an integer parameter for an Effect object. */
|
||||
typedef void (__cdecl *LPALGETEFFECTI)( ALuint eid, ALenum pname, ALint* value );
|
||||
typedef void (__cdecl *LPALGETEFFECTIV)( ALuint eid, ALenum pname, ALint* values );
|
||||
|
||||
/* Get a floating point parameter for an Effect object. */
|
||||
typedef void (__cdecl *LPALGETEFFECTF)( ALuint eid, ALenum pname, ALfloat* value );
|
||||
typedef void (__cdecl *LPALGETEFFECTFV)( ALuint eid, ALenum pname, ALfloat* values );
|
||||
|
||||
|
||||
/**
|
||||
* Filter object functions
|
||||
*/
|
||||
|
||||
/* Create Filter objects. */
|
||||
typedef void (__cdecl *LPALGENFILTERS)( ALsizei n, ALuint* filters );
|
||||
|
||||
/* Delete Filter objects. */
|
||||
typedef void (__cdecl *LPALDELETEFILTERS)( ALsizei n, ALuint* filters );
|
||||
|
||||
/* Verify a handle is a valid Filter. */
|
||||
typedef ALboolean (__cdecl *LPALISFILTER)( ALuint fid );
|
||||
|
||||
/* Set an integer parameter for a Filter object. */
|
||||
typedef void (__cdecl *LPALFILTERI)( ALuint fid, ALenum param, ALint value );
|
||||
typedef void (__cdecl *LPALFILTERIV)( ALuint fid, ALenum param, ALint* values );
|
||||
|
||||
/* Set a floating point parameter for an Filter object. */
|
||||
typedef void (__cdecl *LPALFILTERF)( ALuint fid, ALenum param, ALfloat value);
|
||||
typedef void (__cdecl *LPALFILTERFV)( ALuint fid, ALenum param, ALfloat* values );
|
||||
|
||||
/* Get an integer parameter for a Filter object. */
|
||||
typedef void (__cdecl *LPALGETFILTERI)( ALuint fid, ALenum pname, ALint* value );
|
||||
typedef void (__cdecl *LPALGETFILTERIV)( ALuint fid, ALenum pname, ALint* values );
|
||||
|
||||
/* Get a floating point parameter for a Filter object. */
|
||||
typedef void (__cdecl *LPALGETFILTERF)( ALuint fid, ALenum pname, ALfloat* value );
|
||||
typedef void (__cdecl *LPALGETFILTERFV)( ALuint fid, ALenum pname, ALfloat* values );
|
||||
|
||||
|
||||
/**
|
||||
* Auxiliary Slot object functions
|
||||
*/
|
||||
|
||||
/* Create Auxiliary Slot objects. */
|
||||
typedef void (__cdecl *LPALGENAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots );
|
||||
|
||||
/* Delete Auxiliary Slot objects. */
|
||||
typedef void (__cdecl *LPALDELETEAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots );
|
||||
|
||||
/* Verify a handle is a valid Auxiliary Slot. */
|
||||
typedef ALboolean (__cdecl *LPALISAUXILIARYEFFECTSLOT)( ALuint slot );
|
||||
|
||||
/* Set an integer parameter for a Auxiliary Slot object. */
|
||||
typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum param, ALint value );
|
||||
typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTIV)( ALuint asid, ALenum param, ALint* values );
|
||||
|
||||
/* Set a floating point parameter for an Auxiliary Slot object. */
|
||||
typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum param, ALfloat value );
|
||||
typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTFV)( ALuint asid, ALenum param, ALfloat* values );
|
||||
|
||||
/* Get an integer parameter for a Auxiliary Slot object. */
|
||||
typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum pname, ALint* value );
|
||||
typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTIV)( ALuint asid, ALenum pname, ALint* values );
|
||||
|
||||
/* Get a floating point parameter for a Auxiliary Slot object. */
|
||||
typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum pname, ALfloat* value );
|
||||
typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTFV)( ALuint asid, ALenum pname, ALfloat* values );
|
||||
|
||||
|
||||
|
||||
|
||||
/**********************************************************
|
||||
* Filter ranges and defaults.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Lowpass filter
|
||||
*/
|
||||
|
||||
#define LOWPASS_MIN_GAIN 0.0f
|
||||
#define LOWPASS_MAX_GAIN 1.0f
|
||||
#define LOWPASS_DEFAULT_GAIN 1.0f
|
||||
|
||||
#define LOWPASS_MIN_GAINHF 0.0f
|
||||
#define LOWPASS_MAX_GAINHF 1.0f
|
||||
#define LOWPASS_DEFAULT_GAINHF 1.0f
|
||||
|
||||
/**
|
||||
* Highpass filter
|
||||
*/
|
||||
|
||||
#define HIGHPASS_MIN_GAIN 0.0f
|
||||
#define HIGHPASS_MAX_GAIN 1.0f
|
||||
#define HIGHPASS_DEFAULT_GAIN 1.0f
|
||||
|
||||
#define HIGHPASS_MIN_GAINLF 0.0f
|
||||
#define HIGHPASS_MAX_GAINLF 1.0f
|
||||
#define HIGHPASS_DEFAULT_GAINLF 1.0f
|
||||
|
||||
/**
|
||||
* Bandpass filter
|
||||
*/
|
||||
|
||||
#define BANDPASS_MIN_GAIN 0.0f
|
||||
#define BANDPASS_MAX_GAIN 1.0f
|
||||
#define BANDPASS_DEFAULT_GAIN 1.0f
|
||||
|
||||
#define BANDPASS_MIN_GAINHF 0.0f
|
||||
#define BANDPASS_MAX_GAINHF 1.0f
|
||||
#define BANDPASS_DEFAULT_GAINHF 1.0f
|
||||
|
||||
#define BANDPASS_MIN_GAINLF 0.0f
|
||||
#define BANDPASS_MAX_GAINLF 1.0f
|
||||
#define BANDPASS_DEFAULT_GAINLF 1.0f
|
||||
|
||||
|
||||
|
||||
|
||||
/**********************************************************
|
||||
* Effect parameter structures, value definitions, ranges and defaults.
|
||||
*/
|
||||
|
||||
/**
|
||||
* AL reverb effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_REVERB_MIN_DENSITY 0.0f
|
||||
#define AL_REVERB_MAX_DENSITY 1.0f
|
||||
#define AL_REVERB_DEFAULT_DENSITY 1.0f
|
||||
|
||||
#define AL_REVERB_MIN_DIFFUSION 0.0f
|
||||
#define AL_REVERB_MAX_DIFFUSION 1.0f
|
||||
#define AL_REVERB_DEFAULT_DIFFUSION 1.0f
|
||||
|
||||
#define AL_REVERB_MIN_GAIN 0.0f
|
||||
#define AL_REVERB_MAX_GAIN 1.0f
|
||||
#define AL_REVERB_DEFAULT_GAIN 0.32f
|
||||
|
||||
#define AL_REVERB_MIN_GAINHF 0.0f
|
||||
#define AL_REVERB_MAX_GAINHF 1.0f
|
||||
#define AL_REVERB_DEFAULT_GAINHF 0.89f
|
||||
|
||||
#define AL_REVERB_MIN_DECAY_TIME 0.1f
|
||||
#define AL_REVERB_MAX_DECAY_TIME 20.0f
|
||||
#define AL_REVERB_DEFAULT_DECAY_TIME 1.49f
|
||||
|
||||
#define AL_REVERB_MIN_DECAY_HFRATIO 0.1f
|
||||
#define AL_REVERB_MAX_DECAY_HFRATIO 2.0f
|
||||
#define AL_REVERB_DEFAULT_DECAY_HFRATIO 0.83f
|
||||
|
||||
#define AL_REVERB_MIN_REFLECTIONS_GAIN 0.0f
|
||||
#define AL_REVERB_MAX_REFLECTIONS_GAIN 3.16f
|
||||
#define AL_REVERB_DEFAULT_REFLECTIONS_GAIN 0.05f
|
||||
|
||||
#define AL_REVERB_MIN_REFLECTIONS_DELAY 0.0f
|
||||
#define AL_REVERB_MAX_REFLECTIONS_DELAY 0.3f
|
||||
#define AL_REVERB_DEFAULT_REFLECTIONS_DELAY 0.007f
|
||||
|
||||
#define AL_REVERB_MIN_LATE_REVERB_GAIN 0.0f
|
||||
#define AL_REVERB_MAX_LATE_REVERB_GAIN 10.0f
|
||||
#define AL_REVERB_DEFAULT_LATE_REVERB_GAIN 1.26f
|
||||
|
||||
#define AL_REVERB_MIN_LATE_REVERB_DELAY 0.0f
|
||||
#define AL_REVERB_MAX_LATE_REVERB_DELAY 0.1f
|
||||
#define AL_REVERB_DEFAULT_LATE_REVERB_DELAY 0.011f
|
||||
|
||||
#define AL_REVERB_MIN_AIR_ABSORPTION_GAINHF 0.892f
|
||||
#define AL_REVERB_MAX_AIR_ABSORPTION_GAINHF 1.0f
|
||||
#define AL_REVERB_DEFAULT_AIR_ABSORPTION_GAINHF 0.994f
|
||||
|
||||
#define AL_REVERB_MIN_ROOM_ROLLOFF_FACTOR 0.0f
|
||||
#define AL_REVERB_MAX_ROOM_ROLLOFF_FACTOR 10.0f
|
||||
#define AL_REVERB_DEFAULT_ROOM_ROLLOFF_FACTOR 0.0f
|
||||
|
||||
#define AL_REVERB_MIN_DECAY_HFLIMIT AL_FALSE
|
||||
#define AL_REVERB_MAX_DECAY_HFLIMIT AL_TRUE
|
||||
#define AL_REVERB_DEFAULT_DECAY_HFLIMIT AL_TRUE
|
||||
|
||||
/**
|
||||
* AL chorus effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_CHORUS_MIN_WAVEFORM 0
|
||||
#define AL_CHORUS_MAX_WAVEFORM 1
|
||||
#define AL_CHORUS_DEFAULT_WAVEFORM 1
|
||||
|
||||
#define AL_CHORUS_WAVEFORM_SINUSOID 0
|
||||
#define AL_CHORUS_WAVEFORM_TRIANGLE 1
|
||||
|
||||
#define AL_CHORUS_MIN_PHASE (-180)
|
||||
#define AL_CHORUS_MAX_PHASE 180
|
||||
#define AL_CHORUS_DEFAULT_PHASE 90
|
||||
|
||||
#define AL_CHORUS_MIN_RATE 0.0f
|
||||
#define AL_CHORUS_MAX_RATE 10.0f
|
||||
#define AL_CHORUS_DEFAULT_RATE 1.1f
|
||||
|
||||
#define AL_CHORUS_MIN_DEPTH 0.0f
|
||||
#define AL_CHORUS_MAX_DEPTH 1.0f
|
||||
#define AL_CHORUS_DEFAULT_DEPTH 0.1f
|
||||
|
||||
#define AL_CHORUS_MIN_FEEDBACK (-1.0f)
|
||||
#define AL_CHORUS_MAX_FEEDBACK 1.0f
|
||||
#define AL_CHORUS_DEFAULT_FEEDBACK 0.25f
|
||||
|
||||
#define AL_CHORUS_MIN_DELAY 0.0f
|
||||
#define AL_CHORUS_MAX_DELAY 0.016f
|
||||
#define AL_CHORUS_DEFAULT_DELAY 0.016f
|
||||
|
||||
/**
|
||||
* AL distortion effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_DISTORTION_MIN_EDGE 0.0f
|
||||
#define AL_DISTORTION_MAX_EDGE 1.0f
|
||||
#define AL_DISTORTION_DEFAULT_EDGE 0.2f
|
||||
|
||||
#define AL_DISTORTION_MIN_GAIN 0.01f
|
||||
#define AL_DISTORTION_MAX_GAIN 1.0f
|
||||
#define AL_DISTORTION_DEFAULT_GAIN 0.05f
|
||||
|
||||
#define AL_DISTORTION_MIN_LOWPASS_CUTOFF 80.0f
|
||||
#define AL_DISTORTION_MAX_LOWPASS_CUTOFF 24000.0f
|
||||
#define AL_DISTORTION_DEFAULT_LOWPASS_CUTOFF 8000.0f
|
||||
|
||||
#define AL_DISTORTION_MIN_EQCENTER 80.0f
|
||||
#define AL_DISTORTION_MAX_EQCENTER 24000.0f
|
||||
#define AL_DISTORTION_DEFAULT_EQCENTER 3600.0f
|
||||
|
||||
#define AL_DISTORTION_MIN_EQBANDWIDTH 80.0f
|
||||
#define AL_DISTORTION_MAX_EQBANDWIDTH 24000.0f
|
||||
#define AL_DISTORTION_DEFAULT_EQBANDWIDTH 3600.0f
|
||||
|
||||
/**
|
||||
* AL echo effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_ECHO_MIN_DELAY 0.0f
|
||||
#define AL_ECHO_MAX_DELAY 0.207f
|
||||
#define AL_ECHO_DEFAULT_DELAY 0.1f
|
||||
|
||||
#define AL_ECHO_MIN_LRDELAY 0.0f
|
||||
#define AL_ECHO_MAX_LRDELAY 0.404f
|
||||
#define AL_ECHO_DEFAULT_LRDELAY 0.1f
|
||||
|
||||
#define AL_ECHO_MIN_DAMPING 0.0f
|
||||
#define AL_ECHO_MAX_DAMPING 0.99f
|
||||
#define AL_ECHO_DEFAULT_DAMPING 0.5f
|
||||
|
||||
#define AL_ECHO_MIN_FEEDBACK 0.0f
|
||||
#define AL_ECHO_MAX_FEEDBACK 1.0f
|
||||
#define AL_ECHO_DEFAULT_FEEDBACK 0.5f
|
||||
|
||||
#define AL_ECHO_MIN_SPREAD (-1.0f)
|
||||
#define AL_ECHO_MAX_SPREAD 1.0f
|
||||
#define AL_ECHO_DEFAULT_SPREAD (-1.0f)
|
||||
|
||||
/**
|
||||
* AL flanger effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_FLANGER_MIN_WAVEFORM 0
|
||||
#define AL_FLANGER_MAX_WAVEFORM 1
|
||||
#define AL_FLANGER_DEFAULT_WAVEFORM 1
|
||||
|
||||
#define AL_FLANGER_WAVEFORM_SINUSOID 0
|
||||
#define AL_FLANGER_WAVEFORM_TRIANGLE 1
|
||||
|
||||
#define AL_FLANGER_MIN_PHASE (-180)
|
||||
#define AL_FLANGER_MAX_PHASE 180
|
||||
#define AL_FLANGER_DEFAULT_PHASE 0
|
||||
|
||||
#define AL_FLANGER_MIN_RATE 0.0f
|
||||
#define AL_FLANGER_MAX_RATE 10.0f
|
||||
#define AL_FLANGER_DEFAULT_RATE 0.27f
|
||||
|
||||
#define AL_FLANGER_MIN_DEPTH 0.0f
|
||||
#define AL_FLANGER_MAX_DEPTH 1.0f
|
||||
#define AL_FLANGER_DEFAULT_DEPTH 1.0f
|
||||
|
||||
#define AL_FLANGER_MIN_FEEDBACK (-1.0f)
|
||||
#define AL_FLANGER_MAX_FEEDBACK 1.0f
|
||||
#define AL_FLANGER_DEFAULT_FEEDBACK (-0.5f)
|
||||
|
||||
#define AL_FLANGER_MIN_DELAY 0.0f
|
||||
#define AL_FLANGER_MAX_DELAY 0.004f
|
||||
#define AL_FLANGER_DEFAULT_DELAY 0.002f
|
||||
|
||||
/**
|
||||
* AL frequency shifter effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_FREQUENCY_SHIFTER_MIN_FREQUENCY 0.0f
|
||||
#define AL_FREQUENCY_SHIFTER_MAX_FREQUENCY 24000.0f
|
||||
#define AL_FREQUENCY_SHIFTER_DEFAULT_FREQUENCY 0.0f
|
||||
|
||||
#define AL_FREQUENCY_SHIFTER_MIN_LEFT_DIRECTION 0
|
||||
#define AL_FREQUENCY_SHIFTER_MAX_LEFT_DIRECTION 2
|
||||
#define AL_FREQUENCY_SHIFTER_DEFAULT_LEFT_DIRECTION 0
|
||||
|
||||
#define AL_FREQUENCY_SHIFTER_MIN_RIGHT_DIRECTION 0
|
||||
#define AL_FREQUENCY_SHIFTER_MAX_RIGHT_DIRECTION 2
|
||||
#define AL_FREQUENCY_SHIFTER_DEFAULT_RIGHT_DIRECTION 0
|
||||
|
||||
#define AL_FREQUENCY_SHIFTER_DIRECTION_DOWN 0
|
||||
#define AL_FREQUENCY_SHIFTER_DIRECTION_UP 1
|
||||
#define AL_FREQUENCY_SHIFTER_DIRECTION_OFF 2
|
||||
|
||||
/**
|
||||
* AL vocal morpher effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_VOCAL_MORPHER_MIN_PHONEMEA 0
|
||||
#define AL_VOCAL_MORPHER_MAX_PHONEMEA 29
|
||||
#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA 0
|
||||
|
||||
#define AL_VOCAL_MORPHER_MIN_PHONEMEA_COARSE_TUNING (-24)
|
||||
#define AL_VOCAL_MORPHER_MAX_PHONEMEA_COARSE_TUNING 24
|
||||
#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA_COARSE_TUNING 0
|
||||
|
||||
#define AL_VOCAL_MORPHER_MIN_PHONEMEB 0
|
||||
#define AL_VOCAL_MORPHER_MAX_PHONEMEB 29
|
||||
#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB 10
|
||||
|
||||
#define AL_VOCAL_MORPHER_PHONEME_A 0
|
||||
#define AL_VOCAL_MORPHER_PHONEME_E 1
|
||||
#define AL_VOCAL_MORPHER_PHONEME_I 2
|
||||
#define AL_VOCAL_MORPHER_PHONEME_O 3
|
||||
#define AL_VOCAL_MORPHER_PHONEME_U 4
|
||||
#define AL_VOCAL_MORPHER_PHONEME_AA 5
|
||||
#define AL_VOCAL_MORPHER_PHONEME_AE 6
|
||||
#define AL_VOCAL_MORPHER_PHONEME_AH 7
|
||||
#define AL_VOCAL_MORPHER_PHONEME_AO 8
|
||||
#define AL_VOCAL_MORPHER_PHONEME_EH 9
|
||||
#define AL_VOCAL_MORPHER_PHONEME_ER 10
|
||||
#define AL_VOCAL_MORPHER_PHONEME_IH 11
|
||||
#define AL_VOCAL_MORPHER_PHONEME_IY 12
|
||||
#define AL_VOCAL_MORPHER_PHONEME_UH 13
|
||||
#define AL_VOCAL_MORPHER_PHONEME_UW 14
|
||||
#define AL_VOCAL_MORPHER_PHONEME_B 15
|
||||
#define AL_VOCAL_MORPHER_PHONEME_D 16
|
||||
#define AL_VOCAL_MORPHER_PHONEME_F 17
|
||||
#define AL_VOCAL_MORPHER_PHONEME_G 18
|
||||
#define AL_VOCAL_MORPHER_PHONEME_J 19
|
||||
#define AL_VOCAL_MORPHER_PHONEME_K 20
|
||||
#define AL_VOCAL_MORPHER_PHONEME_L 21
|
||||
#define AL_VOCAL_MORPHER_PHONEME_M 22
|
||||
#define AL_VOCAL_MORPHER_PHONEME_N 23
|
||||
#define AL_VOCAL_MORPHER_PHONEME_P 24
|
||||
#define AL_VOCAL_MORPHER_PHONEME_R 25
|
||||
#define AL_VOCAL_MORPHER_PHONEME_S 26
|
||||
#define AL_VOCAL_MORPHER_PHONEME_T 27
|
||||
#define AL_VOCAL_MORPHER_PHONEME_V 28
|
||||
#define AL_VOCAL_MORPHER_PHONEME_Z 29
|
||||
|
||||
#define AL_VOCAL_MORPHER_MIN_PHONEMEB_COARSE_TUNING (-24)
|
||||
#define AL_VOCAL_MORPHER_MAX_PHONEMEB_COARSE_TUNING 24
|
||||
#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB_COARSE_TUNING 0
|
||||
|
||||
#define AL_VOCAL_MORPHER_MIN_WAVEFORM 0
|
||||
#define AL_VOCAL_MORPHER_MAX_WAVEFORM 2
|
||||
#define AL_VOCAL_MORPHER_DEFAULT_WAVEFORM 0
|
||||
|
||||
#define AL_VOCAL_MORPHER_WAVEFORM_SINUSOID 0
|
||||
#define AL_VOCAL_MORPHER_WAVEFORM_TRIANGLE 1
|
||||
#define AL_VOCAL_MORPHER_WAVEFORM_SAWTOOTH 2
|
||||
|
||||
#define AL_VOCAL_MORPHER_MIN_RATE 0.0f
|
||||
#define AL_VOCAL_MORPHER_MAX_RATE 10.0f
|
||||
#define AL_VOCAL_MORPHER_DEFAULT_RATE 1.41f
|
||||
|
||||
/**
|
||||
* AL pitch shifter effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_PITCH_SHIFTER_MIN_COARSE_TUNE (-12)
|
||||
#define AL_PITCH_SHIFTER_MAX_COARSE_TUNE 12
|
||||
#define AL_PITCH_SHIFTER_DEFAULT_COARSE_TUNE 12
|
||||
|
||||
#define AL_PITCH_SHIFTER_MIN_FINE_TUNE (-50)
|
||||
#define AL_PITCH_SHIFTER_MAX_FINE_TUNE 50
|
||||
#define AL_PITCH_SHIFTER_DEFAULT_FINE_TUNE 0
|
||||
|
||||
/**
|
||||
* AL ring modulator effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_RING_MODULATOR_MIN_FREQUENCY 0.0f
|
||||
#define AL_RING_MODULATOR_MAX_FREQUENCY 8000.0f
|
||||
#define AL_RING_MODULATOR_DEFAULT_FREQUENCY 440.0f
|
||||
|
||||
#define AL_RING_MODULATOR_MIN_HIGHPASS_CUTOFF 0.0f
|
||||
#define AL_RING_MODULATOR_MAX_HIGHPASS_CUTOFF 24000.0f
|
||||
#define AL_RING_MODULATOR_DEFAULT_HIGHPASS_CUTOFF 800.0f
|
||||
|
||||
#define AL_RING_MODULATOR_MIN_WAVEFORM 0
|
||||
#define AL_RING_MODULATOR_MAX_WAVEFORM 2
|
||||
#define AL_RING_MODULATOR_DEFAULT_WAVEFORM 0
|
||||
|
||||
#define AL_RING_MODULATOR_SINUSOID 0
|
||||
#define AL_RING_MODULATOR_SAWTOOTH 1
|
||||
#define AL_RING_MODULATOR_SQUARE 2
|
||||
|
||||
/**
|
||||
* AL autowah effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_AUTOWAH_MIN_ATTACK_TIME 0.0001f
|
||||
#define AL_AUTOWAH_MAX_ATTACK_TIME 1.0f
|
||||
#define AL_AUTOWAH_DEFAULT_ATTACK_TIME 0.06f
|
||||
|
||||
#define AL_AUTOWAH_MIN_RELEASE_TIME 0.0001f
|
||||
#define AL_AUTOWAH_MAX_RELEASE_TIME 1.0f
|
||||
#define AL_AUTOWAH_DEFAULT_RELEASE_TIME 0.06f
|
||||
|
||||
#define AL_AUTOWAH_MIN_RESONANCE 2.0f
|
||||
#define AL_AUTOWAH_MAX_RESONANCE 1000.0f
|
||||
#define AL_AUTOWAH_DEFAULT_RESONANCE 1000.0f
|
||||
|
||||
#define AL_AUTOWAH_MIN_PEAK_GAIN 0.00003f
|
||||
#define AL_AUTOWAH_MAX_PEAK_GAIN 31621.0f
|
||||
#define AL_AUTOWAH_DEFAULT_PEAK_GAIN 11.22f
|
||||
|
||||
/**
|
||||
* AL compressor effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_COMPRESSOR_MIN_ONOFF 0
|
||||
#define AL_COMPRESSOR_MAX_ONOFF 1
|
||||
#define AL_COMPRESSOR_DEFAULT_ONOFF 1
|
||||
|
||||
/**
|
||||
* AL equalizer effect parameter ranges and defaults
|
||||
*/
|
||||
#define AL_EQUALIZER_MIN_LOW_GAIN 0.126f
|
||||
#define AL_EQUALIZER_MAX_LOW_GAIN 7.943f
|
||||
#define AL_EQUALIZER_DEFAULT_LOW_GAIN 1.0f
|
||||
|
||||
#define AL_EQUALIZER_MIN_LOW_CUTOFF 50.0f
|
||||
#define AL_EQUALIZER_MAX_LOW_CUTOFF 800.0f
|
||||
#define AL_EQUALIZER_DEFAULT_LOW_CUTOFF 200.0f
|
||||
|
||||
#define AL_EQUALIZER_MIN_MID1_GAIN 0.126f
|
||||
#define AL_EQUALIZER_MAX_MID1_GAIN 7.943f
|
||||
#define AL_EQUALIZER_DEFAULT_MID1_GAIN 1.0f
|
||||
|
||||
#define AL_EQUALIZER_MIN_MID1_CENTER 200.0f
|
||||
#define AL_EQUALIZER_MAX_MID1_CENTER 3000.0f
|
||||
#define AL_EQUALIZER_DEFAULT_MID1_CENTER 500.0f
|
||||
|
||||
#define AL_EQUALIZER_MIN_MID1_WIDTH 0.01f
|
||||
#define AL_EQUALIZER_MAX_MID1_WIDTH 1.0f
|
||||
#define AL_EQUALIZER_DEFAULT_MID1_WIDTH 1.0f
|
||||
|
||||
#define AL_EQUALIZER_MIN_MID2_GAIN 0.126f
|
||||
#define AL_EQUALIZER_MAX_MID2_GAIN 7.943f
|
||||
#define AL_EQUALIZER_DEFAULT_MID2_GAIN 1.0f
|
||||
|
||||
#define AL_EQUALIZER_MIN_MID2_CENTER 1000.0f
|
||||
#define AL_EQUALIZER_MAX_MID2_CENTER 8000.0f
|
||||
#define AL_EQUALIZER_DEFAULT_MID2_CENTER 3000.0f
|
||||
|
||||
#define AL_EQUALIZER_MIN_MID2_WIDTH 0.01f
|
||||
#define AL_EQUALIZER_MAX_MID2_WIDTH 1.0f
|
||||
#define AL_EQUALIZER_DEFAULT_MID2_WIDTH 1.0f
|
||||
|
||||
#define AL_EQUALIZER_MIN_HIGH_GAIN 0.126f
|
||||
#define AL_EQUALIZER_MAX_HIGH_GAIN 7.943f
|
||||
#define AL_EQUALIZER_DEFAULT_HIGH_GAIN 1.0f
|
||||
|
||||
#define AL_EQUALIZER_MIN_HIGH_CUTOFF 4000.0f
|
||||
#define AL_EQUALIZER_MAX_HIGH_CUTOFF 16000.0f
|
||||
#define AL_EQUALIZER_DEFAULT_HIGH_CUTOFF 6000.0f
|
||||
|
||||
|
||||
|
||||
|
||||
/**********************************************************
|
||||
* Source parameter value definitions, ranges and defaults.
|
||||
*/
|
||||
#define AL_MIN_AIR_ABSORPTION_FACTOR 0.0f
|
||||
#define AL_MAX_AIR_ABSORPTION_FACTOR 10.0f
|
||||
#define AL_DEFAULT_AIR_ABSORPTION_FACTOR 0.0f
|
||||
|
||||
#define AL_MIN_ROOM_ROLLOFF_FACTOR 0.0f
|
||||
#define AL_MAX_ROOM_ROLLOFF_FACTOR 10.0f
|
||||
#define AL_DEFAULT_ROOM_ROLLOFF_FACTOR 0.0f
|
||||
|
||||
#define AL_MIN_CONE_OUTER_GAINHF 0.0f
|
||||
#define AL_MAX_CONE_OUTER_GAINHF 1.0f
|
||||
#define AL_DEFAULT_CONE_OUTER_GAINHF 1.0f
|
||||
|
||||
#define AL_MIN_DIRECT_FILTER_GAINHF_AUTO AL_FALSE
|
||||
#define AL_MAX_DIRECT_FILTER_GAINHF_AUTO AL_TRUE
|
||||
#define AL_DEFAULT_DIRECT_FILTER_GAINHF_AUTO AL_TRUE
|
||||
|
||||
#define AL_MIN_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_FALSE
|
||||
#define AL_MAX_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE
|
||||
#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE
|
||||
|
||||
#define AL_MIN_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_FALSE
|
||||
#define AL_MAX_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE
|
||||
#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE
|
||||
|
||||
|
||||
|
||||
|
||||
/**********************************************************
|
||||
* Listener parameter value definitions, ranges and defaults.
|
||||
*/
|
||||
#define AL_MIN_METERS_PER_UNIT FLT_MIN
|
||||
#define AL_MAX_METERS_PER_UNIT FLT_MAX
|
||||
#define AL_DEFAULT_METERS_PER_UNIT 1.0f
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* __qefx_h_ */
|
774
reaction/code/client/snd_alreverbs.h
Normal file
774
reaction/code/client/snd_alreverbs.h
Normal file
|
@ -0,0 +1,774 @@
|
|||
#define REVERB_PRESET_CITY \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.5f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.398107f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 1.49f, \
|
||||
/*flDecayHFRatio*/ 0.67f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.0730298f, \
|
||||
/*flReflectionsDelay*/ 0.007f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.142725f, \
|
||||
/*flLateReverbDelay*/ 0.011f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_CITY_SUBWAY \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.74f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.707946f, \
|
||||
/*flGainLF*/ 0.891251f, \
|
||||
/*flDecayTime*/ 3.01f, \
|
||||
/*flDecayHFRatio*/ 1.23f, \
|
||||
/*flDecayLFRatio*/ 0.91f, \
|
||||
/*flReflectionsGain*/ 0.707946f, \
|
||||
/*flReflectionsDelay*/ 0.046f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 1.25893f, \
|
||||
/*flLateReverbDelay*/ 0.028f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.125f, \
|
||||
/*flEchoDepth*/ 0.21f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_CITY_UNDERPASS \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.82f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.446684f, \
|
||||
/*flGainLF*/ 0.891251f, \
|
||||
/*flDecayTime*/ 3.57f, \
|
||||
/*flDecayHFRatio*/ 1.12f, \
|
||||
/*flDecayLFRatio*/ 0.91f, \
|
||||
/*flReflectionsGain*/ 0.398107f, \
|
||||
/*flReflectionsDelay*/ 0.059f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.891251f, \
|
||||
/*flLateReverbDelay*/ 0.037f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.14f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.991973f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_CITY_ABANDONED \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.69f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.794328f, \
|
||||
/*flGainLF*/ 0.891251f, \
|
||||
/*flDecayTime*/ 3.28f, \
|
||||
/*flDecayHFRatio*/ 1.17f, \
|
||||
/*flDecayLFRatio*/ 0.91f, \
|
||||
/*flReflectionsGain*/ 0.446684f, \
|
||||
/*flReflectionsDelay*/ 0.044f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.281838f, \
|
||||
/*flLateReverbDelay*/ 0.024f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.2f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.996552f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_ALLEY \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.3f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.732825f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 1.49f, \
|
||||
/*flDecayHFRatio*/ 0.86f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.250035f, \
|
||||
/*flReflectionsDelay*/ 0.007f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.995405f, \
|
||||
/*flLateReverbDelay*/ 0.011f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.125f, \
|
||||
/*flEchoDepth*/ 0.95f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_PARKINGLOT \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 1.f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 1.f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 1.65f, \
|
||||
/*flDecayHFRatio*/ 1.5f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.208209f, \
|
||||
/*flReflectionsDelay*/ 0.008f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.265155f, \
|
||||
/*flLateReverbDelay*/ 0.012f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_SEWERPIPE \
|
||||
{ \
|
||||
/*flDensity*/ 0.307063f, \
|
||||
/*flDiffusion*/ 0.8f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.316228f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 2.81f, \
|
||||
/*flDecayHFRatio*/ 0.14f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 1.6387f, \
|
||||
/*flReflectionsDelay*/ 0.014f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 3.24713f, \
|
||||
/*flLateReverbDelay*/ 0.021f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_BATHROOM \
|
||||
{ \
|
||||
/*flDensity*/ 0.1715f, \
|
||||
/*flDiffusion*/ 1.f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.251189f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 1.49f, \
|
||||
/*flDecayHFRatio*/ 0.54f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.653131f, \
|
||||
/*flReflectionsDelay*/ 0.007f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 3.27341f, \
|
||||
/*flLateReverbDelay*/ 0.011f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_STONEROOM \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 1.f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.707946f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 2.31f, \
|
||||
/*flDecayHFRatio*/ 0.64f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.441062f, \
|
||||
/*flReflectionsDelay*/ 0.012f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 1.10027f, \
|
||||
/*flLateReverbDelay*/ 0.017f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_DUSTYROOM \
|
||||
{ \
|
||||
/*flDensity*/ 0.3645f, \
|
||||
/*flDiffusion*/ 0.56f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.794328f, \
|
||||
/*flGainLF*/ 0.707946f, \
|
||||
/*flDecayTime*/ 1.79f, \
|
||||
/*flDecayHFRatio*/ 0.38f, \
|
||||
/*flDecayLFRatio*/ 0.21f, \
|
||||
/*flReflectionsGain*/ 0.501187f, \
|
||||
/*flReflectionsDelay*/ 0.002f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 1.25893f, \
|
||||
/*flLateReverbDelay*/ 0.006f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.202f, \
|
||||
/*flEchoDepth*/ 0.05f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.988553f, \
|
||||
/*flHFReference*/ 13046.f, \
|
||||
/*flLFReference*/ 163.3f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_HALLWAY \
|
||||
{ \
|
||||
/*flDensity*/ 0.3645f, \
|
||||
/*flDiffusion*/ 1.f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.707946f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 1.49f, \
|
||||
/*flDecayHFRatio*/ 0.59f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.245754f, \
|
||||
/*flReflectionsDelay*/ 0.007f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 1.6615f, \
|
||||
/*flLateReverbDelay*/ 0.011f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_CHAPEL \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.84f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.562341f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 4.62f, \
|
||||
/*flDecayHFRatio*/ 0.64f, \
|
||||
/*flDecayLFRatio*/ 1.23f, \
|
||||
/*flReflectionsGain*/ 0.446684f, \
|
||||
/*flReflectionsDelay*/ 0.032f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.794328f, \
|
||||
/*flLateReverbDelay*/ 0.049f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.11f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_AUDITORIUM \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 1.f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.578096f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 4.32f, \
|
||||
/*flDecayHFRatio*/ 0.59f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.403181f, \
|
||||
/*flReflectionsDelay*/ 0.02f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.716968f, \
|
||||
/*flLateReverbDelay*/ 0.03f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_SPORT_GYMNASIUM \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.81f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.446684f, \
|
||||
/*flGainLF*/ 0.891251f, \
|
||||
/*flDecayTime*/ 3.14f, \
|
||||
/*flDecayHFRatio*/ 1.06f, \
|
||||
/*flDecayLFRatio*/ 1.35f, \
|
||||
/*flReflectionsGain*/ 0.398107f, \
|
||||
/*flReflectionsDelay*/ 0.029f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.562341f, \
|
||||
/*flLateReverbDelay*/ 0.045f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.146f, \
|
||||
/*flEchoDepth*/ 0.14f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 7176.9f, \
|
||||
/*flLFReference*/ 211.2f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_SPORT_EMPTYSTADIUM \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 1.f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.446684f, \
|
||||
/*flGainLF*/ 0.794328f, \
|
||||
/*flDecayTime*/ 6.26f, \
|
||||
/*flDecayHFRatio*/ 0.51f, \
|
||||
/*flDecayLFRatio*/ 1.1f, \
|
||||
/*flReflectionsGain*/ 0.0630957f, \
|
||||
/*flReflectionsDelay*/ 0.183f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.398107f, \
|
||||
/*flLateReverbDelay*/ 0.038f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_ARENA \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 1.f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.447713f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 7.24f, \
|
||||
/*flDecayHFRatio*/ 0.33f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.261216f, \
|
||||
/*flReflectionsDelay*/ 0.02f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 1.01859f, \
|
||||
/*flLateReverbDelay*/ 0.03f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_HANGAR \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 1.f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.316228f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 10.05f, \
|
||||
/*flDecayHFRatio*/ 0.23f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.500035f, \
|
||||
/*flReflectionsDelay*/ 0.02f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 1.25603f, \
|
||||
/*flLateReverbDelay*/ 0.03f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_DRIVING_TUNNEL \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.81f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.398107f, \
|
||||
/*flGainLF*/ 0.891251f, \
|
||||
/*flDecayTime*/ 3.42f, \
|
||||
/*flDecayHFRatio*/ 0.94f, \
|
||||
/*flDecayLFRatio*/ 1.31f, \
|
||||
/*flReflectionsGain*/ 0.707946f, \
|
||||
/*flReflectionsDelay*/ 0.051f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.707946f, \
|
||||
/*flLateReverbDelay*/ 0.047f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.214f, \
|
||||
/*flEchoDepth*/ 0.05f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 155.3f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_MOUNTAINS \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.27f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.0562341f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 1.49f, \
|
||||
/*flDecayHFRatio*/ 0.21f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.040738f, \
|
||||
/*flReflectionsDelay*/ 0.3f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.191867f, \
|
||||
/*flLateReverbDelay*/ 0.1f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 1.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_FOREST \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.3f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.0223872f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 1.49f, \
|
||||
/*flDecayHFRatio*/ 0.54f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.0524807f, \
|
||||
/*flReflectionsDelay*/ 0.162f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 0.768245f, \
|
||||
/*flLateReverbDelay*/ 0.088f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.125f, \
|
||||
/*flEchoDepth*/ 1.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_UNDERWATER \
|
||||
{ \
|
||||
/*flDensity*/ 0.3645f, \
|
||||
/*flDiffusion*/ 1.f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.01f, \
|
||||
/*flGainLF*/ 1.f, \
|
||||
/*flDecayTime*/ 1.49f, \
|
||||
/*flDecayHFRatio*/ 0.1f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.596348f, \
|
||||
/*flReflectionsDelay*/ 0.007f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 7.07946f, \
|
||||
/*flLateReverbDelay*/ 0.011f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 1.18f, \
|
||||
/*flModulationDepth*/ 0.348f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_MOOD_HEAVEN \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.94f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.794328f, \
|
||||
/*flGainLF*/ 0.446684f, \
|
||||
/*flDecayTime*/ 5.04f, \
|
||||
/*flDecayHFRatio*/ 1.12f, \
|
||||
/*flDecayLFRatio*/ 0.56f, \
|
||||
/*flReflectionsGain*/ 0.242661f, \
|
||||
/*flReflectionsDelay*/ 0.02f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 1.25893f, \
|
||||
/*flLateReverbDelay*/ 0.029f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.08f, \
|
||||
/*flModulationTime*/ 2.742f, \
|
||||
/*flModulationDepth*/ 0.05f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.9977f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_MOOD_HELL \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.57f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.354813f, \
|
||||
/*flGainLF*/ 0.446684f, \
|
||||
/*flDecayTime*/ 3.57f, \
|
||||
/*flDecayHFRatio*/ 0.49f, \
|
||||
/*flDecayLFRatio*/ 2.f, \
|
||||
/*flReflectionsGain*/ 0.f, \
|
||||
/*flReflectionsDelay*/ 0.02f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 1.41254f, \
|
||||
/*flLateReverbDelay*/ 0.03f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.11f, \
|
||||
/*flEchoDepth*/ 0.04f, \
|
||||
/*flModulationTime*/ 2.109f, \
|
||||
/*flModulationDepth*/ 0.52f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.99426f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 139.5f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_MOOD_MEMORY \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 0.85f, \
|
||||
/*flGain*/ 0.316228f, \
|
||||
/*flGainHF*/ 0.630957f, \
|
||||
/*flGainLF*/ 0.354813f, \
|
||||
/*flDecayTime*/ 4.06f, \
|
||||
/*flDecayHFRatio*/ 0.82f, \
|
||||
/*flDecayLFRatio*/ 0.56f, \
|
||||
/*flReflectionsGain*/ 0.0398107f, \
|
||||
/*flReflectionsDelay*/ 0.f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 1.12202f, \
|
||||
/*flLateReverbDelay*/ 0.f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.474f, \
|
||||
/*flModulationDepth*/ 0.45f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.988553f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 0 \
|
||||
}
|
||||
|
||||
#define REVERB_PRESET_MIN \
|
||||
{ \
|
||||
/*flDensity*/ 1.f, \
|
||||
/*flDiffusion*/ 1.f, \
|
||||
/*flGain*/ 0.32f, \
|
||||
/*flGainHF*/ 0.89f, \
|
||||
/*flGainLF*/ 0.f, \
|
||||
/*flDecayTime*/ 0.1f, \
|
||||
/*flDecayHFRatio*/ 0.83f, \
|
||||
/*flDecayLFRatio*/ 1.f, \
|
||||
/*flReflectionsGain*/ 0.05f, \
|
||||
/*flReflectionsDelay*/ 0.007f, \
|
||||
/*flReflectionsPan[0]*/ 0.f, \
|
||||
/*flReflectionsPan[1]*/ 0.f, \
|
||||
/*flReflectionsPan[2]*/ 0.f, \
|
||||
/*flLateReverbGain*/ 1.26f, \
|
||||
/*flLateReverbDelay*/ 0.011f, \
|
||||
/*flLateReverbPan[0]*/ 0.f, \
|
||||
/*flLateReverbPan[1]*/ 0.f, \
|
||||
/*flLateReverbPan[2]*/ 0.f, \
|
||||
/*flEchoTime*/ 0.25f, \
|
||||
/*flEchoDepth*/ 0.f, \
|
||||
/*flModulationTime*/ 0.25f, \
|
||||
/*flModulationDepth*/ 0.f, \
|
||||
/*flAirAbsorptionGainHF*/ 0.994f, \
|
||||
/*flHFReference*/ 5000.f, \
|
||||
/*flLFReference*/ 250.f, \
|
||||
/*flRoomRolloffFactor*/ 0.f, \
|
||||
/*iDecayHFLimit*/ 1, \
|
||||
}
|
|
@ -24,6 +24,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|||
#include "snd_local.h"
|
||||
#include "snd_codec.h"
|
||||
#include "client.h"
|
||||
#include "../qcommon/qcommon.h"
|
||||
|
||||
extern int Sys_MilliSeconds(void);
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
|
||||
|
@ -42,6 +45,8 @@ cvar_t *s_alGraceDistance;
|
|||
cvar_t *s_alDriver;
|
||||
cvar_t *s_alDevice;
|
||||
cvar_t *s_alAvailableDevices;
|
||||
cvar_t *s_alEffectsLevel;
|
||||
|
||||
|
||||
/*
|
||||
=================
|
||||
|
@ -119,6 +124,111 @@ static void S_AL_ClearError( qboolean quiet )
|
|||
|
||||
//===========================================================================
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float flDensity;
|
||||
float flDiffusion;
|
||||
float flGain;
|
||||
float flGainHF;
|
||||
float flGainLF;
|
||||
float flDecayTime;
|
||||
float flDecayHFRatio;
|
||||
float flDecayLFRatio;
|
||||
float flReflectionsGain;
|
||||
float flReflectionsDelay;
|
||||
float flReflectionsPan[3];
|
||||
float flLateReverbGain;
|
||||
float flLateReverbDelay;
|
||||
float flLateReverbPan[3];
|
||||
float flEchoTime;
|
||||
float flEchoDepth;
|
||||
float flModulationTime;
|
||||
float flModulationDepth;
|
||||
float flAirAbsorptionGainHF;
|
||||
float flHFReference;
|
||||
float flLFReference;
|
||||
float flRoomRolloffFactor;
|
||||
int iDecayHFLimit;
|
||||
} reverb_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float gain;
|
||||
float gainHF;
|
||||
} lowPass_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
reverb_t current;
|
||||
reverb_t from;
|
||||
reverb_t to;
|
||||
int changeTime;
|
||||
|
||||
ALuint alEffect;
|
||||
ALuint alEffectSlot;
|
||||
} env_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
lowPass_t current;
|
||||
lowPass_t from;
|
||||
lowPass_t to;
|
||||
int changeTime;
|
||||
ALuint alFilter;
|
||||
} water_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
qboolean initialized;
|
||||
|
||||
env_t env;
|
||||
water_t water;
|
||||
|
||||
int lastContents;
|
||||
} effects_t;
|
||||
|
||||
static effects_t s_alEffects;
|
||||
|
||||
#include "snd_alreverbs.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char* name;
|
||||
reverb_t data;
|
||||
} namedReverb_t;
|
||||
|
||||
static const reverb_t s_alReverbUnderwater = REVERB_PRESET_UNDERWATER;
|
||||
static const namedReverb_t s_alReverbPresets[] =
|
||||
{
|
||||
{ "default", REVERB_PRESET_MIN, },
|
||||
{ "city", REVERB_PRESET_CITY, },
|
||||
{ "subway", REVERB_PRESET_CITY_SUBWAY, },
|
||||
{ "underpass", REVERB_PRESET_CITY_UNDERPASS, },
|
||||
{ "abandoned", REVERB_PRESET_CITY_ABANDONED, },
|
||||
{ "alley", REVERB_PRESET_ALLEY, },
|
||||
{ "parkinglot", REVERB_PRESET_PARKINGLOT, },
|
||||
{ "sewerpipe", REVERB_PRESET_SEWERPIPE, },
|
||||
{ "bathroom", REVERB_PRESET_BATHROOM, },
|
||||
{ "stoneroom", REVERB_PRESET_STONEROOM, },
|
||||
{ "dustyroom", REVERB_PRESET_DUSTYROOM, },
|
||||
{ "hallway", REVERB_PRESET_HALLWAY, },
|
||||
{ "chapel", REVERB_PRESET_CHAPEL, },
|
||||
{ "auditorium", REVERB_PRESET_AUDITORIUM, },
|
||||
{ "gymnasium", REVERB_PRESET_SPORT_GYMNASIUM, },
|
||||
{ "stadium", REVERB_PRESET_SPORT_EMPTYSTADIUM, },
|
||||
{ "arena", REVERB_PRESET_ARENA, },
|
||||
{ "hangar", REVERB_PRESET_HANGAR, },
|
||||
{ "tunnel", REVERB_PRESET_DRIVING_TUNNEL, },
|
||||
{ "mountains", REVERB_PRESET_MOUNTAINS, },
|
||||
{ "forest", REVERB_PRESET_FOREST, },
|
||||
{ "underwater", REVERB_PRESET_UNDERWATER, },
|
||||
{ "mood_heaven", REVERB_PRESET_MOOD_HEAVEN, },
|
||||
{ "mood_hell", REVERB_PRESET_MOOD_HELL, },
|
||||
{ "mood_memory", REVERB_PRESET_MOOD_MEMORY, },
|
||||
};
|
||||
|
||||
|
||||
//===========================================================================
|
||||
|
||||
typedef struct alSfx_s
|
||||
{
|
||||
|
@ -597,6 +707,8 @@ static void S_AL_ScaleGain(src_t *chksrc, vec3_t origin)
|
|||
|
||||
if(!chksrc->local)
|
||||
distance = Distance(origin, lastListenerOrigin);
|
||||
else
|
||||
distance = 0.f;
|
||||
|
||||
// If we exceed a certain distance, scale the gain linearly until the sound
|
||||
// vanishes into nothingness.
|
||||
|
@ -778,6 +890,22 @@ static void S_AL_SrcSetup(srcHandle_t src, sfxHandle_t sfx, alSrcPriority_t prio
|
|||
qalSourcei(curSource->alSource, AL_SOURCE_RELATIVE, AL_FALSE);
|
||||
qalSourcef(curSource->alSource, AL_ROLLOFF_FACTOR, s_alRolloff->value);
|
||||
}
|
||||
|
||||
if (s_alEffects.initialized)
|
||||
{
|
||||
if (entity == -1)
|
||||
{
|
||||
qalSourcei(curSource->alSource, AL_DIRECT_FILTER, AL_FILTER_NULL);
|
||||
qalSource3i(curSource->alSource, AL_AUXILIARY_SEND_FILTER, AL_EFFECTSLOT_NULL, 0, AL_FILTER_NULL);
|
||||
//Com_Printf("%s: no effect (%d)\n", knownSfx[sfx].filename, entity);
|
||||
}
|
||||
else
|
||||
{
|
||||
qalSource3i(curSource->alSource, AL_AUXILIARY_SEND_FILTER, s_alEffects.env.alEffectSlot, 0, AL_FILTER_NULL);
|
||||
qalSourcei(curSource->alSource, AL_DIRECT_FILTER, s_alEffects.water.alFilter);
|
||||
//Com_Printf("%s: with effect (%d)\n", knownSfx[sfx].filename, entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1139,6 +1267,35 @@ static qboolean S_AL_CheckInput(int entityNum, sfxHandle_t sfx)
|
|||
return qfalse;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_AL_StartLocalSoundEx
|
||||
|
||||
Play a local sound effect
|
||||
=================
|
||||
*/
|
||||
static
|
||||
void S_AL_StartLocalSoundEx(sfxHandle_t sfx, int channel, int entity)
|
||||
{
|
||||
srcHandle_t src;
|
||||
|
||||
if(S_AL_CheckInput(0, sfx))
|
||||
return;
|
||||
|
||||
// Try to grab a source
|
||||
src = S_AL_SrcAlloc(SRCPRI_LOCAL, entity, channel);
|
||||
|
||||
if(src == -1)
|
||||
return;
|
||||
|
||||
// Set up the effect
|
||||
S_AL_SrcSetup(src, sfx, SRCPRI_LOCAL, entity, channel, qtrue);
|
||||
|
||||
// Start it playing
|
||||
srcList[src].isPlaying = qtrue;
|
||||
qalSourcePlay(srcList[src].alSource);
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_AL_StartLocalSound
|
||||
|
@ -1149,23 +1306,7 @@ Play a local (non-spatialized) sound effect
|
|||
static
|
||||
void S_AL_StartLocalSound(sfxHandle_t sfx, int channel)
|
||||
{
|
||||
srcHandle_t src;
|
||||
|
||||
if(S_AL_CheckInput(0, sfx))
|
||||
return;
|
||||
|
||||
// Try to grab a source
|
||||
src = S_AL_SrcAlloc(SRCPRI_LOCAL, -1, channel);
|
||||
|
||||
if(src == -1)
|
||||
return;
|
||||
|
||||
// Set up the effect
|
||||
S_AL_SrcSetup(src, sfx, SRCPRI_LOCAL, -1, channel, qtrue);
|
||||
|
||||
// Start it playing
|
||||
srcList[src].isPlaying = qtrue;
|
||||
qalSourcePlay(srcList[src].alSource);
|
||||
S_AL_StartLocalSoundEx(sfx, channel, -1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1195,7 +1336,7 @@ static void S_AL_StartSound( vec3_t origin, int entnum, int entchannel, sfxHandl
|
|||
|
||||
if(S_AL_HearingThroughEntity(entnum))
|
||||
{
|
||||
S_AL_StartLocalSound(sfx, entchannel);
|
||||
S_AL_StartLocalSoundEx(sfx, entchannel, entnum);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2090,6 +2231,59 @@ void S_AL_StopAllSounds( void )
|
|||
S_AL_StreamDie(i);
|
||||
}
|
||||
|
||||
static void S_AL_ChangeUnderWater(void)
|
||||
{
|
||||
s_alEffects.water.from = s_alEffects.water.current;
|
||||
if (s_alEffects.lastContents & CONTENTS_LIQUID_MASK)
|
||||
{
|
||||
s_alEffects.water.to.gain = 0.25f;
|
||||
s_alEffects.water.to.gainHF = 0.0625f;
|
||||
}
|
||||
else
|
||||
{
|
||||
s_alEffects.water.to.gain = 1.f;
|
||||
s_alEffects.water.to.gainHF = 1.f;
|
||||
}
|
||||
|
||||
s_alEffects.water.changeTime = Sys_MilliSeconds();
|
||||
}
|
||||
|
||||
static void S_AL_ChangeEnvironment(const reverb_t* env)
|
||||
{
|
||||
s_alEffects.env.from = s_alEffects.env.current;
|
||||
s_alEffects.env.to = *env;
|
||||
s_alEffects.env.changeTime = Sys_MilliSeconds();
|
||||
}
|
||||
|
||||
static const reverb_t* S_AL_GetReverbForContents(int contents)
|
||||
{
|
||||
if (contents & CONTENTS_LIQUID_MASK)
|
||||
{
|
||||
return &s_alReverbUnderwater;
|
||||
}
|
||||
else
|
||||
{
|
||||
int index = 0;
|
||||
|
||||
# define CHECK_BIT(bit) index |= (0 != (contents & CONTENTS_ENVBIT_##bit)) << bit
|
||||
|
||||
CHECK_BIT(0);
|
||||
CHECK_BIT(1);
|
||||
CHECK_BIT(2);
|
||||
CHECK_BIT(3);
|
||||
CHECK_BIT(4);
|
||||
CHECK_BIT(5);
|
||||
CHECK_BIT(6);
|
||||
|
||||
# undef CHECK_BIT
|
||||
|
||||
if (index >= ARRAY_LEN(s_alReverbPresets))
|
||||
index = 0;
|
||||
|
||||
return &s_alReverbPresets[index].data;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_AL_Respatialize
|
||||
|
@ -2101,6 +2295,8 @@ void S_AL_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], int
|
|||
float velocity[3] = {0.0f, 0.0f, 0.0f};
|
||||
float orientation[6];
|
||||
vec3_t sorigin;
|
||||
int contents;
|
||||
int changedContents;
|
||||
|
||||
VectorCopy( origin, sorigin );
|
||||
S_AL_SanitiseVector( sorigin );
|
||||
|
@ -2114,12 +2310,176 @@ void S_AL_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], int
|
|||
|
||||
VectorCopy( sorigin, lastListenerOrigin );
|
||||
|
||||
contents = CM_PointContents(sorigin, 0);
|
||||
changedContents = contents ^ s_alEffects.lastContents;
|
||||
s_alEffects.lastContents = contents;
|
||||
|
||||
if (changedContents & CONTENTS_LIQUID_MASK)
|
||||
{
|
||||
S_AL_ChangeUnderWater();
|
||||
}
|
||||
|
||||
if (changedContents & (CONTENTS_LIQUID_MASK | CONTENTS_ENVIRONMENT_MASK))
|
||||
{
|
||||
S_AL_ChangeEnvironment(S_AL_GetReverbForContents(contents));
|
||||
}
|
||||
|
||||
// Set OpenAL listener paramaters
|
||||
qalListenerfv(AL_POSITION, (ALfloat *)sorigin);
|
||||
qalListenerfv(AL_VELOCITY, velocity);
|
||||
qalListenerfv(AL_ORIENTATION, orientation);
|
||||
}
|
||||
|
||||
static void S_AL_LerpReverb(const reverb_t* from, const reverb_t* to, float fraction, reverb_t* out)
|
||||
{
|
||||
# define LERP_FIELD(field) out->field = from->field + (to->field - from->field) * fraction
|
||||
# define LOG_LERP_FIELD(field) out->field = from->field * powf(to->field / from->field, fraction)
|
||||
|
||||
*out = *to;
|
||||
|
||||
LERP_FIELD (flDensity);
|
||||
LERP_FIELD (flDiffusion);
|
||||
LOG_LERP_FIELD (flGain);
|
||||
LOG_LERP_FIELD (flGainHF);
|
||||
LOG_LERP_FIELD (flGainLF);
|
||||
LERP_FIELD (flDecayTime);
|
||||
LERP_FIELD (flDecayHFRatio);
|
||||
LERP_FIELD (flDecayLFRatio);
|
||||
LOG_LERP_FIELD (flReflectionsGain);
|
||||
LERP_FIELD (flReflectionsDelay);
|
||||
LERP_FIELD (flReflectionsPan[0]);
|
||||
LERP_FIELD (flReflectionsPan[1]);
|
||||
LERP_FIELD (flReflectionsPan[2]);
|
||||
LOG_LERP_FIELD (flLateReverbGain);
|
||||
LERP_FIELD (flLateReverbDelay);
|
||||
LERP_FIELD (flLateReverbPan[0]);
|
||||
LERP_FIELD (flLateReverbPan[1]);
|
||||
LERP_FIELD (flLateReverbPan[2]);
|
||||
LERP_FIELD (flEchoTime);
|
||||
LERP_FIELD (flEchoDepth);
|
||||
LERP_FIELD (flModulationTime);
|
||||
LERP_FIELD (flModulationDepth);
|
||||
LOG_LERP_FIELD (flAirAbsorptionGainHF);
|
||||
LERP_FIELD (flHFReference);
|
||||
LERP_FIELD (flLFReference);
|
||||
LERP_FIELD (flRoomRolloffFactor);
|
||||
|
||||
out->iDecayHFLimit = fraction < 0.5f ? from->iDecayHFLimit : to->iDecayHFLimit;
|
||||
|
||||
# undef LERP_FIELD
|
||||
}
|
||||
|
||||
//#define CHECK_ERROR() if (qalGetError() != AL_NO_ERROR) Com_Printf(S_COLOR_YELLOW "Error on line %d\n", __LINE__)
|
||||
|
||||
static qboolean S_AL_SetReverbParameters(const reverb_t *pEFXEAXReverb, ALuint uiEffect)
|
||||
{
|
||||
qboolean bReturn = qfalse;
|
||||
|
||||
if (pEFXEAXReverb)
|
||||
{
|
||||
// Clear AL Error code
|
||||
qalGetError();
|
||||
|
||||
# define SET_FLOAT_PARM(parm, field) \
|
||||
qalEffectf(uiEffect, parm, field); if (qalGetError() != AL_NO_ERROR) Com_Printf(S_COLOR_YELLOW "Error setting " #parm " to %g \n", field)
|
||||
|
||||
SET_FLOAT_PARM(AL_REVERB_DENSITY, pEFXEAXReverb->flDensity);
|
||||
SET_FLOAT_PARM(AL_REVERB_DIFFUSION, pEFXEAXReverb->flDiffusion);
|
||||
SET_FLOAT_PARM(AL_REVERB_GAIN, pEFXEAXReverb->flGain);
|
||||
SET_FLOAT_PARM(AL_REVERB_GAINHF, pEFXEAXReverb->flGainHF);
|
||||
////SET_FLOAT_PARM(AL_REVERB_GAINLF, pEFXEAXReverb->flGainLF);
|
||||
SET_FLOAT_PARM(AL_REVERB_DECAY_TIME, pEFXEAXReverb->flDecayTime);
|
||||
SET_FLOAT_PARM(AL_REVERB_DECAY_HFRATIO, pEFXEAXReverb->flDecayHFRatio);
|
||||
////SET_FLOAT_PARM(AL_REVERB_DECAY_LFRATIO, pEFXEAXReverb->flDecayLFRatio);
|
||||
SET_FLOAT_PARM(AL_REVERB_REFLECTIONS_GAIN, pEFXEAXReverb->flReflectionsGain);
|
||||
SET_FLOAT_PARM(AL_REVERB_REFLECTIONS_DELAY, pEFXEAXReverb->flReflectionsDelay);
|
||||
////qalEffectfv(uiEffect, AL_REVERB_REFLECTIONS_PAN, pEFXEAXReverb->flReflectionsPan);
|
||||
SET_FLOAT_PARM(AL_REVERB_LATE_REVERB_GAIN, pEFXEAXReverb->flLateReverbGain);
|
||||
SET_FLOAT_PARM(AL_REVERB_LATE_REVERB_DELAY, pEFXEAXReverb->flLateReverbDelay);
|
||||
////qalEffectfv(uiEffect, AL_REVERB_LATE_REVERB_PAN, pEFXEAXReverb->flLateReverbPan);
|
||||
////SET_FLOAT_PARM(AL_REVERB_ECHO_TIME, pEFXEAXReverb->flEchoTime);
|
||||
////SET_FLOAT_PARM(AL_REVERB_ECHO_DEPTH, pEFXEAXReverb->flEchoDepth);
|
||||
////SET_FLOAT_PARM(AL_REVERB_MODULATION_TIME, pEFXEAXReverb->flModulationTime);
|
||||
////SET_FLOAT_PARM(AL_REVERB_MODULATION_DEPTH, pEFXEAXReverb->flModulationDepth);
|
||||
SET_FLOAT_PARM(AL_REVERB_AIR_ABSORPTION_GAINHF, pEFXEAXReverb->flAirAbsorptionGainHF);
|
||||
////SET_FLOAT_PARM(AL_REVERB_HFREFERENCE, pEFXEAXReverb->flHFReference);
|
||||
////SET_FLOAT_PARM(AL_REVERB_LFREFERENCE, pEFXEAXReverb->flLFReference);
|
||||
SET_FLOAT_PARM(AL_REVERB_ROOM_ROLLOFF_FACTOR, pEFXEAXReverb->flRoomRolloffFactor);
|
||||
qalEffecti(uiEffect, AL_REVERB_DECAY_HFLIMIT, pEFXEAXReverb->iDecayHFLimit);
|
||||
|
||||
if (qalGetError() == AL_NO_ERROR)
|
||||
bReturn = qtrue;
|
||||
}
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
|
||||
|
||||
static void S_AL_UpdateEnvironment(void)
|
||||
{
|
||||
if (!s_alEffects.initialized)
|
||||
return;
|
||||
|
||||
if (s_alEffects.env.changeTime >= 0)
|
||||
{
|
||||
qboolean interpolate = qtrue;
|
||||
const int ENV_CHANGE_TIME = 1000; // ms
|
||||
int now = Sys_MilliSeconds();
|
||||
if (!interpolate || now > s_alEffects.env.changeTime + ENV_CHANGE_TIME)
|
||||
{
|
||||
s_alEffects.env.current = s_alEffects.env.to;
|
||||
s_alEffects.env.changeTime = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
float frac = Com_Clamp(0.f, 1.f, (now - s_alEffects.env.changeTime) / ((float) ENV_CHANGE_TIME));
|
||||
S_AL_LerpReverb(&s_alEffects.env.from, &s_alEffects.env.to, frac, &s_alEffects.env.current);
|
||||
}
|
||||
|
||||
S_AL_SetReverbParameters(&s_alEffects.env.current, s_alEffects.env.alEffect);
|
||||
qalAuxiliaryEffectSloti(s_alEffects.env.alEffectSlot, AL_EFFECTSLOT_EFFECT, s_alEffects.env.alEffect);
|
||||
}
|
||||
}
|
||||
|
||||
static void S_AL_UpdateUnderwater(void)
|
||||
{
|
||||
if (!s_alEffects.initialized)
|
||||
return;
|
||||
|
||||
if (s_alEffects.water.changeTime >= 0)
|
||||
{
|
||||
int i;
|
||||
qboolean interpolate = qtrue;
|
||||
|
||||
const int WATER_CHANGE_TIME = 500; // ms
|
||||
int now = Sys_MilliSeconds();
|
||||
const lowPass_t *from = &s_alEffects.water.from;
|
||||
const lowPass_t *to = &s_alEffects.water.to;
|
||||
|
||||
if (!interpolate || now > s_alEffects.water.changeTime + WATER_CHANGE_TIME)
|
||||
{
|
||||
s_alEffects.water.changeTime = -1;
|
||||
s_alEffects.water.current = *to;
|
||||
}
|
||||
else
|
||||
{
|
||||
float frac = Com_Clamp(0.f, 1.f, (now - s_alEffects.water.changeTime) / ((float) WATER_CHANGE_TIME));
|
||||
s_alEffects.water.current.gain = from->gain + (to->gain - from->gain) * frac;
|
||||
s_alEffects.water.current.gainHF = from->gainHF + (to->gainHF - from->gainHF) * frac;
|
||||
}
|
||||
|
||||
qalFilterf(s_alEffects.water.alFilter, AL_LOWPASS_GAIN, s_alEffects.water.current.gain);
|
||||
qalFilterf(s_alEffects.water.alFilter, AL_LOWPASS_GAINHF, s_alEffects.water.current.gainHF);
|
||||
|
||||
for (i=0; i<srcCount; ++i)
|
||||
{
|
||||
src_t* src = &srcList[i];
|
||||
if (src->isActive && !src->local)
|
||||
qalSourcei(src->alSource, AL_DIRECT_FILTER, s_alEffects.water.alFilter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_AL_Update
|
||||
|
@ -2142,6 +2502,9 @@ void S_AL_Update( void )
|
|||
s_muted->modified = qfalse;
|
||||
}
|
||||
|
||||
S_AL_UpdateEnvironment();
|
||||
S_AL_UpdateUnderwater();
|
||||
|
||||
// Update SFX channels
|
||||
S_AL_SrcUpdate();
|
||||
|
||||
|
@ -2283,6 +2646,30 @@ void S_AL_SoundInfo( void )
|
|||
}
|
||||
}
|
||||
|
||||
static void S_AL_ShutDownEffects(void)
|
||||
{
|
||||
if (!s_alEffects.initialized)
|
||||
return;
|
||||
|
||||
// Delete Effect
|
||||
if (s_alEffects.env.alEffect)
|
||||
qalDeleteEffects(1, &s_alEffects.env.alEffect);
|
||||
|
||||
// Delete Auxiliary Effect Slot
|
||||
if (s_alEffects.env.alEffectSlot)
|
||||
qalDeleteAuxiliaryEffectSlots(1, &s_alEffects.env.alEffectSlot);
|
||||
|
||||
// Delete filter
|
||||
if (s_alEffects.water.alFilter)
|
||||
qalDeleteFilters(1, &s_alEffects.water.alFilter);
|
||||
|
||||
Com_Memset(&s_alEffects, 0, sizeof(s_alEffects));
|
||||
|
||||
Cmd_RemoveCommand("s_alTestReverb");
|
||||
Cmd_RemoveCommand("s_alDumpSoundShader");
|
||||
Cmd_RemoveCommand("s_alDumpCustinfoparms");
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_AL_Shutdown
|
||||
|
@ -2293,15 +2680,20 @@ void S_AL_Shutdown( void )
|
|||
{
|
||||
// Shut down everything
|
||||
int i;
|
||||
|
||||
S_AL_ShutDownEffects();
|
||||
|
||||
for (i = 0; i < MAX_RAW_STREAMS; i++)
|
||||
S_AL_StreamDie(i);
|
||||
S_AL_StopBackgroundTrack( );
|
||||
S_AL_SrcShutdown( );
|
||||
S_AL_BufferShutdown( );
|
||||
|
||||
|
||||
qalcDestroyContext(alContext);
|
||||
qalcCloseDevice(alDevice);
|
||||
|
||||
|
||||
#ifdef USE_VOIP
|
||||
if (alCaptureDevice != NULL) {
|
||||
qalcCaptureStop(alCaptureDevice);
|
||||
|
@ -2322,6 +2714,355 @@ void S_AL_Shutdown( void )
|
|||
|
||||
#endif
|
||||
|
||||
/*
|
||||
=================
|
||||
S_AL_InitEFX
|
||||
=================
|
||||
*/
|
||||
static qboolean S_AL_InitEFX( ALCdevice* alDevice )
|
||||
{
|
||||
if (!qalcIsExtensionPresent(alDevice, "ALC_EXT_EFX"))
|
||||
{
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
// Get function pointers
|
||||
qalGenEffects = (LPALGENEFFECTS)qalGetProcAddress("alGenEffects");
|
||||
qalDeleteEffects = (LPALDELETEEFFECTS )qalGetProcAddress("alDeleteEffects");
|
||||
qalIsEffect = (LPALISEFFECT )qalGetProcAddress("alIsEffect");
|
||||
qalEffecti = (LPALEFFECTI)qalGetProcAddress("alEffecti");
|
||||
qalEffectiv = (LPALEFFECTIV)qalGetProcAddress("alEffectiv");
|
||||
qalEffectf = (LPALEFFECTF)qalGetProcAddress("alEffectf");
|
||||
qalEffectfv = (LPALEFFECTFV)qalGetProcAddress("alEffectfv");
|
||||
qalGetEffecti = (LPALGETEFFECTI)qalGetProcAddress("alGetEffecti");
|
||||
qalGetEffectiv = (LPALGETEFFECTIV)qalGetProcAddress("alGetEffectiv");
|
||||
qalGetEffectf = (LPALGETEFFECTF)qalGetProcAddress("alGetEffectf");
|
||||
qalGetEffectfv = (LPALGETEFFECTFV)qalGetProcAddress("alGetEffectfv");
|
||||
qalGenFilters = (LPALGENFILTERS)qalGetProcAddress("alGenFilters");
|
||||
qalDeleteFilters = (LPALDELETEFILTERS)qalGetProcAddress("alDeleteFilters");
|
||||
qalIsFilter = (LPALISFILTER)qalGetProcAddress("alIsFilter");
|
||||
qalFilteri = (LPALFILTERI)qalGetProcAddress("alFilteri");
|
||||
qalFilteriv = (LPALFILTERIV)qalGetProcAddress("alFilteriv");
|
||||
qalFilterf = (LPALFILTERF)qalGetProcAddress("alFilterf");
|
||||
qalFilterfv = (LPALFILTERFV)qalGetProcAddress("alFilterfv");
|
||||
qalGetFilteri = (LPALGETFILTERI )qalGetProcAddress("alGetFilteri");
|
||||
qalGetFilteriv= (LPALGETFILTERIV )qalGetProcAddress("alGetFilteriv");
|
||||
qalGetFilterf = (LPALGETFILTERF )qalGetProcAddress("alGetFilterf");
|
||||
qalGetFilterfv= (LPALGETFILTERFV )qalGetProcAddress("alGetFilterfv");
|
||||
qalGenAuxiliaryEffectSlots = (LPALGENAUXILIARYEFFECTSLOTS)qalGetProcAddress("alGenAuxiliaryEffectSlots");
|
||||
qalDeleteAuxiliaryEffectSlots = (LPALDELETEAUXILIARYEFFECTSLOTS)qalGetProcAddress("alDeleteAuxiliaryEffectSlots");
|
||||
qalIsAuxiliaryEffectSlot = (LPALISAUXILIARYEFFECTSLOT)qalGetProcAddress("alIsAuxiliaryEffectSlot");
|
||||
qalAuxiliaryEffectSloti = (LPALAUXILIARYEFFECTSLOTI)qalGetProcAddress("alAuxiliaryEffectSloti");
|
||||
qalAuxiliaryEffectSlotiv = (LPALAUXILIARYEFFECTSLOTIV)qalGetProcAddress("alAuxiliaryEffectSlotiv");
|
||||
qalAuxiliaryEffectSlotf = (LPALAUXILIARYEFFECTSLOTF)qalGetProcAddress("alAuxiliaryEffectSlotf");
|
||||
qalAuxiliaryEffectSlotfv = (LPALAUXILIARYEFFECTSLOTFV)qalGetProcAddress("alAuxiliaryEffectSlotfv");
|
||||
qalGetAuxiliaryEffectSloti = (LPALGETAUXILIARYEFFECTSLOTI)qalGetProcAddress("alGetAuxiliaryEffectSloti");
|
||||
qalGetAuxiliaryEffectSlotiv = (LPALGETAUXILIARYEFFECTSLOTIV)qalGetProcAddress("alGetAuxiliaryEffectSlotiv");
|
||||
qalGetAuxiliaryEffectSlotf = (LPALGETAUXILIARYEFFECTSLOTF)qalGetProcAddress("alGetAuxiliaryEffectSlotf");
|
||||
qalGetAuxiliaryEffectSlotfv = (LPALGETAUXILIARYEFFECTSLOTFV)qalGetProcAddress("alGetAuxiliaryEffectSlotfv");
|
||||
|
||||
if (qalGenEffects && qalDeleteEffects && qalIsEffect && qalEffecti && qalEffectiv && qalEffectf &&
|
||||
qalEffectfv && qalGetEffecti && qalGetEffectiv && qalGetEffectf && qalGetEffectfv && qalGenFilters &&
|
||||
qalDeleteFilters && qalIsFilter && qalFilteri && qalFilteriv && qalFilterf && qalFilterfv &&
|
||||
qalGetFilteri && qalGetFilteriv && qalGetFilterf && qalGetFilterfv && qalGenAuxiliaryEffectSlots &&
|
||||
qalDeleteAuxiliaryEffectSlots && qalIsAuxiliaryEffectSlot && qalAuxiliaryEffectSloti &&
|
||||
qalAuxiliaryEffectSlotiv && qalAuxiliaryEffectSlotf && qalAuxiliaryEffectSlotfv &&
|
||||
qalGetAuxiliaryEffectSloti && qalGetAuxiliaryEffectSlotiv && qalGetAuxiliaryEffectSlotf &&
|
||||
qalGetAuxiliaryEffectSlotfv)
|
||||
return qtrue;
|
||||
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_Cmd_AL_TestReverb
|
||||
=================
|
||||
*/
|
||||
static void S_Cmd_AL_TestReverb( void )
|
||||
{
|
||||
int i;
|
||||
const char* arg;
|
||||
|
||||
if (Cmd_Argc() < 2)
|
||||
{
|
||||
Com_Printf(
|
||||
"\n"
|
||||
"Syntax: %s <envname>\n"
|
||||
"\n"
|
||||
"where <envname> can be any of the following:\n",
|
||||
Cmd_Argv(0));
|
||||
|
||||
for (i=0; i<ARRAY_LEN(s_alReverbPresets); ++i)
|
||||
Com_Printf(" %s\n", s_alReverbPresets[i].name);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
arg = Cmd_Argv(1);
|
||||
|
||||
for (i=0; i<ARRAY_LEN(s_alReverbPresets); ++i)
|
||||
{
|
||||
if (Q_stricmp(s_alReverbPresets[i].name, arg) == 0)
|
||||
{
|
||||
S_AL_ChangeEnvironment(&s_alReverbPresets[i].data);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Com_Printf(S_COLOR_RED "Error: could not find reverb settings for '%s'\n", arg);
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_Cmd_AL_DumpSoundShader
|
||||
=================
|
||||
*/
|
||||
static void S_Cmd_AL_DumpSoundShader( void )
|
||||
{
|
||||
const char* filename;
|
||||
fileHandle_t file;
|
||||
int i;
|
||||
|
||||
if (Cmd_Argc() < 2)
|
||||
filename = "scripts/sound.shader";
|
||||
else
|
||||
filename = Cmd_Argv(1);
|
||||
|
||||
file = FS_FOpenFileWrite(filename);
|
||||
if (!file)
|
||||
{
|
||||
Com_Printf ("Couldn't write %s.\n", filename );
|
||||
return;
|
||||
}
|
||||
|
||||
Com_Printf("Writing %s\n", filename);
|
||||
|
||||
for (i=1; i<ARRAY_LEN(s_alReverbPresets); ++i)
|
||||
{
|
||||
FS_Printf(file,
|
||||
"textures/sound/%s\n"
|
||||
"{\n"
|
||||
"\tqer_trans 0.50\n"
|
||||
"\tqer_editorimage textures/common/trigger.tga\n"
|
||||
"\tqer_nocarve\n"
|
||||
"\tsurfaceparm nodraw\n"
|
||||
"\tsurfaceparm nonsolid\n"
|
||||
"\tsurfaceparm trans\n"
|
||||
"\tsurfaceparm rq3_env%d\n"
|
||||
"}\n"
|
||||
"\n",
|
||||
s_alReverbPresets[i].name,
|
||||
i
|
||||
);
|
||||
}
|
||||
|
||||
FS_FCloseFile(file);
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_Cmd_AL_DumpCustinfoparms
|
||||
=================
|
||||
*/
|
||||
static void S_Cmd_AL_DumpCustinfoparms( void )
|
||||
{
|
||||
const char* filename;
|
||||
fileHandle_t file;
|
||||
int i, end;
|
||||
|
||||
if (Cmd_Argc() < 2)
|
||||
filename = "scripts/custinfoparms.txt";
|
||||
else
|
||||
filename = Cmd_Argv(1);
|
||||
|
||||
file = FS_FOpenFileWrite(filename);
|
||||
if (!file)
|
||||
{
|
||||
Com_Printf ("Couldn't write %s.\n", filename );
|
||||
return;
|
||||
}
|
||||
|
||||
Com_Printf("Writing %s\n", filename);
|
||||
|
||||
FS_Printf(file,
|
||||
"// Reaction Quake 3 Available Surfaces (custinfoparms.txt)\n"
|
||||
"// Custom Surfaceparms file\n"
|
||||
"\n"
|
||||
"// Custom Contentsflags\n"
|
||||
"\n"
|
||||
"{\n"
|
||||
);
|
||||
|
||||
for (i=1; i<ARRAY_LEN(s_alReverbPresets); ++i)
|
||||
{
|
||||
int flags = 0;
|
||||
# define TEST_BIT(bit) if ((i >> bit) & 1) flags |= CONTENTS_ENVBIT_##bit
|
||||
|
||||
TEST_BIT(0);
|
||||
TEST_BIT(1);
|
||||
TEST_BIT(2);
|
||||
TEST_BIT(3);
|
||||
TEST_BIT(4);
|
||||
TEST_BIT(5);
|
||||
TEST_BIT(6);
|
||||
|
||||
FS_Printf(file, "rq3_env%d\t\t0x%08x\t\t// %s\n", i, flags, s_alReverbPresets[i].name);
|
||||
|
||||
# undef TEST_BIT
|
||||
}
|
||||
|
||||
FS_Printf(file,
|
||||
"}\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"// Custom Surfaceflags\n"
|
||||
"\n"
|
||||
"{\n"
|
||||
"rq3_gravel 0x80000 // custom grass surface\n"
|
||||
"rq3_wood 0x81000 // custom wood surface\n"
|
||||
"rq3_carpet 0x100000 // custom carpet surface\n"
|
||||
"rq3_metal2 0x101000 // alternate metal clank\n"
|
||||
"rq3_glass 0x180000 // custom glass mark/ricochet sound\n"
|
||||
"rq3_grass 0x181000 // custom grass crunch surface\n"
|
||||
"rq3_snow 0x200000 // custom snow crunch surface\n"
|
||||
"rq3_mud 0x201000 // custom mud squish surface\n"
|
||||
"rq3_wood2 0x280000 // alternate wood surface\n"
|
||||
"rq3_hardmetal 0x281000 // alternate metal surface\n"
|
||||
"rq3_leaves 0x300000 // custom leaves surface\n"
|
||||
"rq3_cement 0x301000 // custom cement surface\n"
|
||||
"rq3_marble 0x380000 // custom marble surface\n"
|
||||
"rq3_snow2 0x381000 // alternate snow surface\n"
|
||||
"rq3_hardsteps 0x400000 // custom alternate footstep sounds\n"
|
||||
"rq3_sand 0x401000 // custom sand surface\n"
|
||||
"}\n"
|
||||
);
|
||||
|
||||
FS_FCloseFile(file);
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_AL_CreateLowPassFilter
|
||||
=================
|
||||
*/
|
||||
static qboolean S_AL_CreateLowPassFilter(void)
|
||||
{
|
||||
qalGenFilters(1, &s_alEffects.water.alFilter);
|
||||
qalFilteri(s_alEffects.water.alFilter, AL_FILTER_TYPE, AL_FILTER_LOWPASS);
|
||||
qalFilterf(s_alEffects.water.alFilter, AL_LOWPASS_GAIN, s_alEffects.water.current.gain);
|
||||
qalFilterf(s_alEffects.water.alFilter, AL_LOWPASS_GAINHF, s_alEffects.water.current.gainHF);
|
||||
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_AL_CreateAuxEffectSlot
|
||||
=================
|
||||
*/
|
||||
static qboolean S_AL_CreateAuxEffectSlot(ALuint *puiAuxEffectSlot)
|
||||
{
|
||||
qboolean bReturn = qfalse;
|
||||
|
||||
// Clear AL Error state
|
||||
qalGetError();
|
||||
|
||||
// Generate an Auxiliary Effect Slot
|
||||
qalGenAuxiliaryEffectSlots(1, puiAuxEffectSlot);
|
||||
if (qalGetError() == AL_NO_ERROR)
|
||||
bReturn = qtrue;
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_AL_CreateEffect
|
||||
=================
|
||||
*/
|
||||
static qboolean S_AL_CreateEffect(ALuint *puiEffect, ALenum eEffectType)
|
||||
{
|
||||
qboolean bReturn = qfalse;
|
||||
|
||||
if (puiEffect)
|
||||
{
|
||||
// Clear AL Error State
|
||||
qalGetError();
|
||||
|
||||
// Generate an Effect
|
||||
qalGenEffects(1, puiEffect);
|
||||
if (qalGetError() == AL_NO_ERROR)
|
||||
{
|
||||
// Set the Effect Type
|
||||
qalEffecti(*puiEffect, AL_EFFECT_TYPE, eEffectType);
|
||||
if (qalGetError() == AL_NO_ERROR)
|
||||
bReturn = qtrue;
|
||||
else
|
||||
qalDeleteEffects(1, puiEffect);
|
||||
}
|
||||
}
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_AL_InitEffects
|
||||
=================
|
||||
*/
|
||||
static qboolean S_AL_InitEffects(ALCdevice* alDevice)
|
||||
{
|
||||
Com_Memset(&s_alEffects, 0, sizeof(s_alEffects));
|
||||
|
||||
if (!s_alEffectsLevel->integer)
|
||||
return qfalse;
|
||||
|
||||
if (!S_AL_InitEFX(alDevice))
|
||||
return qfalse;
|
||||
|
||||
s_alEffects.water.changeTime = -1;
|
||||
s_alEffects.water.current.gain = 1.f;
|
||||
s_alEffects.water.current.gainHF = 1.f;
|
||||
s_alEffects.water.to = s_alEffects.water.current;
|
||||
s_alEffects.water.from = s_alEffects.water.current;
|
||||
|
||||
s_alEffects.env.changeTime = -1;
|
||||
s_alEffects.env.current = s_alReverbPresets[0].data;
|
||||
s_alEffects.env.to = s_alEffects.env.current;
|
||||
s_alEffects.env.from = s_alEffects.env.current;
|
||||
|
||||
if (!S_AL_CreateAuxEffectSlot(&s_alEffects.env.alEffectSlot))
|
||||
{
|
||||
Com_Printf(S_COLOR_RED "ERROR: Failed to create aux effect slot\n");
|
||||
}
|
||||
else if (!S_AL_CreateEffect(&s_alEffects.env.alEffect, AL_EFFECT_REVERB))
|
||||
{
|
||||
Com_Printf(S_COLOR_RED "ERROR: Failed to create effect\n");
|
||||
}
|
||||
else if (!S_AL_CreateLowPassFilter())
|
||||
{
|
||||
Com_Printf(S_COLOR_RED "ERROR: Failed to create low-pass filter\n");
|
||||
}
|
||||
else if (!S_AL_SetReverbParameters(&s_alEffects.env.current, s_alEffects.env.alEffect))
|
||||
{
|
||||
Com_Printf(S_COLOR_RED "ERROR: Failed to set reverb params\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
Com_Printf("Successfully initialized effects\n");
|
||||
s_alEffects.initialized = qtrue;
|
||||
|
||||
qalAuxiliaryEffectSloti(s_alEffects.env.alEffectSlot, AL_EFFECTSLOT_EFFECT, s_alEffects.env.alEffect);
|
||||
|
||||
Cmd_AddCommand("s_alTestReverb", S_Cmd_AL_TestReverb);
|
||||
Cmd_AddCommand("s_alDumpSoundShader", S_Cmd_AL_DumpSoundShader);
|
||||
Cmd_AddCommand("s_alDumpCustinfoparms", S_Cmd_AL_DumpCustinfoparms);
|
||||
}
|
||||
|
||||
return s_alEffects.initialized;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
S_AL_Init
|
||||
|
@ -2357,6 +3098,7 @@ qboolean S_AL_Init( soundInterface_t *si )
|
|||
s_alDriver = Cvar_Get( "s_alDriver", ALDRIVER_DEFAULT, CVAR_ARCHIVE | CVAR_LATCH );
|
||||
|
||||
s_alDevice = Cvar_Get("s_alDevice", "", CVAR_ARCHIVE | CVAR_LATCH);
|
||||
s_alEffectsLevel = Cvar_Get("s_alEffects", "1", CVAR_ARCHIVE | CVAR_LATCH );
|
||||
|
||||
// Load QAL
|
||||
if( !QAL_Init( s_alDriver->string ) )
|
||||
|
@ -2427,6 +3169,9 @@ qboolean S_AL_Init( soundInterface_t *si )
|
|||
}
|
||||
qalcMakeContextCurrent( alContext );
|
||||
|
||||
S_AL_InitEffects( alDevice );
|
||||
|
||||
|
||||
// Initialize sources, buffers, music
|
||||
S_AL_BufferInit( );
|
||||
S_AL_SrcInit( );
|
||||
|
@ -2436,6 +3181,7 @@ qboolean S_AL_Init( soundInterface_t *si )
|
|||
qalDopplerFactor( s_alDopplerFactor->value );
|
||||
qalDopplerVelocity( s_alDopplerSpeed->value );
|
||||
|
||||
|
||||
#ifdef USE_VOIP
|
||||
// !!! FIXME: some of these alcCaptureOpenDevice() values should be cvars.
|
||||
// !!! FIXME: add support for capture device enumeration.
|
||||
|
|
Loading…
Reference in a new issue