mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 10:40:46 +00:00
- so music is finally working but I don't know - adding a second sound backend because the existing one is such a piece of shit is certainly not the best solution.
I'll probably replace the SDL and DirectSound outputs with OpenAL later - let's hope that the mixer is at least flexible enough to handle that...
This commit is contained in:
parent
16a6cd909a
commit
cee5891409
15 changed files with 5841 additions and 142 deletions
|
@ -813,6 +813,8 @@ set (PCH_SOURCES
|
||||||
common/music/music_config.cpp
|
common/music/music_config.cpp
|
||||||
common/music/music_midi_base.cpp
|
common/music/music_midi_base.cpp
|
||||||
common/music/musicstream.cpp
|
common/music/musicstream.cpp
|
||||||
|
common/music/backend/oalsound.cpp
|
||||||
|
common/music/backend/i_sound.cpp
|
||||||
|
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -171,7 +171,7 @@ static void MV_CleanupVoice(VoiceNode *voice)
|
||||||
switch (voice->wavetype)
|
switch (voice->wavetype)
|
||||||
{
|
{
|
||||||
case FMT_VORBIS: MV_ReleaseVorbisVoice(voice); break;
|
case FMT_VORBIS: MV_ReleaseVorbisVoice(voice); break;
|
||||||
case FMT_ZMUSIC: MV_ReleaseZMusicVoice(voice); break;
|
//case FMT_ZMUSIC: MV_ReleaseZMusicVoice(voice); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
758
source/common/music/backend/efx.h
Normal file
758
source/common/music/backend/efx.h
Normal file
|
@ -0,0 +1,758 @@
|
||||||
|
#ifndef AL_EFX_H
|
||||||
|
#define AL_EFX_H
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ALC_EXT_EFX_NAME "ALC_EXT_EFX"
|
||||||
|
|
||||||
|
#define ALC_EFX_MAJOR_VERSION 0x20001
|
||||||
|
#define ALC_EFX_MINOR_VERSION 0x20002
|
||||||
|
#define ALC_MAX_AUXILIARY_SENDS 0x20003
|
||||||
|
|
||||||
|
|
||||||
|
/* Listener properties. */
|
||||||
|
#define AL_METERS_PER_UNIT 0x20004
|
||||||
|
|
||||||
|
/* Source properties. */
|
||||||
|
#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 properties. */
|
||||||
|
|
||||||
|
/* Reverb effect 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
|
||||||
|
|
||||||
|
/* EAX Reverb effect parameters */
|
||||||
|
#define AL_EAXREVERB_DENSITY 0x0001
|
||||||
|
#define AL_EAXREVERB_DIFFUSION 0x0002
|
||||||
|
#define AL_EAXREVERB_GAIN 0x0003
|
||||||
|
#define AL_EAXREVERB_GAINHF 0x0004
|
||||||
|
#define AL_EAXREVERB_GAINLF 0x0005
|
||||||
|
#define AL_EAXREVERB_DECAY_TIME 0x0006
|
||||||
|
#define AL_EAXREVERB_DECAY_HFRATIO 0x0007
|
||||||
|
#define AL_EAXREVERB_DECAY_LFRATIO 0x0008
|
||||||
|
#define AL_EAXREVERB_REFLECTIONS_GAIN 0x0009
|
||||||
|
#define AL_EAXREVERB_REFLECTIONS_DELAY 0x000A
|
||||||
|
#define AL_EAXREVERB_REFLECTIONS_PAN 0x000B
|
||||||
|
#define AL_EAXREVERB_LATE_REVERB_GAIN 0x000C
|
||||||
|
#define AL_EAXREVERB_LATE_REVERB_DELAY 0x000D
|
||||||
|
#define AL_EAXREVERB_LATE_REVERB_PAN 0x000E
|
||||||
|
#define AL_EAXREVERB_ECHO_TIME 0x000F
|
||||||
|
#define AL_EAXREVERB_ECHO_DEPTH 0x0010
|
||||||
|
#define AL_EAXREVERB_MODULATION_TIME 0x0011
|
||||||
|
#define AL_EAXREVERB_MODULATION_DEPTH 0x0012
|
||||||
|
#define AL_EAXREVERB_AIR_ABSORPTION_GAINHF 0x0013
|
||||||
|
#define AL_EAXREVERB_HFREFERENCE 0x0014
|
||||||
|
#define AL_EAXREVERB_LFREFERENCE 0x0015
|
||||||
|
#define AL_EAXREVERB_ROOM_ROLLOFF_FACTOR 0x0016
|
||||||
|
#define AL_EAXREVERB_DECAY_HFLIMIT 0x0017
|
||||||
|
|
||||||
|
/* Chorus effect 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 effect 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 effect 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 effect 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
|
||||||
|
|
||||||
|
/* Frequency shifter effect parameters */
|
||||||
|
#define AL_FREQUENCY_SHIFTER_FREQUENCY 0x0001
|
||||||
|
#define AL_FREQUENCY_SHIFTER_LEFT_DIRECTION 0x0002
|
||||||
|
#define AL_FREQUENCY_SHIFTER_RIGHT_DIRECTION 0x0003
|
||||||
|
|
||||||
|
/* Vocal morpher effect 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 effect parameters */
|
||||||
|
#define AL_PITCH_SHIFTER_COARSE_TUNE 0x0001
|
||||||
|
#define AL_PITCH_SHIFTER_FINE_TUNE 0x0002
|
||||||
|
|
||||||
|
/* Ringmodulator effect parameters */
|
||||||
|
#define AL_RING_MODULATOR_FREQUENCY 0x0001
|
||||||
|
#define AL_RING_MODULATOR_HIGHPASS_CUTOFF 0x0002
|
||||||
|
#define AL_RING_MODULATOR_WAVEFORM 0x0003
|
||||||
|
|
||||||
|
/* Autowah effect 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 effect parameters */
|
||||||
|
#define AL_COMPRESSOR_ONOFF 0x0001
|
||||||
|
|
||||||
|
/* Equalizer effect 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 types, used with the AL_EFFECT_TYPE property */
|
||||||
|
#define AL_EFFECT_NULL 0x0000
|
||||||
|
#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
|
||||||
|
#define AL_EFFECT_EAXREVERB 0x8000
|
||||||
|
|
||||||
|
/* Auxiliary Effect Slot properties. */
|
||||||
|
#define AL_EFFECTSLOT_EFFECT 0x0001
|
||||||
|
#define AL_EFFECTSLOT_GAIN 0x0002
|
||||||
|
#define AL_EFFECTSLOT_AUXILIARY_SEND_AUTO 0x0003
|
||||||
|
|
||||||
|
/* NULL Auxiliary Slot ID to disable a source send. */
|
||||||
|
#define AL_EFFECTSLOT_NULL 0x0000
|
||||||
|
|
||||||
|
|
||||||
|
/* Filter properties. */
|
||||||
|
|
||||||
|
/* Lowpass filter parameters */
|
||||||
|
#define AL_LOWPASS_GAIN 0x0001
|
||||||
|
#define AL_LOWPASS_GAINHF 0x0002
|
||||||
|
|
||||||
|
/* Highpass filter parameters */
|
||||||
|
#define AL_HIGHPASS_GAIN 0x0001
|
||||||
|
#define AL_HIGHPASS_GAINLF 0x0002
|
||||||
|
|
||||||
|
/* Bandpass filter 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 types, used with the AL_FILTER_TYPE property */
|
||||||
|
#define AL_FILTER_NULL 0x0000
|
||||||
|
#define AL_FILTER_LOWPASS 0x0001
|
||||||
|
#define AL_FILTER_HIGHPASS 0x0002
|
||||||
|
#define AL_FILTER_BANDPASS 0x0003
|
||||||
|
|
||||||
|
|
||||||
|
/* Effect object function types. */
|
||||||
|
typedef void (AL_APIENTRY *LPALGENEFFECTS)(ALsizei, ALuint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALDELETEEFFECTS)(ALsizei, ALuint*);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISEFFECT)(ALuint);
|
||||||
|
typedef void (AL_APIENTRY *LPALEFFECTI)(ALuint, ALenum, ALint);
|
||||||
|
typedef void (AL_APIENTRY *LPALEFFECTIV)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALEFFECTF)(ALuint, ALenum, ALfloat);
|
||||||
|
typedef void (AL_APIENTRY *LPALEFFECTFV)(ALuint, ALenum, ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETEFFECTI)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETEFFECTIV)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETEFFECTF)(ALuint, ALenum, ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETEFFECTFV)(ALuint, ALenum, ALfloat*);
|
||||||
|
|
||||||
|
/* Filter object function types. */
|
||||||
|
typedef void (AL_APIENTRY *LPALGENFILTERS)(ALsizei, ALuint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALDELETEFILTERS)(ALsizei, ALuint*);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISFILTER)(ALuint);
|
||||||
|
typedef void (AL_APIENTRY *LPALFILTERI)(ALuint, ALenum, ALint);
|
||||||
|
typedef void (AL_APIENTRY *LPALFILTERIV)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALFILTERF)(ALuint, ALenum, ALfloat);
|
||||||
|
typedef void (AL_APIENTRY *LPALFILTERFV)(ALuint, ALenum, ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETFILTERI)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETFILTERIV)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETFILTERF)(ALuint, ALenum, ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETFILTERFV)(ALuint, ALenum, ALfloat*);
|
||||||
|
|
||||||
|
/* Auxiliary Effect Slot object function types. */
|
||||||
|
typedef void (AL_APIENTRY *LPALGENAUXILIARYEFFECTSLOTS)(ALsizei, ALuint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALDELETEAUXILIARYEFFECTSLOTS)(ALsizei, ALuint*);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISAUXILIARYEFFECTSLOT)(ALuint);
|
||||||
|
typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTI)(ALuint, ALenum, ALint);
|
||||||
|
typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTIV)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTF)(ALuint, ALenum, ALfloat);
|
||||||
|
typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTFV)(ALuint, ALenum, ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTI)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTIV)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTF)(ALuint, ALenum, ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTFV)(ALuint, ALenum, ALfloat*);
|
||||||
|
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API ALvoid AL_APIENTRY alGenEffects(ALsizei n, ALuint *effects);
|
||||||
|
AL_API ALvoid AL_APIENTRY alDeleteEffects(ALsizei n, ALuint *effects);
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsEffect(ALuint effect);
|
||||||
|
AL_API ALvoid AL_APIENTRY alEffecti(ALuint effect, ALenum param, ALint iValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alEffectiv(ALuint effect, ALenum param, ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alEffectf(ALuint effect, ALenum param, ALfloat flValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alEffectfv(ALuint effect, ALenum param, ALfloat *pflValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetEffecti(ALuint effect, ALenum param, ALint *piValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetEffectiv(ALuint effect, ALenum param, ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetEffectf(ALuint effect, ALenum param, ALfloat *pflValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetEffectfv(ALuint effect, ALenum param, ALfloat *pflValues);
|
||||||
|
|
||||||
|
AL_API ALvoid AL_APIENTRY alGenFilters(ALsizei n, ALuint *filters);
|
||||||
|
AL_API ALvoid AL_APIENTRY alDeleteFilters(ALsizei n, ALuint *filters);
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsFilter(ALuint filter);
|
||||||
|
AL_API ALvoid AL_APIENTRY alFilteri(ALuint filter, ALenum param, ALint iValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alFilteriv(ALuint filter, ALenum param, ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alFilterf(ALuint filter, ALenum param, ALfloat flValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alFilterfv(ALuint filter, ALenum param, ALfloat *pflValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetFilteri(ALuint filter, ALenum param, ALint *piValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetFilteriv(ALuint filter, ALenum param, ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetFilterf(ALuint filter, ALenum param, ALfloat *pflValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetFilterfv(ALuint filter, ALenum param, ALfloat *pflValues);
|
||||||
|
|
||||||
|
AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots);
|
||||||
|
AL_API ALvoid AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots);
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsAuxiliaryEffectSlot(ALuint effectslot);
|
||||||
|
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint iValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat flValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *pflValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint *piValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *pflValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *pflValues);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 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 ranges and defaults. */
|
||||||
|
|
||||||
|
/* Standard reverb effect */
|
||||||
|
#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
|
||||||
|
|
||||||
|
/* EAX reverb effect */
|
||||||
|
#define AL_EAXREVERB_MIN_DENSITY (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_DENSITY (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DENSITY (1.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_DIFFUSION (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_DIFFUSION (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DIFFUSION (1.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_GAIN (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_GAIN (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_GAIN (0.32f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_GAINHF (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_GAINHF (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_GAINHF (0.89f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_GAINLF (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_GAINLF (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_GAINLF (1.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_DECAY_TIME (0.1f)
|
||||||
|
#define AL_EAXREVERB_MAX_DECAY_TIME (20.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DECAY_TIME (1.49f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_DECAY_HFRATIO (0.1f)
|
||||||
|
#define AL_EAXREVERB_MAX_DECAY_HFRATIO (2.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DECAY_HFRATIO (0.83f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_DECAY_LFRATIO (0.1f)
|
||||||
|
#define AL_EAXREVERB_MAX_DECAY_LFRATIO (2.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DECAY_LFRATIO (1.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_REFLECTIONS_GAIN (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_REFLECTIONS_GAIN (3.16f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_REFLECTIONS_GAIN (0.05f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_REFLECTIONS_DELAY (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_REFLECTIONS_DELAY (0.3f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_REFLECTIONS_DELAY (0.007f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN_XYZ (0.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_LATE_REVERB_GAIN (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_LATE_REVERB_GAIN (10.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_LATE_REVERB_GAIN (1.26f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_LATE_REVERB_DELAY (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_LATE_REVERB_DELAY (0.1f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_LATE_REVERB_DELAY (0.011f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ (0.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_ECHO_TIME (0.075f)
|
||||||
|
#define AL_EAXREVERB_MAX_ECHO_TIME (0.25f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_ECHO_TIME (0.25f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_ECHO_DEPTH (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_ECHO_DEPTH (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_ECHO_DEPTH (0.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_MODULATION_TIME (0.04f)
|
||||||
|
#define AL_EAXREVERB_MAX_MODULATION_TIME (4.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_MODULATION_TIME (0.25f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_MODULATION_DEPTH (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_MODULATION_DEPTH (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_MODULATION_DEPTH (0.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_AIR_ABSORPTION_GAINHF (0.892f)
|
||||||
|
#define AL_EAXREVERB_MAX_AIR_ABSORPTION_GAINHF (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_AIR_ABSORPTION_GAINHF (0.994f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_HFREFERENCE (1000.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_HFREFERENCE (20000.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_HFREFERENCE (5000.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_LFREFERENCE (20.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_LFREFERENCE (1000.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_LFREFERENCE (250.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_ROOM_ROLLOFF_FACTOR (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_ROOM_ROLLOFF_FACTOR (10.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_ROOM_ROLLOFF_FACTOR (0.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_DECAY_HFLIMIT AL_FALSE
|
||||||
|
#define AL_EAXREVERB_MAX_DECAY_HFLIMIT AL_TRUE
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DECAY_HFLIMIT AL_TRUE
|
||||||
|
|
||||||
|
/* Chorus effect */
|
||||||
|
#define AL_CHORUS_WAVEFORM_SINUSOID (0)
|
||||||
|
#define AL_CHORUS_WAVEFORM_TRIANGLE (1)
|
||||||
|
|
||||||
|
#define AL_CHORUS_MIN_WAVEFORM (0)
|
||||||
|
#define AL_CHORUS_MAX_WAVEFORM (1)
|
||||||
|
#define AL_CHORUS_DEFAULT_WAVEFORM (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)
|
||||||
|
|
||||||
|
/* Distortion effect */
|
||||||
|
#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)
|
||||||
|
|
||||||
|
/* Echo effect */
|
||||||
|
#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)
|
||||||
|
|
||||||
|
/* Flanger effect */
|
||||||
|
#define AL_FLANGER_WAVEFORM_SINUSOID (0)
|
||||||
|
#define AL_FLANGER_WAVEFORM_TRIANGLE (1)
|
||||||
|
|
||||||
|
#define AL_FLANGER_MIN_WAVEFORM (0)
|
||||||
|
#define AL_FLANGER_MAX_WAVEFORM (1)
|
||||||
|
#define AL_FLANGER_DEFAULT_WAVEFORM (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)
|
||||||
|
|
||||||
|
/* Frequency shifter effect */
|
||||||
|
#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_DIRECTION_DOWN (0)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_DIRECTION_UP (1)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_DIRECTION_OFF (2)
|
||||||
|
|
||||||
|
#define AL_FREQUENCY_SHIFTER_MIN_RIGHT_DIRECTION (0)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_MAX_RIGHT_DIRECTION (2)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_DEFAULT_RIGHT_DIRECTION (0)
|
||||||
|
|
||||||
|
/* Vocal morpher effect */
|
||||||
|
#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_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_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_WAVEFORM_SINUSOID (0)
|
||||||
|
#define AL_VOCAL_MORPHER_WAVEFORM_TRIANGLE (1)
|
||||||
|
#define AL_VOCAL_MORPHER_WAVEFORM_SAWTOOTH (2)
|
||||||
|
|
||||||
|
#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_MIN_RATE (0.0f)
|
||||||
|
#define AL_VOCAL_MORPHER_MAX_RATE (10.0f)
|
||||||
|
#define AL_VOCAL_MORPHER_DEFAULT_RATE (1.41f)
|
||||||
|
|
||||||
|
/* Pitch shifter effect */
|
||||||
|
#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)
|
||||||
|
|
||||||
|
/* Ring modulator effect */
|
||||||
|
#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_SINUSOID (0)
|
||||||
|
#define AL_RING_MODULATOR_SAWTOOTH (1)
|
||||||
|
#define AL_RING_MODULATOR_SQUARE (2)
|
||||||
|
|
||||||
|
#define AL_RING_MODULATOR_MIN_WAVEFORM (0)
|
||||||
|
#define AL_RING_MODULATOR_MAX_WAVEFORM (2)
|
||||||
|
#define AL_RING_MODULATOR_DEFAULT_WAVEFORM (0)
|
||||||
|
|
||||||
|
/* Autowah effect */
|
||||||
|
#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)
|
||||||
|
|
||||||
|
/* Compressor effect */
|
||||||
|
#define AL_COMPRESSOR_MIN_ONOFF (0)
|
||||||
|
#define AL_COMPRESSOR_MAX_ONOFF (1)
|
||||||
|
#define AL_COMPRESSOR_DEFAULT_ONOFF (1)
|
||||||
|
|
||||||
|
/* Equalizer effect */
|
||||||
|
#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 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 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 /* AL_EFX_H */
|
515
source/common/music/backend/i_sound.cpp
Normal file
515
source/common/music/backend/i_sound.cpp
Normal file
|
@ -0,0 +1,515 @@
|
||||||
|
/*
|
||||||
|
** i_sound.cpp
|
||||||
|
** Stubs for sound interfaces.
|
||||||
|
**
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
** Copyright 1998-2006 Randy Heit
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions
|
||||||
|
** are met:
|
||||||
|
**
|
||||||
|
** 1. Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** 3. The name of the author may not be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "oalsound.h"
|
||||||
|
#include "printf.h"
|
||||||
|
#include "i_module.h"
|
||||||
|
#include "cmdlib.h"
|
||||||
|
#include "zmusic/sounddecoder.h"
|
||||||
|
|
||||||
|
#include "c_dispatch.h"
|
||||||
|
#include "i_music.h"
|
||||||
|
#include "m_argv.h"
|
||||||
|
#include "v_text.h"
|
||||||
|
#include "c_cvars.h"
|
||||||
|
#include "stats.h"
|
||||||
|
#include "s_music.h"
|
||||||
|
#include "z_music.h"
|
||||||
|
#include "gamecvars.h"
|
||||||
|
#include "zmusic/zmusic.h"
|
||||||
|
|
||||||
|
EXTERN_CVAR (Float, snd_sfxvolume)
|
||||||
|
CVAR (Int, snd_samplerate, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
|
CVAR (Int, snd_buffersize, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
|
CVAR (Int, snd_hrtf, -1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
|
|
||||||
|
#if !defined(NO_OPENAL)
|
||||||
|
#define DEF_BACKEND "openal"
|
||||||
|
#else
|
||||||
|
#define DEF_BACKEND "null"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CVAR(String, snd_backend, DEF_BACKEND, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||||
|
|
||||||
|
// killough 2/21/98: optionally use varying pitched sounds
|
||||||
|
CVAR (Bool, snd_pitched, false, CVAR_ARCHIVE)
|
||||||
|
|
||||||
|
SoundRenderer *GSnd;
|
||||||
|
bool nosound;
|
||||||
|
bool nosfx;
|
||||||
|
|
||||||
|
void I_CloseSound ();
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// SFX API
|
||||||
|
//
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// CVAR snd_mastervolume
|
||||||
|
//
|
||||||
|
// Maximum volume of all audio
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
CUSTOM_CVAR(Float, snd_mastervolume, 1.f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
|
||||||
|
{
|
||||||
|
if (self < 0.f)
|
||||||
|
self = 0.f;
|
||||||
|
else if (self > 1.f)
|
||||||
|
self = 1.f;
|
||||||
|
|
||||||
|
ChangeMusicSetting(ZMusic::snd_mastervolume, nullptr, self);
|
||||||
|
snd_sfxvolume.Callback();
|
||||||
|
mus_volume.Callback();
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// CVAR snd_sfxvolume
|
||||||
|
//
|
||||||
|
// Maximum volume of a sound effect.
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
CUSTOM_CVAR (Float, snd_sfxvolume, 1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL)
|
||||||
|
{
|
||||||
|
if (self < 0.f)
|
||||||
|
self = 0.f;
|
||||||
|
else if (self > 1.f)
|
||||||
|
self = 1.f;
|
||||||
|
else if (GSnd != NULL)
|
||||||
|
{
|
||||||
|
GSnd->SetSfxVolume (self * snd_mastervolume);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MIDIStreamer;
|
||||||
|
|
||||||
|
class NullSoundRenderer : public SoundRenderer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual bool IsNull() { return true; }
|
||||||
|
void SetSfxVolume (float volume)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void SetMusicVolume (float volume)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
std::pair<SoundHandle,bool> LoadSound(uint8_t *sfxdata, int length, bool monoize, FSoundLoadBuffer *pBuffer)
|
||||||
|
{
|
||||||
|
SoundHandle retval = { NULL };
|
||||||
|
return std::make_pair(retval, true);
|
||||||
|
}
|
||||||
|
std::pair<SoundHandle,bool> LoadSoundRaw(uint8_t *sfxdata, int length, int frequency, int channels, int bits, int loopstart, int loopend, bool monoize)
|
||||||
|
{
|
||||||
|
SoundHandle retval = { NULL };
|
||||||
|
return std::make_pair(retval, true);
|
||||||
|
}
|
||||||
|
void UnloadSound (SoundHandle sfx)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
unsigned int GetMSLength(SoundHandle sfx)
|
||||||
|
{
|
||||||
|
// Return something that isn't 0. This is only used by some
|
||||||
|
// ambient sounds to specify a default minimum period.
|
||||||
|
return 250;
|
||||||
|
}
|
||||||
|
unsigned int GetSampleLength(SoundHandle sfx)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
float GetOutputRate()
|
||||||
|
{
|
||||||
|
return 11025; // Lies!
|
||||||
|
}
|
||||||
|
void StopChannel(FISoundChannel *chan)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void ChannelVolume(FISoundChannel *, float)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void ChannelPitch(FISoundChannel *, float)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Streaming sounds.
|
||||||
|
SoundStream *CreateStream (SoundStreamCallback callback, int buffbytes, int flags, int samplerate, void *userdata)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Starts a sound.
|
||||||
|
FISoundChannel *StartSound (SoundHandle sfx, float vol, int pitch, int chanflags, FISoundChannel *reuse_chan)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
FISoundChannel *StartSound3D (SoundHandle sfx, SoundListener *listener, float vol, FRolloffInfo *rolloff, float distscale, int pitch, int priority, const FVector3 &pos, const FVector3 &vel, int channum, int chanflags, FISoundChannel *reuse_chan)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Marks a channel's start time without actually playing it.
|
||||||
|
void MarkStartTime (FISoundChannel *chan)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns position of sound on this channel, in samples.
|
||||||
|
unsigned int GetPosition(FISoundChannel *chan)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gets a channel's audibility (real volume).
|
||||||
|
float GetAudibility(FISoundChannel *chan)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Synchronizes following sound startups.
|
||||||
|
void Sync (bool sync)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pauses or resumes all sound effect channels.
|
||||||
|
void SetSfxPaused (bool paused, int slot)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pauses or resumes *every* channel, including environmental reverb.
|
||||||
|
void SetInactive(SoundRenderer::EInactiveState inactive)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Updates the volume, separation, and pitch of a sound channel.
|
||||||
|
void UpdateSoundParams3D (SoundListener *listener, FISoundChannel *chan, bool areasound, const FVector3 &pos, const FVector3 &vel)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateListener (SoundListener *)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void UpdateSounds ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsValid ()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
void PrintStatus ()
|
||||||
|
{
|
||||||
|
Printf("Null sound module active.\n");
|
||||||
|
}
|
||||||
|
void PrintDriversList ()
|
||||||
|
{
|
||||||
|
Printf("Null sound module uses no drivers.\n");
|
||||||
|
}
|
||||||
|
FString GatherStats ()
|
||||||
|
{
|
||||||
|
return "Null sound module has no stats.";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void I_InitSound ()
|
||||||
|
{
|
||||||
|
FModule_SetProgDir(progdir);
|
||||||
|
/* Get command line options: */
|
||||||
|
|
||||||
|
GSnd = NULL;
|
||||||
|
if (nosound)
|
||||||
|
{
|
||||||
|
GSnd = new NullSoundRenderer;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsOpenALPresent())
|
||||||
|
{
|
||||||
|
GSnd = new OpenALSoundRenderer;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!GSnd || !GSnd->IsValid ())
|
||||||
|
{
|
||||||
|
I_CloseSound();
|
||||||
|
GSnd = new NullSoundRenderer;
|
||||||
|
Printf (TEXTCOLOR_RED"Music init failed. Using nosound.\n");
|
||||||
|
}
|
||||||
|
snd_sfxvolume.Callback ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void I_CloseSound ()
|
||||||
|
{
|
||||||
|
// Free all loaded samples
|
||||||
|
//S_UnloadAllSounds();
|
||||||
|
|
||||||
|
delete GSnd;
|
||||||
|
GSnd = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *GetSampleTypeName(SampleType type)
|
||||||
|
{
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
case SampleType_UInt8: return "Unsigned 8-bit";
|
||||||
|
case SampleType_Int16: return "Signed 16-bit";
|
||||||
|
}
|
||||||
|
return "(invalid sample type)";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *GetChannelConfigName(ChannelConfig chan)
|
||||||
|
{
|
||||||
|
switch(chan)
|
||||||
|
{
|
||||||
|
case ChannelConfig_Mono: return "Mono";
|
||||||
|
case ChannelConfig_Stereo: return "Stereo";
|
||||||
|
}
|
||||||
|
return "(invalid channel config)";
|
||||||
|
}
|
||||||
|
|
||||||
|
SoundRenderer::SoundRenderer ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SoundRenderer::~SoundRenderer ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
FString SoundRenderer::GatherStats ()
|
||||||
|
{
|
||||||
|
return "No stats for this sound renderer.";
|
||||||
|
}
|
||||||
|
|
||||||
|
short *SoundRenderer::DecodeSample(int outlen, const void *coded, int sizebytes, ECodecType ctype)
|
||||||
|
{
|
||||||
|
short *samples = (short*)calloc(1, outlen);
|
||||||
|
ChannelConfig chans;
|
||||||
|
SampleType type;
|
||||||
|
int srate;
|
||||||
|
|
||||||
|
// The decoder will take ownership of the reader if it succeeds so this may not be a local variable.
|
||||||
|
MusicIO::MemoryReader *reader = new MusicIO::MemoryReader((const uint8_t*)coded, sizebytes);
|
||||||
|
|
||||||
|
SoundDecoder *decoder = SoundDecoder::CreateDecoder(reader);
|
||||||
|
if (!decoder)
|
||||||
|
{
|
||||||
|
reader->close();
|
||||||
|
return samples;
|
||||||
|
}
|
||||||
|
|
||||||
|
decoder->getInfo(&srate, &chans, &type);
|
||||||
|
if(chans != ChannelConfig_Mono || type != SampleType_Int16)
|
||||||
|
{
|
||||||
|
DPrintf(DMSG_WARNING, "Sample is not 16-bit mono\n");
|
||||||
|
delete decoder;
|
||||||
|
return samples;
|
||||||
|
}
|
||||||
|
|
||||||
|
decoder->read((char*)samples, outlen);
|
||||||
|
delete decoder;
|
||||||
|
return samples;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SoundRenderer::DrawWaveDebug(int mode)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
FString SoundStream::GetStats()
|
||||||
|
{
|
||||||
|
return "No stream stats available.";
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// SoundRenderer :: LoadSoundVoc
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
std::pair<SoundHandle,bool> SoundRenderer::LoadSoundVoc(uint8_t *sfxdata, int length, bool monoize)
|
||||||
|
{
|
||||||
|
uint8_t * data = NULL;
|
||||||
|
int len, frequency, channels, bits, loopstart, loopend;
|
||||||
|
len = frequency = channels = bits = 0;
|
||||||
|
loopstart = loopend = -1;
|
||||||
|
do if (length > 26)
|
||||||
|
{
|
||||||
|
// First pass to parse data and validate the file
|
||||||
|
if (strncmp ((const char *)sfxdata, "Creative Voice File", 19))
|
||||||
|
break;
|
||||||
|
int i = 26, blocktype = 0, blocksize = 0, codec = -1;
|
||||||
|
bool noextra = true, okay = true;
|
||||||
|
while (i < length)
|
||||||
|
{
|
||||||
|
// Read block header
|
||||||
|
blocktype = sfxdata[i];
|
||||||
|
if (blocktype == 0)
|
||||||
|
break;
|
||||||
|
blocksize = sfxdata[i+1] + (sfxdata[i+2]<<8) + (sfxdata[i+3]<<16);
|
||||||
|
i += 4;
|
||||||
|
if (i + blocksize > length)
|
||||||
|
{
|
||||||
|
okay = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read block data
|
||||||
|
switch (blocktype)
|
||||||
|
{
|
||||||
|
case 1: // Sound data
|
||||||
|
if (noextra && (codec == -1 || codec == sfxdata[i+1]))
|
||||||
|
{
|
||||||
|
frequency = 1000000/(256 - sfxdata[i]);
|
||||||
|
channels = 1;
|
||||||
|
codec = sfxdata[i+1];
|
||||||
|
if (codec == 0)
|
||||||
|
bits = 8;
|
||||||
|
else if (codec == 4)
|
||||||
|
bits = -16;
|
||||||
|
else okay = false;
|
||||||
|
len += blocksize - 2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2: // Sound data continuation
|
||||||
|
if (codec == -1)
|
||||||
|
okay = false;
|
||||||
|
len += blocksize;
|
||||||
|
break;
|
||||||
|
case 3: // Silence
|
||||||
|
if (frequency == 1000000/(256 - sfxdata[i+2]))
|
||||||
|
{
|
||||||
|
int silength = 1 + sfxdata[i] + (sfxdata[i+1]<<8);
|
||||||
|
if (codec == 0) // 8-bit unsigned PCM
|
||||||
|
len += silength;
|
||||||
|
else if (codec == 4) // 16-bit signed PCM
|
||||||
|
len += silength<<1;
|
||||||
|
else okay = false;
|
||||||
|
} else okay = false;
|
||||||
|
break;
|
||||||
|
case 4: // Mark (ignored)
|
||||||
|
case 5: // Text (ignored)
|
||||||
|
break;
|
||||||
|
case 6: // Repeat start
|
||||||
|
loopstart = len;
|
||||||
|
break;
|
||||||
|
case 7: // Repeat end
|
||||||
|
loopend = len;
|
||||||
|
if (loopend < loopstart)
|
||||||
|
okay = false;
|
||||||
|
break;
|
||||||
|
case 8: // Extra info
|
||||||
|
noextra = false;
|
||||||
|
if (codec == -1)
|
||||||
|
{
|
||||||
|
codec = sfxdata[i+2];
|
||||||
|
channels = 1+sfxdata[i+3];
|
||||||
|
frequency = 256000000/(channels * (65536 - (sfxdata[i]+(sfxdata[i+1]<<8))));
|
||||||
|
} else okay = false;
|
||||||
|
break;
|
||||||
|
case 9: // Sound data in new format
|
||||||
|
if (codec == -1)
|
||||||
|
{
|
||||||
|
frequency = sfxdata[i] + (sfxdata[i+1]<<8) + (sfxdata[i+2]<<16) + (sfxdata[i+3]<<24);
|
||||||
|
bits = sfxdata[i+4];
|
||||||
|
channels = sfxdata[i+5];
|
||||||
|
codec = sfxdata[i+6] + (sfxdata[i+7]<<8);
|
||||||
|
if (codec == 0)
|
||||||
|
bits = 8;
|
||||||
|
else if (codec == 4)
|
||||||
|
bits = -16;
|
||||||
|
else okay = false;
|
||||||
|
len += blocksize - 12;
|
||||||
|
} else okay = false;
|
||||||
|
break;
|
||||||
|
default: // Unknown block type
|
||||||
|
okay = false;
|
||||||
|
DPrintf (DMSG_ERROR, "Unknown VOC block type %i\n", blocktype);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Move to next block
|
||||||
|
i += blocksize;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Second pass to write the data
|
||||||
|
if (okay)
|
||||||
|
{
|
||||||
|
data = new uint8_t[len];
|
||||||
|
i = 26;
|
||||||
|
int j = 0;
|
||||||
|
while (i < length)
|
||||||
|
{
|
||||||
|
// Read block header again
|
||||||
|
blocktype = sfxdata[i];
|
||||||
|
if (blocktype == 0) break;
|
||||||
|
blocksize = sfxdata[i+1] + (sfxdata[i+2]<<8) + (sfxdata[i+3]<<16);
|
||||||
|
i += 4;
|
||||||
|
switch (blocktype)
|
||||||
|
{
|
||||||
|
case 1: memcpy(data+j, sfxdata+i+2, blocksize-2 ); j += blocksize-2; break;
|
||||||
|
case 2: memcpy(data+j, sfxdata+i, blocksize ); j += blocksize; break;
|
||||||
|
case 9: memcpy(data+j, sfxdata+i+12, blocksize-12); j += blocksize-12; break;
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
int silength = 1 + sfxdata[i] + (sfxdata[i+1]<<8);
|
||||||
|
if (bits == 8)
|
||||||
|
{
|
||||||
|
memset(data+j, 128, silength);
|
||||||
|
j += silength;
|
||||||
|
}
|
||||||
|
else if (bits == -16)
|
||||||
|
{
|
||||||
|
memset(data+j, 0, silength<<1);
|
||||||
|
j += silength<<1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
i += blocksize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (false);
|
||||||
|
std::pair<SoundHandle,bool> retval = LoadSoundRaw(data, len, frequency, channels, bits, loopstart, loopend, monoize);
|
||||||
|
if (data) delete[] data;
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::pair<SoundHandle, bool> SoundRenderer::LoadSoundBuffered(FSoundLoadBuffer *buffer, bool monoize)
|
||||||
|
{
|
||||||
|
SoundHandle retval = { NULL };
|
||||||
|
return std::make_pair(retval, true);
|
||||||
|
}
|
||||||
|
|
188
source/common/music/backend/i_sound.h
Normal file
188
source/common/music/backend/i_sound.h
Normal file
|
@ -0,0 +1,188 @@
|
||||||
|
/*
|
||||||
|
** i_sound.h
|
||||||
|
**
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
** Copyright 1998-2006 Randy Heit
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions
|
||||||
|
** are met:
|
||||||
|
**
|
||||||
|
** 1. Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** 3. The name of the author may not be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __I_SOUND__
|
||||||
|
#define __I_SOUND__
|
||||||
|
|
||||||
|
#include "i_soundinternal.h"
|
||||||
|
#include "zstring.h"
|
||||||
|
|
||||||
|
class FileReader;
|
||||||
|
struct FSoundChan;
|
||||||
|
|
||||||
|
enum EStartSoundFlags
|
||||||
|
{
|
||||||
|
SNDF_LOOP=1,
|
||||||
|
SNDF_NOPAUSE=2,
|
||||||
|
SNDF_AREA=4,
|
||||||
|
SNDF_ABSTIME=8,
|
||||||
|
SNDF_NOREVERB=16,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ECodecType
|
||||||
|
{
|
||||||
|
CODEC_Unknown,
|
||||||
|
CODEC_Vorbis,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class SoundStream
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~SoundStream () {}
|
||||||
|
|
||||||
|
enum
|
||||||
|
{ // For CreateStream
|
||||||
|
Mono = 1,
|
||||||
|
Bits8 = 2,
|
||||||
|
Bits32 = 4,
|
||||||
|
Float = 8,
|
||||||
|
|
||||||
|
// For OpenStream
|
||||||
|
Loop = 16
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual bool Play(bool looping, float volume) = 0;
|
||||||
|
virtual void Stop() = 0;
|
||||||
|
virtual void SetVolume(float volume) = 0;
|
||||||
|
virtual bool SetPaused(bool paused) = 0;
|
||||||
|
virtual bool IsEnded() = 0;
|
||||||
|
virtual FString GetStats();
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef bool (*SoundStreamCallback)(SoundStream *stream, void *buff, int len, void *userdata);
|
||||||
|
|
||||||
|
struct SoundDecoder;
|
||||||
|
class MIDIDevice;
|
||||||
|
|
||||||
|
struct FSoundLoadBuffer
|
||||||
|
{
|
||||||
|
std::vector<uint8_t> mBuffer;
|
||||||
|
uint32_t loop_start;
|
||||||
|
uint32_t loop_end;
|
||||||
|
ChannelConfig chans;
|
||||||
|
SampleType type;
|
||||||
|
int srate;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SoundRenderer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SoundRenderer ();
|
||||||
|
virtual ~SoundRenderer ();
|
||||||
|
|
||||||
|
virtual bool IsNull() { return false; }
|
||||||
|
virtual void SetSfxVolume (float volume) = 0;
|
||||||
|
virtual void SetMusicVolume (float volume) = 0;
|
||||||
|
// Returns a pair containing a sound handle and a boolean indicating the sound can be used in 3D.
|
||||||
|
virtual std::pair<SoundHandle,bool> LoadSound(uint8_t *sfxdata, int length, bool monoize=false, FSoundLoadBuffer *pBuffer = nullptr) = 0;
|
||||||
|
std::pair<SoundHandle,bool> LoadSoundVoc(uint8_t *sfxdata, int length, bool monoize=false);
|
||||||
|
virtual std::pair<SoundHandle,bool> LoadSoundRaw(uint8_t *sfxdata, int length, int frequency, int channels, int bits, int loopstart, int loopend = -1, bool monoize = false) = 0;
|
||||||
|
virtual std::pair<SoundHandle, bool> LoadSoundBuffered(FSoundLoadBuffer *buffer, bool monoize);
|
||||||
|
virtual void UnloadSound (SoundHandle sfx) = 0; // unloads a sound from memory
|
||||||
|
virtual unsigned int GetMSLength(SoundHandle sfx) = 0; // Gets the length of a sound at its default frequency
|
||||||
|
virtual unsigned int GetSampleLength(SoundHandle sfx) = 0; // Gets the length of a sound at its default frequency
|
||||||
|
virtual float GetOutputRate() = 0;
|
||||||
|
|
||||||
|
// Streaming sounds.
|
||||||
|
virtual SoundStream *CreateStream (SoundStreamCallback callback, int buffbytes, int flags, int samplerate, void *userdata) = 0;
|
||||||
|
|
||||||
|
// Starts a sound.
|
||||||
|
virtual FISoundChannel *StartSound (SoundHandle sfx, float vol, int pitch, int chanflags, FISoundChannel *reuse_chan) = 0;
|
||||||
|
virtual FISoundChannel *StartSound3D (SoundHandle sfx, SoundListener *listener, float vol, FRolloffInfo *rolloff, float distscale, int pitch, int priority, const FVector3 &pos, const FVector3 &vel, int channum, int chanflags, FISoundChannel *reuse_chan) = 0;
|
||||||
|
|
||||||
|
// Stops a sound channel.
|
||||||
|
virtual void StopChannel (FISoundChannel *chan) = 0;
|
||||||
|
|
||||||
|
// Changes a channel's volume.
|
||||||
|
virtual void ChannelVolume (FISoundChannel *chan, float volume) = 0;
|
||||||
|
|
||||||
|
// Changes a channel's pitch.
|
||||||
|
virtual void ChannelPitch(FISoundChannel *chan, float volume) = 0;
|
||||||
|
|
||||||
|
// Marks a channel's start time without actually playing it.
|
||||||
|
virtual void MarkStartTime (FISoundChannel *chan) = 0;
|
||||||
|
|
||||||
|
// Returns position of sound on this channel, in samples.
|
||||||
|
virtual unsigned int GetPosition(FISoundChannel *chan) = 0;
|
||||||
|
|
||||||
|
// Gets a channel's audibility (real volume).
|
||||||
|
virtual float GetAudibility(FISoundChannel *chan) = 0;
|
||||||
|
|
||||||
|
// Synchronizes following sound startups.
|
||||||
|
virtual void Sync (bool sync) = 0;
|
||||||
|
|
||||||
|
// Pauses or resumes all sound effect channels.
|
||||||
|
virtual void SetSfxPaused (bool paused, int slot) = 0;
|
||||||
|
|
||||||
|
// Pauses or resumes *every* channel, including environmental reverb.
|
||||||
|
enum EInactiveState
|
||||||
|
{
|
||||||
|
INACTIVE_Active, // sound is active
|
||||||
|
INACTIVE_Complete, // sound is completely paused
|
||||||
|
INACTIVE_Mute // sound is only muted
|
||||||
|
};
|
||||||
|
virtual void SetInactive(EInactiveState inactive) = 0;
|
||||||
|
|
||||||
|
// Updates the volume, separation, and pitch of a sound channel.
|
||||||
|
virtual void UpdateSoundParams3D (SoundListener *listener, FISoundChannel *chan, bool areasound, const FVector3 &pos, const FVector3 &vel) = 0;
|
||||||
|
|
||||||
|
virtual void UpdateListener (SoundListener *) = 0;
|
||||||
|
virtual void UpdateSounds () = 0;
|
||||||
|
|
||||||
|
virtual bool IsValid () = 0;
|
||||||
|
virtual void PrintStatus () = 0;
|
||||||
|
virtual void PrintDriversList () = 0;
|
||||||
|
virtual FString GatherStats ();
|
||||||
|
virtual short *DecodeSample(int outlen, const void *coded, int sizebytes, ECodecType type);
|
||||||
|
|
||||||
|
virtual void DrawWaveDebug(int mode);
|
||||||
|
};
|
||||||
|
|
||||||
|
extern SoundRenderer *GSnd;
|
||||||
|
extern bool nosfx;
|
||||||
|
extern bool nosound;
|
||||||
|
|
||||||
|
void I_InitSound ();
|
||||||
|
|
||||||
|
void S_ChannelEnded(FISoundChannel *schan);
|
||||||
|
void S_ChannelVirtualChanged(FISoundChannel *schan, bool is_virtual);
|
||||||
|
float S_GetRolloff(FRolloffInfo *rolloff, float distance, bool logarithmic);
|
||||||
|
FISoundChannel *S_GetChannel(void *syschan);
|
||||||
|
|
||||||
|
extern ReverbContainer *DefaultEnvironments[26];
|
||||||
|
|
||||||
|
bool IsOpenALPresent();
|
||||||
|
|
||||||
|
#endif
|
124
source/common/music/backend/i_soundinternal.h
Normal file
124
source/common/music/backend/i_soundinternal.h
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
#ifndef __SNDINT_H
|
||||||
|
#define __SNDINT_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "vectors.h"
|
||||||
|
#include "tarray.h"
|
||||||
|
#include "zmusic/sounddecoder.h"
|
||||||
|
#include "../../libraries/music_common/fileio.h"
|
||||||
|
|
||||||
|
class FileReader;
|
||||||
|
|
||||||
|
// For convenience, this structure matches FMOD_REVERB_PROPERTIES.
|
||||||
|
// Since I can't very well #include system-specific stuff in the
|
||||||
|
// main game files, I duplicate it here.
|
||||||
|
struct REVERB_PROPERTIES
|
||||||
|
{
|
||||||
|
int Instance;
|
||||||
|
int Environment;
|
||||||
|
float EnvSize;
|
||||||
|
float EnvDiffusion;
|
||||||
|
int Room;
|
||||||
|
int RoomHF;
|
||||||
|
int RoomLF;
|
||||||
|
float DecayTime;
|
||||||
|
float DecayHFRatio;
|
||||||
|
float DecayLFRatio;
|
||||||
|
int Reflections;
|
||||||
|
float ReflectionsDelay;
|
||||||
|
float ReflectionsPan0;
|
||||||
|
float ReflectionsPan1;
|
||||||
|
float ReflectionsPan2;
|
||||||
|
int Reverb;
|
||||||
|
float ReverbDelay;
|
||||||
|
float ReverbPan0;
|
||||||
|
float ReverbPan1;
|
||||||
|
float ReverbPan2;
|
||||||
|
float EchoTime;
|
||||||
|
float EchoDepth;
|
||||||
|
float ModulationTime;
|
||||||
|
float ModulationDepth;
|
||||||
|
float AirAbsorptionHF;
|
||||||
|
float HFReference;
|
||||||
|
float LFReference;
|
||||||
|
float RoomRolloffFactor;
|
||||||
|
float Diffusion;
|
||||||
|
float Density;
|
||||||
|
unsigned int Flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define REVERB_FLAGS_DECAYTIMESCALE 0x00000001
|
||||||
|
#define REVERB_FLAGS_REFLECTIONSSCALE 0x00000002
|
||||||
|
#define REVERB_FLAGS_REFLECTIONSDELAYSCALE 0x00000004
|
||||||
|
#define REVERB_FLAGS_REVERBSCALE 0x00000008
|
||||||
|
#define REVERB_FLAGS_REVERBDELAYSCALE 0x00000010
|
||||||
|
#define REVERB_FLAGS_DECAYHFLIMIT 0x00000020
|
||||||
|
#define REVERB_FLAGS_ECHOTIMESCALE 0x00000040
|
||||||
|
#define REVERB_FLAGS_MODULATIONTIMESCALE 0x00000080
|
||||||
|
|
||||||
|
struct ReverbContainer
|
||||||
|
{
|
||||||
|
ReverbContainer *Next;
|
||||||
|
const char *Name;
|
||||||
|
uint16_t ID;
|
||||||
|
bool Builtin;
|
||||||
|
bool Modified;
|
||||||
|
REVERB_PROPERTIES Properties;
|
||||||
|
bool SoftwareWater;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SoundListener
|
||||||
|
{
|
||||||
|
FVector3 position;
|
||||||
|
FVector3 velocity;
|
||||||
|
float angle;
|
||||||
|
bool underwater;
|
||||||
|
bool valid;
|
||||||
|
ReverbContainer *Environment;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Default rolloff information.
|
||||||
|
struct FRolloffInfo
|
||||||
|
{
|
||||||
|
int RolloffType;
|
||||||
|
float MinDistance;
|
||||||
|
union { float MaxDistance; float RolloffFactor; };
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SoundHandle
|
||||||
|
{
|
||||||
|
void *data;
|
||||||
|
|
||||||
|
bool isValid() const { return data != NULL; }
|
||||||
|
void Clear() { data = NULL; }
|
||||||
|
|
||||||
|
bool operator==(const SoundHandle &rhs) const
|
||||||
|
{ return data == rhs.data; }
|
||||||
|
bool operator!=(const SoundHandle &rhs) const
|
||||||
|
{ return !(*this == rhs); }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FISoundChannel
|
||||||
|
{
|
||||||
|
void *SysChannel; // Channel information from the system interface.
|
||||||
|
uint64_t StartTime; // Sound start time in DSP clocks.
|
||||||
|
|
||||||
|
// The sound interface doesn't use these directly but it needs to pass them to a
|
||||||
|
// callback that can't be passed a sound channel pointer
|
||||||
|
FRolloffInfo Rolloff;
|
||||||
|
float DistanceScale;
|
||||||
|
float DistanceSqr;
|
||||||
|
bool ManualRolloff;
|
||||||
|
int ChanFlags;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void FindLoopTags(MusicIO::FileInterface *fr, uint32_t *start, bool *startass, uint32_t *end, bool *endass);
|
||||||
|
|
||||||
|
class SoundStream;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
199
source/common/music/backend/oalload.h
Normal file
199
source/common/music/backend/oalload.h
Normal file
|
@ -0,0 +1,199 @@
|
||||||
|
#ifndef OALDEF_H
|
||||||
|
#define OALDEF_H
|
||||||
|
|
||||||
|
#if !defined NO_OPENAL && defined DYN_OPENAL
|
||||||
|
|
||||||
|
#define DEFINE_ENTRY(type, name) static TReqProc<OpenALModule, type> p_##name{#name};
|
||||||
|
DEFINE_ENTRY(LPALENABLE,alEnable)
|
||||||
|
DEFINE_ENTRY(LPALDISABLE, alDisable)
|
||||||
|
DEFINE_ENTRY(LPALISENABLED, alIsEnabled)
|
||||||
|
DEFINE_ENTRY(LPALGETSTRING, alGetString)
|
||||||
|
DEFINE_ENTRY(LPALGETBOOLEANV, alGetBooleanv)
|
||||||
|
DEFINE_ENTRY(LPALGETINTEGERV, alGetIntegerv)
|
||||||
|
DEFINE_ENTRY(LPALGETFLOATV, alGetFloatv)
|
||||||
|
DEFINE_ENTRY(LPALGETDOUBLEV, alGetDoublev)
|
||||||
|
DEFINE_ENTRY(LPALGETBOOLEAN, alGetBoolean)
|
||||||
|
DEFINE_ENTRY(LPALGETINTEGER, alGetInteger)
|
||||||
|
DEFINE_ENTRY(LPALGETFLOAT, alGetFloat)
|
||||||
|
DEFINE_ENTRY(LPALGETDOUBLE, alGetDouble)
|
||||||
|
DEFINE_ENTRY(LPALGETERROR, alGetError)
|
||||||
|
DEFINE_ENTRY(LPALISEXTENSIONPRESENT, alIsExtensionPresent)
|
||||||
|
DEFINE_ENTRY(LPALGETPROCADDRESS, alGetProcAddress)
|
||||||
|
DEFINE_ENTRY(LPALGETENUMVALUE, alGetEnumValue)
|
||||||
|
DEFINE_ENTRY(LPALLISTENERF, alListenerf)
|
||||||
|
DEFINE_ENTRY(LPALLISTENER3F, alListener3f)
|
||||||
|
DEFINE_ENTRY(LPALLISTENERFV, alListenerfv)
|
||||||
|
DEFINE_ENTRY(LPALLISTENERI, alListeneri)
|
||||||
|
DEFINE_ENTRY(LPALLISTENER3I, alListener3i)
|
||||||
|
DEFINE_ENTRY(LPALLISTENERIV, alListeneriv)
|
||||||
|
DEFINE_ENTRY(LPALGETLISTENERF, alGetListenerf)
|
||||||
|
DEFINE_ENTRY(LPALGETLISTENER3F, alGetListener3f)
|
||||||
|
DEFINE_ENTRY(LPALGETLISTENERFV, alGetListenerfv)
|
||||||
|
DEFINE_ENTRY(LPALGETLISTENERI, alGetListeneri)
|
||||||
|
DEFINE_ENTRY(LPALGETLISTENER3I, alGetListener3i)
|
||||||
|
DEFINE_ENTRY(LPALGETLISTENERIV, alGetListeneriv)
|
||||||
|
DEFINE_ENTRY(LPALGENSOURCES, alGenSources)
|
||||||
|
DEFINE_ENTRY(LPALDELETESOURCES, alDeleteSources)
|
||||||
|
DEFINE_ENTRY(LPALISSOURCE, alIsSource)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEF, alSourcef)
|
||||||
|
DEFINE_ENTRY(LPALSOURCE3F, alSource3f)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEFV, alSourcefv)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEI, alSourcei)
|
||||||
|
DEFINE_ENTRY(LPALSOURCE3I, alSource3i)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEIV, alSourceiv)
|
||||||
|
DEFINE_ENTRY(LPALGETSOURCEF, alGetSourcef)
|
||||||
|
DEFINE_ENTRY(LPALGETSOURCE3F, alGetSource3f)
|
||||||
|
DEFINE_ENTRY(LPALGETSOURCEFV, alGetSourcefv)
|
||||||
|
DEFINE_ENTRY(LPALGETSOURCEI, alGetSourcei)
|
||||||
|
DEFINE_ENTRY(LPALGETSOURCE3I, alGetSource3i)
|
||||||
|
DEFINE_ENTRY(LPALGETSOURCEIV, alGetSourceiv)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEPLAYV, alSourcePlayv)
|
||||||
|
DEFINE_ENTRY(LPALSOURCESTOPV, alSourceStopv)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEREWINDV, alSourceRewindv)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEPAUSEV, alSourcePausev)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEPLAY, alSourcePlay)
|
||||||
|
DEFINE_ENTRY(LPALSOURCESTOP, alSourceStop)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEREWIND, alSourceRewind)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEPAUSE, alSourcePause)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEQUEUEBUFFERS, alSourceQueueBuffers)
|
||||||
|
DEFINE_ENTRY(LPALSOURCEUNQUEUEBUFFERS, alSourceUnqueueBuffers)
|
||||||
|
DEFINE_ENTRY(LPALGENBUFFERS, alGenBuffers)
|
||||||
|
DEFINE_ENTRY(LPALDELETEBUFFERS, alDeleteBuffers)
|
||||||
|
DEFINE_ENTRY(LPALISBUFFER, alIsBuffer)
|
||||||
|
DEFINE_ENTRY(LPALBUFFERDATA, alBufferData)
|
||||||
|
DEFINE_ENTRY(LPALBUFFERF, alBufferf)
|
||||||
|
DEFINE_ENTRY(LPALBUFFER3F, alBuffer3f)
|
||||||
|
DEFINE_ENTRY(LPALBUFFERFV, alBufferfv)
|
||||||
|
DEFINE_ENTRY(LPALBUFFERI, alBufferi)
|
||||||
|
DEFINE_ENTRY(LPALBUFFER3I, alBuffer3i)
|
||||||
|
DEFINE_ENTRY(LPALBUFFERIV, alBufferiv)
|
||||||
|
DEFINE_ENTRY(LPALGETBUFFERF, alGetBufferf)
|
||||||
|
DEFINE_ENTRY(LPALGETBUFFER3F, alGetBuffer3f)
|
||||||
|
DEFINE_ENTRY(LPALGETBUFFERFV, alGetBufferfv)
|
||||||
|
DEFINE_ENTRY(LPALGETBUFFERI, alGetBufferi)
|
||||||
|
DEFINE_ENTRY(LPALGETBUFFER3I, alGetBuffer3i)
|
||||||
|
DEFINE_ENTRY(LPALGETBUFFERIV, alGetBufferiv)
|
||||||
|
DEFINE_ENTRY(LPALDOPPLERFACTOR, alDopplerFactor)
|
||||||
|
DEFINE_ENTRY(LPALDOPPLERVELOCITY, alDopplerVelocity)
|
||||||
|
DEFINE_ENTRY(LPALSPEEDOFSOUND, alSpeedOfSound)
|
||||||
|
DEFINE_ENTRY(LPALDISTANCEMODEL, alDistanceModel)
|
||||||
|
DEFINE_ENTRY(LPALCCREATECONTEXT, alcCreateContext)
|
||||||
|
DEFINE_ENTRY(LPALCMAKECONTEXTCURRENT, alcMakeContextCurrent)
|
||||||
|
DEFINE_ENTRY(LPALCPROCESSCONTEXT, alcProcessContext)
|
||||||
|
DEFINE_ENTRY(LPALCSUSPENDCONTEXT, alcSuspendContext)
|
||||||
|
DEFINE_ENTRY(LPALCDESTROYCONTEXT, alcDestroyContext)
|
||||||
|
DEFINE_ENTRY(LPALCGETCURRENTCONTEXT, alcGetCurrentContext)
|
||||||
|
DEFINE_ENTRY(LPALCGETCONTEXTSDEVICE, alcGetContextsDevice)
|
||||||
|
DEFINE_ENTRY(LPALCOPENDEVICE, alcOpenDevice)
|
||||||
|
DEFINE_ENTRY(LPALCCLOSEDEVICE, alcCloseDevice)
|
||||||
|
DEFINE_ENTRY(LPALCGETERROR, alcGetError)
|
||||||
|
DEFINE_ENTRY(LPALCISEXTENSIONPRESENT, alcIsExtensionPresent)
|
||||||
|
DEFINE_ENTRY(LPALCGETPROCADDRESS, alcGetProcAddress)
|
||||||
|
DEFINE_ENTRY(LPALCGETENUMVALUE, alcGetEnumValue)
|
||||||
|
DEFINE_ENTRY(LPALCGETSTRING, alcGetString)
|
||||||
|
DEFINE_ENTRY(LPALCGETINTEGERV, alcGetIntegerv)
|
||||||
|
DEFINE_ENTRY(LPALCCAPTUREOPENDEVICE, alcCaptureOpenDevice)
|
||||||
|
DEFINE_ENTRY(LPALCCAPTURECLOSEDEVICE, alcCaptureCloseDevice)
|
||||||
|
DEFINE_ENTRY(LPALCCAPTURESTART, alcCaptureStart)
|
||||||
|
DEFINE_ENTRY(LPALCCAPTURESTOP, alcCaptureStop)
|
||||||
|
DEFINE_ENTRY(LPALCCAPTURESAMPLES, alcCaptureSamples)
|
||||||
|
#undef DEFINE_ENTRY
|
||||||
|
|
||||||
|
#ifndef IN_IDE_PARSER
|
||||||
|
#define alEnable p_alEnable
|
||||||
|
#define alDisable p_alDisable
|
||||||
|
#define alIsEnabled p_alIsEnabled
|
||||||
|
#define alGetString p_alGetString
|
||||||
|
#define alGetBooleanv p_alGetBooleanv
|
||||||
|
#define alGetIntegerv p_alGetIntegerv
|
||||||
|
#define alGetFloatv p_alGetFloatv
|
||||||
|
#define alGetDoublev p_alGetDoublev
|
||||||
|
#define alGetBoolean p_alGetBoolean
|
||||||
|
#define alGetInteger p_alGetInteger
|
||||||
|
#define alGetFloat p_alGetFloat
|
||||||
|
#define alGetDouble p_alGetDouble
|
||||||
|
#define alGetError p_alGetError
|
||||||
|
#define alIsExtensionPresent p_alIsExtensionPresent
|
||||||
|
#define alGetProcAddress p_alGetProcAddress
|
||||||
|
#define alGetEnumValue p_alGetEnumValue
|
||||||
|
#define alListenerf p_alListenerf
|
||||||
|
#define alListener3f p_alListener3f
|
||||||
|
#define alListenerfv p_alListenerfv
|
||||||
|
#define alListeneri p_alListeneri
|
||||||
|
#define alListener3i p_alListener3i
|
||||||
|
#define alListeneriv p_alListeneriv
|
||||||
|
#define alGetListenerf p_alGetListenerf
|
||||||
|
#define alGetListener3f p_alGetListener3f
|
||||||
|
#define alGetListenerfv p_alGetListenerfv
|
||||||
|
#define alGetListeneri p_alGetListeneri
|
||||||
|
#define alGetListener3i p_alGetListener3i
|
||||||
|
#define alGetListeneriv p_alGetListeneriv
|
||||||
|
#define alGenSources p_alGenSources
|
||||||
|
#define alDeleteSources p_alDeleteSources
|
||||||
|
#define alIsSource p_alIsSource
|
||||||
|
#define alSourcef p_alSourcef
|
||||||
|
#define alSource3f p_alSource3f
|
||||||
|
#define alSourcefv p_alSourcefv
|
||||||
|
#define alSourcei p_alSourcei
|
||||||
|
#define alSource3i p_alSource3i
|
||||||
|
#define alSourceiv p_alSourceiv
|
||||||
|
#define alGetSourcef p_alGetSourcef
|
||||||
|
#define alGetSource3f p_alGetSource3f
|
||||||
|
#define alGetSourcefv p_alGetSourcefv
|
||||||
|
#define alGetSourcei p_alGetSourcei
|
||||||
|
#define alGetSource3i p_alGetSource3i
|
||||||
|
#define alGetSourceiv p_alGetSourceiv
|
||||||
|
#define alSourcePlayv p_alSourcePlayv
|
||||||
|
#define alSourceStopv p_alSourceStopv
|
||||||
|
#define alSourceRewindv p_alSourceRewindv
|
||||||
|
#define alSourcePausev p_alSourcePausev
|
||||||
|
#define alSourcePlay p_alSourcePlay
|
||||||
|
#define alSourceStop p_alSourceStop
|
||||||
|
#define alSourceRewind p_alSourceRewind
|
||||||
|
#define alSourcePause p_alSourcePause
|
||||||
|
#define alSourceQueueBuffers p_alSourceQueueBuffers
|
||||||
|
#define alSourceUnqueueBuffers p_alSourceUnqueueBuffers
|
||||||
|
#define alGenBuffers p_alGenBuffers
|
||||||
|
#define alDeleteBuffers p_alDeleteBuffers
|
||||||
|
#define alIsBuffer p_alIsBuffer
|
||||||
|
#define alBufferData p_alBufferData
|
||||||
|
#define alBufferf p_alBufferf
|
||||||
|
#define alBuffer3f p_alBuffer3f
|
||||||
|
#define alBufferfv p_alBufferfv
|
||||||
|
#define alBufferi p_alBufferi
|
||||||
|
#define alBuffer3i p_alBuffer3i
|
||||||
|
#define alBufferiv p_alBufferiv
|
||||||
|
#define alGetBufferf p_alGetBufferf
|
||||||
|
#define alGetBuffer3f p_alGetBuffer3f
|
||||||
|
#define alGetBufferfv p_alGetBufferfv
|
||||||
|
#define alGetBufferi p_alGetBufferi
|
||||||
|
#define alGetBuffer3i p_alGetBuffer3i
|
||||||
|
#define alGetBufferiv p_alGetBufferiv
|
||||||
|
#define alDopplerFactor p_alDopplerFactor
|
||||||
|
#define alDopplerVelocity p_alDopplerVelocity
|
||||||
|
#define alSpeedOfSound p_alSpeedOfSound
|
||||||
|
#define alDistanceModel p_alDistanceModel
|
||||||
|
#define alcCreateContext p_alcCreateContext
|
||||||
|
#define alcMakeContextCurrent p_alcMakeContextCurrent
|
||||||
|
#define alcProcessContext p_alcProcessContext
|
||||||
|
#define alcSuspendContext p_alcSuspendContext
|
||||||
|
#define alcDestroyContext p_alcDestroyContext
|
||||||
|
#define alcGetCurrentContext p_alcGetCurrentContext
|
||||||
|
#define alcGetContextsDevice p_alcGetContextsDevice
|
||||||
|
#define alcOpenDevice p_alcOpenDevice
|
||||||
|
#define alcCloseDevice p_alcCloseDevice
|
||||||
|
#define alcGetError p_alcGetError
|
||||||
|
#define alcIsExtensionPresent p_alcIsExtensionPresent
|
||||||
|
#define alcGetProcAddress p_alcGetProcAddress
|
||||||
|
#define alcGetEnumValue p_alcGetEnumValue
|
||||||
|
#define alcGetString p_alcGetString
|
||||||
|
#define alcGetIntegerv p_alcGetIntegerv
|
||||||
|
#define alcCaptureOpenDevice p_alcCaptureOpenDevice
|
||||||
|
#define alcCaptureCloseDevice p_alcCaptureCloseDevice
|
||||||
|
#define alcCaptureStart p_alcCaptureStart
|
||||||
|
#define alcCaptureStop p_alcCaptureStop
|
||||||
|
#define alcCaptureSamples p_alcCaptureSamples
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
2411
source/common/music/backend/oalsound.cpp
Normal file
2411
source/common/music/backend/oalsound.cpp
Normal file
File diff suppressed because it is too large
Load diff
294
source/common/music/backend/oalsound.h
Normal file
294
source/common/music/backend/oalsound.h
Normal file
|
@ -0,0 +1,294 @@
|
||||||
|
#ifndef OALSOUND_H
|
||||||
|
#define OALSOUND_H
|
||||||
|
|
||||||
|
#include <thread>
|
||||||
|
#include <mutex>
|
||||||
|
#include <atomic>
|
||||||
|
#include <condition_variable>
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
|
#include "i_sound.h"
|
||||||
|
//#include "s_sound.h"
|
||||||
|
|
||||||
|
#ifndef NO_OPENAL
|
||||||
|
|
||||||
|
#ifdef DYN_OPENAL
|
||||||
|
#define AL_NO_PROTOTYPES
|
||||||
|
#include "thirdparty/al.h"
|
||||||
|
#include "thirdparty/alc.h"
|
||||||
|
#else
|
||||||
|
#include "al.h"
|
||||||
|
#include "alc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "efx.h"
|
||||||
|
|
||||||
|
#ifndef ALC_ENUMERATE_ALL_EXT
|
||||||
|
#define ALC_ENUMERATE_ALL_EXT 1
|
||||||
|
#define ALC_DEFAULT_ALL_DEVICES_SPECIFIER 0x1012
|
||||||
|
#define ALC_ALL_DEVICES_SPECIFIER 0x1013
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_EXT_disconnect
|
||||||
|
#define ALC_EXT_disconnect 1
|
||||||
|
#define ALC_CONNECTED 0x313
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_SOFT_HRTF
|
||||||
|
#define ALC_SOFT_HRTF 1
|
||||||
|
#define ALC_HRTF_SOFT 0x1992
|
||||||
|
#define ALC_DONT_CARE_SOFT 0x0002
|
||||||
|
#define ALC_HRTF_STATUS_SOFT 0x1993
|
||||||
|
#define ALC_HRTF_DISABLED_SOFT 0x0000
|
||||||
|
#define ALC_HRTF_ENABLED_SOFT 0x0001
|
||||||
|
#define ALC_HRTF_DENIED_SOFT 0x0002
|
||||||
|
#define ALC_HRTF_REQUIRED_SOFT 0x0003
|
||||||
|
#define ALC_HRTF_HEADPHONES_DETECTED_SOFT 0x0004
|
||||||
|
#define ALC_HRTF_UNSUPPORTED_FORMAT_SOFT 0x0005
|
||||||
|
#define ALC_NUM_HRTF_SPECIFIERS_SOFT 0x1994
|
||||||
|
#define ALC_HRTF_SPECIFIER_SOFT 0x1995
|
||||||
|
#define ALC_HRTF_ID_SOFT 0x1996
|
||||||
|
typedef const ALCchar* (ALC_APIENTRY*LPALCGETSTRINGISOFT)(ALCdevice *device, ALCenum paramName, ALCsizei index);
|
||||||
|
typedef ALCboolean (ALC_APIENTRY*LPALCRESETDEVICESOFT)(ALCdevice *device, const ALCint *attribs);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
ALC_API const ALCchar* ALC_APIENTRY alcGetStringiSOFT(ALCdevice *device, ALCenum paramName, ALCsizei index);
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcResetDeviceSOFT(ALCdevice *device, const ALCint *attribs);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_source_distance_model
|
||||||
|
#define AL_EXT_source_distance_model 1
|
||||||
|
#define AL_SOURCE_DISTANCE_MODEL 0x200
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_loop_points
|
||||||
|
#define AL_SOFT_loop_points 1
|
||||||
|
#define AL_LOOP_POINTS_SOFT 0x2015
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_float32
|
||||||
|
#define AL_EXT_float32 1
|
||||||
|
#define AL_FORMAT_MONO_FLOAT32 0x10010
|
||||||
|
#define AL_FORMAT_STEREO_FLOAT32 0x10011
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_MCFORMATS
|
||||||
|
#define AL_EXT_MCFORMATS 1
|
||||||
|
#define AL_FORMAT_QUAD8 0x1204
|
||||||
|
#define AL_FORMAT_QUAD16 0x1205
|
||||||
|
#define AL_FORMAT_QUAD32 0x1206
|
||||||
|
#define AL_FORMAT_REAR8 0x1207
|
||||||
|
#define AL_FORMAT_REAR16 0x1208
|
||||||
|
#define AL_FORMAT_REAR32 0x1209
|
||||||
|
#define AL_FORMAT_51CHN8 0x120A
|
||||||
|
#define AL_FORMAT_51CHN16 0x120B
|
||||||
|
#define AL_FORMAT_51CHN32 0x120C
|
||||||
|
#define AL_FORMAT_61CHN8 0x120D
|
||||||
|
#define AL_FORMAT_61CHN16 0x120E
|
||||||
|
#define AL_FORMAT_61CHN32 0x120F
|
||||||
|
#define AL_FORMAT_71CHN8 0x1210
|
||||||
|
#define AL_FORMAT_71CHN16 0x1211
|
||||||
|
#define AL_FORMAT_71CHN32 0x1212
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_SOURCE_RADIUS
|
||||||
|
#define AL_EXT_SOURCE_RADIUS 1
|
||||||
|
#define AL_SOURCE_RADIUS 0x1031
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_source_resampler
|
||||||
|
#define AL_SOFT_source_resampler 1
|
||||||
|
#define AL_NUM_RESAMPLERS_SOFT 0x1210
|
||||||
|
#define AL_DEFAULT_RESAMPLER_SOFT 0x1211
|
||||||
|
#define AL_SOURCE_RESAMPLER_SOFT 0x1212
|
||||||
|
#define AL_RESAMPLER_NAME_SOFT 0x1213
|
||||||
|
typedef const ALchar* (AL_APIENTRY*LPALGETSTRINGISOFT)(ALenum pname, ALsizei index);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API const ALchar* AL_APIENTRY alGetStringiSOFT(ALenum pname, ALsizei index);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_source_spatialize
|
||||||
|
#define AL_SOFT_source_spatialize
|
||||||
|
#define AL_SOURCE_SPATIALIZE_SOFT 0x1214
|
||||||
|
#define AL_AUTO_SOFT 0x0002
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
class OpenALSoundStream;
|
||||||
|
|
||||||
|
class OpenALSoundRenderer : public SoundRenderer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
OpenALSoundRenderer();
|
||||||
|
virtual ~OpenALSoundRenderer();
|
||||||
|
|
||||||
|
virtual void SetSfxVolume(float volume);
|
||||||
|
virtual void SetMusicVolume(float volume);
|
||||||
|
virtual std::pair<SoundHandle, bool> LoadSound(uint8_t *sfxdata, int length, bool monoize, FSoundLoadBuffer *buffer);
|
||||||
|
virtual std::pair<SoundHandle,bool> LoadSoundBuffered(FSoundLoadBuffer *buffer, bool monoize);
|
||||||
|
virtual std::pair<SoundHandle,bool> LoadSoundRaw(uint8_t *sfxdata, int length, int frequency, int channels, int bits, int loopstart, int loopend = -1, bool monoize = false);
|
||||||
|
virtual void UnloadSound(SoundHandle sfx);
|
||||||
|
virtual unsigned int GetMSLength(SoundHandle sfx);
|
||||||
|
virtual unsigned int GetSampleLength(SoundHandle sfx);
|
||||||
|
virtual float GetOutputRate();
|
||||||
|
|
||||||
|
// Streaming sounds.
|
||||||
|
virtual SoundStream *CreateStream(SoundStreamCallback callback, int buffbytes, int flags, int samplerate, void *userdata);
|
||||||
|
|
||||||
|
// Starts a sound.
|
||||||
|
virtual FISoundChannel *StartSound(SoundHandle sfx, float vol, int pitch, int chanflags, FISoundChannel *reuse_chan);
|
||||||
|
virtual FISoundChannel *StartSound3D(SoundHandle sfx, SoundListener *listener, float vol, FRolloffInfo *rolloff, float distscale, int pitch, int priority, const FVector3 &pos, const FVector3 &vel, int channum, int chanflags, FISoundChannel *reuse_chan);
|
||||||
|
|
||||||
|
// Changes a channel's volume.
|
||||||
|
virtual void ChannelVolume(FISoundChannel *chan, float volume);
|
||||||
|
|
||||||
|
// Changes a channel's pitch.
|
||||||
|
virtual void ChannelPitch(FISoundChannel *chan, float pitch);
|
||||||
|
|
||||||
|
// Stops a sound channel.
|
||||||
|
virtual void StopChannel(FISoundChannel *chan);
|
||||||
|
|
||||||
|
// Returns position of sound on this channel, in samples.
|
||||||
|
virtual unsigned int GetPosition(FISoundChannel *chan);
|
||||||
|
|
||||||
|
// Synchronizes following sound startups.
|
||||||
|
virtual void Sync(bool sync);
|
||||||
|
|
||||||
|
// Pauses or resumes all sound effect channels.
|
||||||
|
virtual void SetSfxPaused(bool paused, int slot);
|
||||||
|
|
||||||
|
// Pauses or resumes *every* channel, including environmental reverb.
|
||||||
|
virtual void SetInactive(SoundRenderer::EInactiveState inactive);
|
||||||
|
|
||||||
|
// Updates the volume, separation, and pitch of a sound channel.
|
||||||
|
virtual void UpdateSoundParams3D(SoundListener *listener, FISoundChannel *chan, bool areasound, const FVector3 &pos, const FVector3 &vel);
|
||||||
|
|
||||||
|
virtual void UpdateListener(SoundListener *);
|
||||||
|
virtual void UpdateSounds();
|
||||||
|
|
||||||
|
virtual void MarkStartTime(FISoundChannel*);
|
||||||
|
virtual float GetAudibility(FISoundChannel*);
|
||||||
|
|
||||||
|
|
||||||
|
virtual bool IsValid();
|
||||||
|
virtual void PrintStatus();
|
||||||
|
virtual void PrintDriversList();
|
||||||
|
virtual FString GatherStats();
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct {
|
||||||
|
bool EXT_EFX;
|
||||||
|
bool EXT_disconnect;
|
||||||
|
bool SOFT_HRTF;
|
||||||
|
bool SOFT_pause_device;
|
||||||
|
} ALC;
|
||||||
|
struct {
|
||||||
|
bool EXT_source_distance_model;
|
||||||
|
bool EXT_SOURCE_RADIUS;
|
||||||
|
bool SOFT_deferred_updates;
|
||||||
|
bool SOFT_loop_points;
|
||||||
|
bool SOFT_source_resampler;
|
||||||
|
bool SOFT_source_spatialize;
|
||||||
|
} AL;
|
||||||
|
|
||||||
|
// EFX Extension function pointer variables. Loaded after context creation
|
||||||
|
// if EFX is supported. These pointers may be context- or device-dependant,
|
||||||
|
// thus can't be static
|
||||||
|
// Effect objects
|
||||||
|
LPALGENEFFECTS alGenEffects;
|
||||||
|
LPALDELETEEFFECTS alDeleteEffects;
|
||||||
|
LPALISEFFECT alIsEffect;
|
||||||
|
LPALEFFECTI alEffecti;
|
||||||
|
LPALEFFECTIV alEffectiv;
|
||||||
|
LPALEFFECTF alEffectf;
|
||||||
|
LPALEFFECTFV alEffectfv;
|
||||||
|
LPALGETEFFECTI alGetEffecti;
|
||||||
|
LPALGETEFFECTIV alGetEffectiv;
|
||||||
|
LPALGETEFFECTF alGetEffectf;
|
||||||
|
LPALGETEFFECTFV alGetEffectfv;
|
||||||
|
// Filter objects
|
||||||
|
LPALGENFILTERS alGenFilters;
|
||||||
|
LPALDELETEFILTERS alDeleteFilters;
|
||||||
|
LPALISFILTER alIsFilter;
|
||||||
|
LPALFILTERI alFilteri;
|
||||||
|
LPALFILTERIV alFilteriv;
|
||||||
|
LPALFILTERF alFilterf;
|
||||||
|
LPALFILTERFV alFilterfv;
|
||||||
|
LPALGETFILTERI alGetFilteri;
|
||||||
|
LPALGETFILTERIV alGetFilteriv;
|
||||||
|
LPALGETFILTERF alGetFilterf;
|
||||||
|
LPALGETFILTERFV alGetFilterfv;
|
||||||
|
// Auxiliary slot objects
|
||||||
|
LPALGENAUXILIARYEFFECTSLOTS alGenAuxiliaryEffectSlots;
|
||||||
|
LPALDELETEAUXILIARYEFFECTSLOTS alDeleteAuxiliaryEffectSlots;
|
||||||
|
LPALISAUXILIARYEFFECTSLOT alIsAuxiliaryEffectSlot;
|
||||||
|
LPALAUXILIARYEFFECTSLOTI alAuxiliaryEffectSloti;
|
||||||
|
LPALAUXILIARYEFFECTSLOTIV alAuxiliaryEffectSlotiv;
|
||||||
|
LPALAUXILIARYEFFECTSLOTF alAuxiliaryEffectSlotf;
|
||||||
|
LPALAUXILIARYEFFECTSLOTFV alAuxiliaryEffectSlotfv;
|
||||||
|
LPALGETAUXILIARYEFFECTSLOTI alGetAuxiliaryEffectSloti;
|
||||||
|
LPALGETAUXILIARYEFFECTSLOTIV alGetAuxiliaryEffectSlotiv;
|
||||||
|
LPALGETAUXILIARYEFFECTSLOTF alGetAuxiliaryEffectSlotf;
|
||||||
|
LPALGETAUXILIARYEFFECTSLOTFV alGetAuxiliaryEffectSlotfv;
|
||||||
|
|
||||||
|
ALvoid (AL_APIENTRY*alDeferUpdatesSOFT)(void);
|
||||||
|
ALvoid (AL_APIENTRY*alProcessUpdatesSOFT)(void);
|
||||||
|
|
||||||
|
LPALGETSTRINGISOFT alGetStringiSOFT;
|
||||||
|
|
||||||
|
void (ALC_APIENTRY*alcDevicePauseSOFT)(ALCdevice *device);
|
||||||
|
void (ALC_APIENTRY*alcDeviceResumeSOFT)(ALCdevice *device);
|
||||||
|
|
||||||
|
void BackgroundProc();
|
||||||
|
void AddStream(OpenALSoundStream *stream);
|
||||||
|
void RemoveStream(OpenALSoundStream *stream);
|
||||||
|
|
||||||
|
void LoadReverb(const ReverbContainer *env);
|
||||||
|
void FreeSource(ALuint source);
|
||||||
|
void PurgeStoppedSources();
|
||||||
|
static FSoundChan *FindLowestChannel();
|
||||||
|
void ForceStopChannel(FISoundChannel *chan);
|
||||||
|
|
||||||
|
std::thread StreamThread;
|
||||||
|
std::mutex StreamLock;
|
||||||
|
std::condition_variable StreamWake;
|
||||||
|
std::atomic<bool> QuitThread;
|
||||||
|
|
||||||
|
ALCdevice *Device;
|
||||||
|
ALCcontext *Context;
|
||||||
|
|
||||||
|
TArray<ALuint> Sources;
|
||||||
|
|
||||||
|
ALfloat SfxVolume;
|
||||||
|
ALfloat MusicVolume;
|
||||||
|
|
||||||
|
int SFXPaused;
|
||||||
|
TArray<ALuint> FreeSfx;
|
||||||
|
TArray<ALuint> PausableSfx;
|
||||||
|
TArray<ALuint> ReverbSfx;
|
||||||
|
TArray<ALuint> SfxGroup;
|
||||||
|
|
||||||
|
int UpdateTimeMS;
|
||||||
|
using SourceTimeMap = std::unordered_map<ALuint,int64_t>;
|
||||||
|
SourceTimeMap FadingSources;
|
||||||
|
|
||||||
|
const ReverbContainer *PrevEnvironment;
|
||||||
|
|
||||||
|
typedef TMap<uint16_t,ALuint> EffectMap;
|
||||||
|
typedef TMapIterator<uint16_t,ALuint> EffectMapIter;
|
||||||
|
ALuint EnvSlot;
|
||||||
|
ALuint EnvFilters[2];
|
||||||
|
EffectMap EnvEffects;
|
||||||
|
|
||||||
|
bool WasInWater;
|
||||||
|
|
||||||
|
TArray<OpenALSoundStream*> Streams;
|
||||||
|
friend class OpenALSoundStream;
|
||||||
|
|
||||||
|
ALCdevice *InitDevice();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // NO_OPENAL
|
||||||
|
|
||||||
|
#endif
|
|
@ -52,6 +52,7 @@
|
||||||
#include "s_music.h"
|
#include "s_music.h"
|
||||||
#include "printf.h"
|
#include "printf.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
#include "backend/i_sound.h"
|
||||||
#include "zmusic/zmusic.h"
|
#include "zmusic/zmusic.h"
|
||||||
#include "streamsources/streamsource.h"
|
#include "streamsources/streamsource.h"
|
||||||
#include "filereadermusicinterface.h"
|
#include "filereadermusicinterface.h"
|
||||||
|
@ -121,8 +122,10 @@ CUSTOM_CVARD(Int, mus_volume, 255, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "controls mus
|
||||||
{
|
{
|
||||||
// Set general music volume.
|
// Set general music volume.
|
||||||
ChangeMusicSetting(ZMusic::snd_musicvolume, nullptr, self / 255.f);
|
ChangeMusicSetting(ZMusic::snd_musicvolume, nullptr, self / 255.f);
|
||||||
S_SetStreamVolume(clamp<float>(self * relative_volume, 0, 1));
|
if (GSnd != nullptr)
|
||||||
|
{
|
||||||
|
GSnd->SetMusicVolume(clamp<float>(self / 255.f * relative_volume/* * snd_mastervolume*/, 0, 1));
|
||||||
|
}
|
||||||
// For music not implemented through the digital sound system,
|
// For music not implemented through the digital sound system,
|
||||||
// let them know about the change.
|
// let them know about the change.
|
||||||
if (mus_playing.handle != nullptr)
|
if (mus_playing.handle != nullptr)
|
||||||
|
@ -236,6 +239,7 @@ static void SetupGenMidi()
|
||||||
|
|
||||||
void Mus_Init(void)
|
void Mus_Init(void)
|
||||||
{
|
{
|
||||||
|
I_InitSound();
|
||||||
I_InitSoundFonts();
|
I_InitSoundFonts();
|
||||||
|
|
||||||
mus_volume.Callback ();
|
mus_volume.Callback ();
|
||||||
|
|
|
@ -56,6 +56,7 @@
|
||||||
#include "zmusic/zmusic.h"
|
#include "zmusic/zmusic.h"
|
||||||
#include "z_music.h"
|
#include "z_music.h"
|
||||||
#include "zstring.h"
|
#include "zstring.h"
|
||||||
|
#include "backend/i_sound.h"
|
||||||
#include "name.h"
|
#include "name.h"
|
||||||
#include "s_music.h"
|
#include "s_music.h"
|
||||||
#include "i_music.h"
|
#include "i_music.h"
|
||||||
|
@ -73,6 +74,55 @@ MusicAliasMap MusicAliases;
|
||||||
MidiDeviceMap MidiDevices;
|
MidiDeviceMap MidiDevices;
|
||||||
MusicVolumeMap MusicVolumes;
|
MusicVolumeMap MusicVolumes;
|
||||||
bool MusicPaused;
|
bool MusicPaused;
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Create a sound system stream for the currently playing song
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
static std::unique_ptr<SoundStream> musicStream;
|
||||||
|
|
||||||
|
static bool FillStream(SoundStream* stream, void* buff, int len, void* userdata)
|
||||||
|
{
|
||||||
|
bool written = ZMusic_FillStream(mus_playing.handle, buff, len);
|
||||||
|
|
||||||
|
if (!written)
|
||||||
|
{
|
||||||
|
memset((char*)buff, 0, len);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void S_CreateStream()
|
||||||
|
{
|
||||||
|
if (!mus_playing.handle) return;
|
||||||
|
auto fmt = ZMusic_GetStreamInfo(mus_playing.handle);
|
||||||
|
if (fmt.mBufferSize > 0)
|
||||||
|
{
|
||||||
|
int flags = fmt.mNumChannels < 0 ? 0 : SoundStream::Float;
|
||||||
|
if (abs(fmt.mNumChannels) < 2) flags |= SoundStream::Mono;
|
||||||
|
|
||||||
|
musicStream.reset(GSnd->CreateStream(FillStream, fmt.mBufferSize, flags, fmt.mSampleRate, nullptr));
|
||||||
|
if (musicStream) musicStream->Play(true, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void S_PauseStream(bool paused)
|
||||||
|
{
|
||||||
|
if (musicStream) musicStream->SetPaused(paused);
|
||||||
|
}
|
||||||
|
|
||||||
|
void S_StopStream()
|
||||||
|
{
|
||||||
|
if (musicStream)
|
||||||
|
{
|
||||||
|
musicStream->Stop();
|
||||||
|
musicStream.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -1,139 +0,0 @@
|
||||||
|
|
||||||
#include "compat.h"
|
|
||||||
|
|
||||||
#include "../../audiolib/src/_multivc.h"
|
|
||||||
#include "multivoc.h"
|
|
||||||
#include "../../audiolib/src/pitch.h"
|
|
||||||
#include "pragmas.h"
|
|
||||||
#include "zmusic/zmusic.h"
|
|
||||||
#include "s_music.h"
|
|
||||||
#include "templates.h"
|
|
||||||
#include "fx_man.h"
|
|
||||||
#include "gamecvars.h"
|
|
||||||
|
|
||||||
static short buffer[2][16384];
|
|
||||||
static float readbuffer[16384];
|
|
||||||
static int whichbuffer;
|
|
||||||
static bool StreamPaused;
|
|
||||||
static int StreamHandle;
|
|
||||||
static VoiceNode* voice;
|
|
||||||
|
|
||||||
static bool FillStream(void* buff, int len)
|
|
||||||
{
|
|
||||||
if (StreamPaused)
|
|
||||||
{
|
|
||||||
memset((char*)buff, 0, len);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool written = ZMusic_FillStream(mus_playing.handle, buff, len);
|
|
||||||
|
|
||||||
if (!written)
|
|
||||||
{
|
|
||||||
memset((char*)buff, 0, len);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static playbackstatus MV_GetNextZMusicBlock(VoiceNode *voice)
|
|
||||||
{
|
|
||||||
if (!FillStream(readbuffer, 65536))
|
|
||||||
return NoMoreData;
|
|
||||||
|
|
||||||
for (int i = 0; i <16384; i++)
|
|
||||||
{
|
|
||||||
buffer[whichbuffer][i] = (short)clamp(readbuffer[i]*32767., -32768., 32767.);
|
|
||||||
}
|
|
||||||
|
|
||||||
voice->sound = (const char*)buffer[whichbuffer];
|
|
||||||
voice->length = 16384 << 16;
|
|
||||||
voice->position = 0;
|
|
||||||
voice->BlockLength = 0;
|
|
||||||
whichbuffer ^= 1;
|
|
||||||
|
|
||||||
MV_SetVoiceMixMode(voice);
|
|
||||||
|
|
||||||
return KeepPlaying;
|
|
||||||
}
|
|
||||||
|
|
||||||
void S_CreateStream()
|
|
||||||
{
|
|
||||||
if (!MV_Installed)
|
|
||||||
return;// MV_SetErrorCode(MV_NotInstalled);
|
|
||||||
|
|
||||||
// Request a voice from the voice pool
|
|
||||||
voice = MV_AllocVoice(FX_MUSIC_PRIORITY);
|
|
||||||
if (voice == nullptr)
|
|
||||||
{
|
|
||||||
return;// MV_SetErrorCode(MV_NoVoices);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto si = ZMusic_GetStreamInfo(mus_playing.handle);
|
|
||||||
|
|
||||||
voice->length = 0;
|
|
||||||
voice->sound = 0;
|
|
||||||
|
|
||||||
voice->wavetype = FMT_ZMUSIC;
|
|
||||||
voice->rawdataptr = nullptr;
|
|
||||||
voice->GetSound = MV_GetNextZMusicBlock;
|
|
||||||
voice->LoopCount = 0;
|
|
||||||
voice->BlockLength = 0;
|
|
||||||
voice->PitchScale = PITCH_GetScale(0);
|
|
||||||
voice->next = nullptr;
|
|
||||||
voice->prev = nullptr;
|
|
||||||
voice->priority = FX_MUSIC_PRIORITY;
|
|
||||||
voice->callbackval = 0;
|
|
||||||
|
|
||||||
voice->bits = 16;
|
|
||||||
voice->channels = si.mNumChannels;
|
|
||||||
voice->SamplingRate = si.mSampleRate;
|
|
||||||
|
|
||||||
voice->Paused = FALSE;
|
|
||||||
|
|
||||||
voice->LoopStart = 0;
|
|
||||||
voice->LoopEnd = 0;
|
|
||||||
voice->LoopSize = 1;
|
|
||||||
|
|
||||||
// CODEDUP multivoc.c MV_SetVoicePitch
|
|
||||||
voice->RateScale = divideu32(voice->SamplingRate * voice->PitchScale, MV_MixRate);
|
|
||||||
voice->FixedPointBufferSize = (voice->RateScale * MV_MIXBUFFERSIZE) - voice->RateScale;
|
|
||||||
MV_SetVoiceMixMode(voice);
|
|
||||||
|
|
||||||
mus_volume.Callback();
|
|
||||||
MV_PlayVoice(voice);
|
|
||||||
|
|
||||||
return;// voice->handle;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MV_ReleaseZMusicVoice(VoiceNode * voice)
|
|
||||||
{
|
|
||||||
if (voice->wavetype != FMT_ZMUSIC)
|
|
||||||
return;
|
|
||||||
|
|
||||||
voice->rawdataptr = 0;
|
|
||||||
voice->length = 0;
|
|
||||||
voice->sound = nullptr;
|
|
||||||
StreamHandle = 0;
|
|
||||||
::voice = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void S_PauseStream(bool pause)
|
|
||||||
{
|
|
||||||
StreamPaused = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void S_StopStream()
|
|
||||||
{
|
|
||||||
if (StreamHandle > 0)
|
|
||||||
FX_StopSound(StreamHandle);
|
|
||||||
StreamHandle = 0;
|
|
||||||
voice = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void S_SetStreamVolume(float vol)
|
|
||||||
{
|
|
||||||
if (voice)
|
|
||||||
MV_SetVoiceVolume(voice, int(vol * 255), int(vol * 255), int(vol * 255), 1);
|
|
||||||
}
|
|
656
source/common/music/thirdparty/al.h
vendored
Normal file
656
source/common/music/thirdparty/al.h
vendored
Normal file
|
@ -0,0 +1,656 @@
|
||||||
|
#ifndef AL_AL_H
|
||||||
|
#define AL_AL_H
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_API
|
||||||
|
#if defined(AL_LIBTYPE_STATIC)
|
||||||
|
#define AL_API
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
#define AL_API __declspec(dllimport)
|
||||||
|
#else
|
||||||
|
#define AL_API extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define AL_APIENTRY __cdecl
|
||||||
|
#else
|
||||||
|
#define AL_APIENTRY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/** Deprecated macro. */
|
||||||
|
#define OPENAL
|
||||||
|
#define ALAPI AL_API
|
||||||
|
#define ALAPIENTRY AL_APIENTRY
|
||||||
|
#define AL_INVALID (-1)
|
||||||
|
#define AL_ILLEGAL_ENUM AL_INVALID_ENUM
|
||||||
|
#define AL_ILLEGAL_COMMAND AL_INVALID_OPERATION
|
||||||
|
|
||||||
|
/** Supported AL version. */
|
||||||
|
#define AL_VERSION_1_0
|
||||||
|
#define AL_VERSION_1_1
|
||||||
|
|
||||||
|
/** 8-bit boolean */
|
||||||
|
typedef char ALboolean;
|
||||||
|
|
||||||
|
/** character */
|
||||||
|
typedef char ALchar;
|
||||||
|
|
||||||
|
/** signed 8-bit 2's complement integer */
|
||||||
|
typedef signed char ALbyte;
|
||||||
|
|
||||||
|
/** unsigned 8-bit integer */
|
||||||
|
typedef unsigned char ALubyte;
|
||||||
|
|
||||||
|
/** signed 16-bit 2's complement integer */
|
||||||
|
typedef short ALshort;
|
||||||
|
|
||||||
|
/** unsigned 16-bit integer */
|
||||||
|
typedef unsigned short ALushort;
|
||||||
|
|
||||||
|
/** signed 32-bit 2's complement integer */
|
||||||
|
typedef int ALint;
|
||||||
|
|
||||||
|
/** unsigned 32-bit integer */
|
||||||
|
typedef unsigned int ALuint;
|
||||||
|
|
||||||
|
/** non-negative 32-bit binary integer size */
|
||||||
|
typedef int ALsizei;
|
||||||
|
|
||||||
|
/** enumerated 32-bit value */
|
||||||
|
typedef int ALenum;
|
||||||
|
|
||||||
|
/** 32-bit IEEE754 floating-point */
|
||||||
|
typedef float ALfloat;
|
||||||
|
|
||||||
|
/** 64-bit IEEE754 floating-point */
|
||||||
|
typedef double ALdouble;
|
||||||
|
|
||||||
|
/** void type (for opaque pointers only) */
|
||||||
|
typedef void ALvoid;
|
||||||
|
|
||||||
|
|
||||||
|
/* Enumerant values begin at column 50. No tabs. */
|
||||||
|
|
||||||
|
/** "no distance model" or "no buffer" */
|
||||||
|
#define AL_NONE 0
|
||||||
|
|
||||||
|
/** Boolean False. */
|
||||||
|
#define AL_FALSE 0
|
||||||
|
|
||||||
|
/** Boolean True. */
|
||||||
|
#define AL_TRUE 1
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Relative source.
|
||||||
|
* Type: ALboolean
|
||||||
|
* Range: [AL_TRUE, AL_FALSE]
|
||||||
|
* Default: AL_FALSE
|
||||||
|
*
|
||||||
|
* Specifies if the Source has relative coordinates.
|
||||||
|
*/
|
||||||
|
#define AL_SOURCE_RELATIVE 0x202
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inner cone angle, in degrees.
|
||||||
|
* Type: ALint, ALfloat
|
||||||
|
* Range: [0 - 360]
|
||||||
|
* Default: 360
|
||||||
|
*
|
||||||
|
* The angle covered by the inner cone, where the source will not attenuate.
|
||||||
|
*/
|
||||||
|
#define AL_CONE_INNER_ANGLE 0x1001
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Outer cone angle, in degrees.
|
||||||
|
* Range: [0 - 360]
|
||||||
|
* Default: 360
|
||||||
|
*
|
||||||
|
* The angle covered by the outer cone, where the source will be fully
|
||||||
|
* attenuated.
|
||||||
|
*/
|
||||||
|
#define AL_CONE_OUTER_ANGLE 0x1002
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source pitch.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.5 - 2.0]
|
||||||
|
* Default: 1.0
|
||||||
|
*
|
||||||
|
* A multiplier for the frequency (sample rate) of the source's buffer.
|
||||||
|
*/
|
||||||
|
#define AL_PITCH 0x1003
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source or listener position.
|
||||||
|
* Type: ALfloat[3], ALint[3]
|
||||||
|
* Default: {0, 0, 0}
|
||||||
|
*
|
||||||
|
* The source or listener location in three dimensional space.
|
||||||
|
*
|
||||||
|
* OpenAL, like OpenGL, uses a right handed coordinate system, where in a
|
||||||
|
* frontal default view X (thumb) points right, Y points up (index finger), and
|
||||||
|
* Z points towards the viewer/camera (middle finger).
|
||||||
|
*
|
||||||
|
* To switch from a left handed coordinate system, flip the sign on the Z
|
||||||
|
* coordinate.
|
||||||
|
*/
|
||||||
|
#define AL_POSITION 0x1004
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source direction.
|
||||||
|
* Type: ALfloat[3], ALint[3]
|
||||||
|
* Default: {0, 0, 0}
|
||||||
|
*
|
||||||
|
* Specifies the current direction in local space.
|
||||||
|
* A zero-length vector specifies an omni-directional source (cone is ignored).
|
||||||
|
*/
|
||||||
|
#define AL_DIRECTION 0x1005
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source or listener velocity.
|
||||||
|
* Type: ALfloat[3], ALint[3]
|
||||||
|
* Default: {0, 0, 0}
|
||||||
|
*
|
||||||
|
* Specifies the current velocity in local space.
|
||||||
|
*/
|
||||||
|
#define AL_VELOCITY 0x1006
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source looping.
|
||||||
|
* Type: ALboolean
|
||||||
|
* Range: [AL_TRUE, AL_FALSE]
|
||||||
|
* Default: AL_FALSE
|
||||||
|
*
|
||||||
|
* Specifies whether source is looping.
|
||||||
|
*/
|
||||||
|
#define AL_LOOPING 0x1007
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source buffer.
|
||||||
|
* Type: ALuint
|
||||||
|
* Range: any valid Buffer.
|
||||||
|
*
|
||||||
|
* Specifies the buffer to provide sound samples.
|
||||||
|
*/
|
||||||
|
#define AL_BUFFER 0x1009
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source or listener gain.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - ]
|
||||||
|
*
|
||||||
|
* A value of 1.0 means unattenuated. Each division by 2 equals an attenuation
|
||||||
|
* of about -6dB. Each multiplicaton by 2 equals an amplification of about
|
||||||
|
* +6dB.
|
||||||
|
*
|
||||||
|
* A value of 0.0 is meaningless with respect to a logarithmic scale; it is
|
||||||
|
* silent.
|
||||||
|
*/
|
||||||
|
#define AL_GAIN 0x100A
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Minimum source gain.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - 1.0]
|
||||||
|
*
|
||||||
|
* The minimum gain allowed for a source, after distance and cone attenation is
|
||||||
|
* applied (if applicable).
|
||||||
|
*/
|
||||||
|
#define AL_MIN_GAIN 0x100D
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maximum source gain.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - 1.0]
|
||||||
|
*
|
||||||
|
* The maximum gain allowed for a source, after distance and cone attenation is
|
||||||
|
* applied (if applicable).
|
||||||
|
*/
|
||||||
|
#define AL_MAX_GAIN 0x100E
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listener orientation.
|
||||||
|
* Type: ALfloat[6]
|
||||||
|
* Default: {0.0, 0.0, -1.0, 0.0, 1.0, 0.0}
|
||||||
|
*
|
||||||
|
* Effectively two three dimensional vectors. The first vector is the front (or
|
||||||
|
* "at") and the second is the top (or "up").
|
||||||
|
*
|
||||||
|
* Both vectors are in local space.
|
||||||
|
*/
|
||||||
|
#define AL_ORIENTATION 0x100F
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source state (query only).
|
||||||
|
* Type: ALint
|
||||||
|
* Range: [AL_INITIAL, AL_PLAYING, AL_PAUSED, AL_STOPPED]
|
||||||
|
*/
|
||||||
|
#define AL_SOURCE_STATE 0x1010
|
||||||
|
|
||||||
|
/** Source state value. */
|
||||||
|
#define AL_INITIAL 0x1011
|
||||||
|
#define AL_PLAYING 0x1012
|
||||||
|
#define AL_PAUSED 0x1013
|
||||||
|
#define AL_STOPPED 0x1014
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source Buffer Queue size (query only).
|
||||||
|
* Type: ALint
|
||||||
|
*
|
||||||
|
* The number of buffers queued using alSourceQueueBuffers, minus the buffers
|
||||||
|
* removed with alSourceUnqueueBuffers.
|
||||||
|
*/
|
||||||
|
#define AL_BUFFERS_QUEUED 0x1015
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source Buffer Queue processed count (query only).
|
||||||
|
* Type: ALint
|
||||||
|
*
|
||||||
|
* The number of queued buffers that have been fully processed, and can be
|
||||||
|
* removed with alSourceUnqueueBuffers.
|
||||||
|
*
|
||||||
|
* Looping sources will never fully process buffers because they will be set to
|
||||||
|
* play again for when the source loops.
|
||||||
|
*/
|
||||||
|
#define AL_BUFFERS_PROCESSED 0x1016
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source reference distance.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - ]
|
||||||
|
* Default: 1.0
|
||||||
|
*
|
||||||
|
* The distance in units that no attenuation occurs.
|
||||||
|
*
|
||||||
|
* At 0.0, no distance attenuation ever occurs on non-linear attenuation models.
|
||||||
|
*/
|
||||||
|
#define AL_REFERENCE_DISTANCE 0x1020
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source rolloff factor.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - ]
|
||||||
|
* Default: 1.0
|
||||||
|
*
|
||||||
|
* Multiplier to exaggerate or diminish distance attenuation.
|
||||||
|
*
|
||||||
|
* At 0.0, no distance attenuation ever occurs.
|
||||||
|
*/
|
||||||
|
#define AL_ROLLOFF_FACTOR 0x1021
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Outer cone gain.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - 1.0]
|
||||||
|
* Default: 0.0
|
||||||
|
*
|
||||||
|
* The gain attenuation applied when the listener is outside of the source's
|
||||||
|
* outer cone.
|
||||||
|
*/
|
||||||
|
#define AL_CONE_OUTER_GAIN 0x1022
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source maximum distance.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - ]
|
||||||
|
* Default: +inf
|
||||||
|
*
|
||||||
|
* The distance above which the source is not attenuated any further with a
|
||||||
|
* clamped distance model, or where attenuation reaches 0.0 gain for linear
|
||||||
|
* distance models with a default rolloff factor.
|
||||||
|
*/
|
||||||
|
#define AL_MAX_DISTANCE 0x1023
|
||||||
|
|
||||||
|
/** Source buffer position, in seconds */
|
||||||
|
#define AL_SEC_OFFSET 0x1024
|
||||||
|
/** Source buffer position, in sample frames */
|
||||||
|
#define AL_SAMPLE_OFFSET 0x1025
|
||||||
|
/** Source buffer position, in bytes */
|
||||||
|
#define AL_BYTE_OFFSET 0x1026
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source type (query only).
|
||||||
|
* Type: ALint
|
||||||
|
* Range: [AL_STATIC, AL_STREAMING, AL_UNDETERMINED]
|
||||||
|
*
|
||||||
|
* A Source is Static if a Buffer has been attached using AL_BUFFER.
|
||||||
|
*
|
||||||
|
* A Source is Streaming if one or more Buffers have been attached using
|
||||||
|
* alSourceQueueBuffers.
|
||||||
|
*
|
||||||
|
* A Source is Undetermined when it has the NULL buffer attached using
|
||||||
|
* AL_BUFFER.
|
||||||
|
*/
|
||||||
|
#define AL_SOURCE_TYPE 0x1027
|
||||||
|
|
||||||
|
/** Source type value. */
|
||||||
|
#define AL_STATIC 0x1028
|
||||||
|
#define AL_STREAMING 0x1029
|
||||||
|
#define AL_UNDETERMINED 0x1030
|
||||||
|
|
||||||
|
/** Buffer format specifier. */
|
||||||
|
#define AL_FORMAT_MONO8 0x1100
|
||||||
|
#define AL_FORMAT_MONO16 0x1101
|
||||||
|
#define AL_FORMAT_STEREO8 0x1102
|
||||||
|
#define AL_FORMAT_STEREO16 0x1103
|
||||||
|
|
||||||
|
/** Buffer frequency (query only). */
|
||||||
|
#define AL_FREQUENCY 0x2001
|
||||||
|
/** Buffer bits per sample (query only). */
|
||||||
|
#define AL_BITS 0x2002
|
||||||
|
/** Buffer channel count (query only). */
|
||||||
|
#define AL_CHANNELS 0x2003
|
||||||
|
/** Buffer data size (query only). */
|
||||||
|
#define AL_SIZE 0x2004
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Buffer state.
|
||||||
|
*
|
||||||
|
* Not for public use.
|
||||||
|
*/
|
||||||
|
#define AL_UNUSED 0x2010
|
||||||
|
#define AL_PENDING 0x2011
|
||||||
|
#define AL_PROCESSED 0x2012
|
||||||
|
|
||||||
|
|
||||||
|
/** No error. */
|
||||||
|
#define AL_NO_ERROR 0
|
||||||
|
|
||||||
|
/** Invalid name paramater passed to AL call. */
|
||||||
|
#define AL_INVALID_NAME 0xA001
|
||||||
|
|
||||||
|
/** Invalid enum parameter passed to AL call. */
|
||||||
|
#define AL_INVALID_ENUM 0xA002
|
||||||
|
|
||||||
|
/** Invalid value parameter passed to AL call. */
|
||||||
|
#define AL_INVALID_VALUE 0xA003
|
||||||
|
|
||||||
|
/** Illegal AL call. */
|
||||||
|
#define AL_INVALID_OPERATION 0xA004
|
||||||
|
|
||||||
|
/** Not enough memory. */
|
||||||
|
#define AL_OUT_OF_MEMORY 0xA005
|
||||||
|
|
||||||
|
|
||||||
|
/** Context string: Vendor ID. */
|
||||||
|
#define AL_VENDOR 0xB001
|
||||||
|
/** Context string: Version. */
|
||||||
|
#define AL_VERSION 0xB002
|
||||||
|
/** Context string: Renderer ID. */
|
||||||
|
#define AL_RENDERER 0xB003
|
||||||
|
/** Context string: Space-separated extension list. */
|
||||||
|
#define AL_EXTENSIONS 0xB004
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Doppler scale.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - ]
|
||||||
|
* Default: 1.0
|
||||||
|
*
|
||||||
|
* Scale for source and listener velocities.
|
||||||
|
*/
|
||||||
|
#define AL_DOPPLER_FACTOR 0xC000
|
||||||
|
AL_API void AL_APIENTRY alDopplerFactor(ALfloat value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Doppler velocity (deprecated).
|
||||||
|
*
|
||||||
|
* A multiplier applied to the Speed of Sound.
|
||||||
|
*/
|
||||||
|
#define AL_DOPPLER_VELOCITY 0xC001
|
||||||
|
AL_API void AL_APIENTRY alDopplerVelocity(ALfloat value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Speed of Sound, in units per second.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0001 - ]
|
||||||
|
* Default: 343.3
|
||||||
|
*
|
||||||
|
* The speed at which sound waves are assumed to travel, when calculating the
|
||||||
|
* doppler effect.
|
||||||
|
*/
|
||||||
|
#define AL_SPEED_OF_SOUND 0xC003
|
||||||
|
AL_API void AL_APIENTRY alSpeedOfSound(ALfloat value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Distance attenuation model.
|
||||||
|
* Type: ALint
|
||||||
|
* Range: [AL_NONE, AL_INVERSE_DISTANCE, AL_INVERSE_DISTANCE_CLAMPED,
|
||||||
|
* AL_LINEAR_DISTANCE, AL_LINEAR_DISTANCE_CLAMPED,
|
||||||
|
* AL_EXPONENT_DISTANCE, AL_EXPONENT_DISTANCE_CLAMPED]
|
||||||
|
* Default: AL_INVERSE_DISTANCE_CLAMPED
|
||||||
|
*
|
||||||
|
* The model by which sources attenuate with distance.
|
||||||
|
*
|
||||||
|
* None - No distance attenuation.
|
||||||
|
* Inverse - Doubling the distance halves the source gain.
|
||||||
|
* Linear - Linear gain scaling between the reference and max distances.
|
||||||
|
* Exponent - Exponential gain dropoff.
|
||||||
|
*
|
||||||
|
* Clamped variations work like the non-clamped counterparts, except the
|
||||||
|
* distance calculated is clamped between the reference and max distances.
|
||||||
|
*/
|
||||||
|
#define AL_DISTANCE_MODEL 0xD000
|
||||||
|
AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel);
|
||||||
|
|
||||||
|
/** Distance model value. */
|
||||||
|
#define AL_INVERSE_DISTANCE 0xD001
|
||||||
|
#define AL_INVERSE_DISTANCE_CLAMPED 0xD002
|
||||||
|
#define AL_LINEAR_DISTANCE 0xD003
|
||||||
|
#define AL_LINEAR_DISTANCE_CLAMPED 0xD004
|
||||||
|
#define AL_EXPONENT_DISTANCE 0xD005
|
||||||
|
#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
|
||||||
|
|
||||||
|
/** Renderer State management. */
|
||||||
|
AL_API void AL_APIENTRY alEnable(ALenum capability);
|
||||||
|
AL_API void AL_APIENTRY alDisable(ALenum capability);
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsEnabled(ALenum capability);
|
||||||
|
|
||||||
|
/** State retrieval. */
|
||||||
|
AL_API const ALchar* AL_APIENTRY alGetString(ALenum param);
|
||||||
|
AL_API void AL_APIENTRY alGetBooleanv(ALenum param, ALboolean *values);
|
||||||
|
AL_API void AL_APIENTRY alGetIntegerv(ALenum param, ALint *values);
|
||||||
|
AL_API void AL_APIENTRY alGetFloatv(ALenum param, ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alGetDoublev(ALenum param, ALdouble *values);
|
||||||
|
AL_API ALboolean AL_APIENTRY alGetBoolean(ALenum param);
|
||||||
|
AL_API ALint AL_APIENTRY alGetInteger(ALenum param);
|
||||||
|
AL_API ALfloat AL_APIENTRY alGetFloat(ALenum param);
|
||||||
|
AL_API ALdouble AL_APIENTRY alGetDouble(ALenum param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error retrieval.
|
||||||
|
*
|
||||||
|
* Obtain the first error generated in the AL context since the last check.
|
||||||
|
*/
|
||||||
|
AL_API ALenum AL_APIENTRY alGetError(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extension support.
|
||||||
|
*
|
||||||
|
* Query for the presence of an extension, and obtain any appropriate function
|
||||||
|
* pointers and enum values.
|
||||||
|
*/
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsExtensionPresent(const ALchar *extname);
|
||||||
|
AL_API void* AL_APIENTRY alGetProcAddress(const ALchar *fname);
|
||||||
|
AL_API ALenum AL_APIENTRY alGetEnumValue(const ALchar *ename);
|
||||||
|
|
||||||
|
|
||||||
|
/** Set Listener parameters */
|
||||||
|
AL_API void AL_APIENTRY alListenerf(ALenum param, ALfloat value);
|
||||||
|
AL_API void AL_APIENTRY alListener3f(ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
AL_API void AL_APIENTRY alListenerfv(ALenum param, const ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alListeneri(ALenum param, ALint value);
|
||||||
|
AL_API void AL_APIENTRY alListener3i(ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
AL_API void AL_APIENTRY alListeneriv(ALenum param, const ALint *values);
|
||||||
|
|
||||||
|
/** Get Listener parameters */
|
||||||
|
AL_API void AL_APIENTRY alGetListenerf(ALenum param, ALfloat *value);
|
||||||
|
AL_API void AL_APIENTRY alGetListener3f(ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetListenerfv(ALenum param, ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alGetListeneri(ALenum param, ALint *value);
|
||||||
|
AL_API void AL_APIENTRY alGetListener3i(ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetListeneriv(ALenum param, ALint *values);
|
||||||
|
|
||||||
|
|
||||||
|
/** Create Source objects. */
|
||||||
|
AL_API void AL_APIENTRY alGenSources(ALsizei n, ALuint *sources);
|
||||||
|
/** Delete Source objects. */
|
||||||
|
AL_API void AL_APIENTRY alDeleteSources(ALsizei n, const ALuint *sources);
|
||||||
|
/** Verify a handle is a valid Source. */
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsSource(ALuint source);
|
||||||
|
|
||||||
|
/** Set Source parameters. */
|
||||||
|
AL_API void AL_APIENTRY alSourcef(ALuint source, ALenum param, ALfloat value);
|
||||||
|
AL_API void AL_APIENTRY alSource3f(ALuint source, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
AL_API void AL_APIENTRY alSourcefv(ALuint source, ALenum param, const ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alSourcei(ALuint source, ALenum param, ALint value);
|
||||||
|
AL_API void AL_APIENTRY alSource3i(ALuint source, ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
AL_API void AL_APIENTRY alSourceiv(ALuint source, ALenum param, const ALint *values);
|
||||||
|
|
||||||
|
/** Get Source parameters. */
|
||||||
|
AL_API void AL_APIENTRY alGetSourcef(ALuint source, ALenum param, ALfloat *value);
|
||||||
|
AL_API void AL_APIENTRY alGetSource3f(ALuint source, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcefv(ALuint source, ALenum param, ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcei(ALuint source, ALenum param, ALint *value);
|
||||||
|
AL_API void AL_APIENTRY alGetSource3i(ALuint source, ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetSourceiv(ALuint source, ALenum param, ALint *values);
|
||||||
|
|
||||||
|
|
||||||
|
/** Play, replay, or resume (if paused) a list of Sources */
|
||||||
|
AL_API void AL_APIENTRY alSourcePlayv(ALsizei n, const ALuint *sources);
|
||||||
|
/** Stop a list of Sources */
|
||||||
|
AL_API void AL_APIENTRY alSourceStopv(ALsizei n, const ALuint *sources);
|
||||||
|
/** Rewind a list of Sources */
|
||||||
|
AL_API void AL_APIENTRY alSourceRewindv(ALsizei n, const ALuint *sources);
|
||||||
|
/** Pause a list of Sources */
|
||||||
|
AL_API void AL_APIENTRY alSourcePausev(ALsizei n, const ALuint *sources);
|
||||||
|
|
||||||
|
/** Play, replay, or resume a Source */
|
||||||
|
AL_API void AL_APIENTRY alSourcePlay(ALuint source);
|
||||||
|
/** Stop a Source */
|
||||||
|
AL_API void AL_APIENTRY alSourceStop(ALuint source);
|
||||||
|
/** Rewind a Source (set playback postiton to beginning) */
|
||||||
|
AL_API void AL_APIENTRY alSourceRewind(ALuint source);
|
||||||
|
/** Pause a Source */
|
||||||
|
AL_API void AL_APIENTRY alSourcePause(ALuint source);
|
||||||
|
|
||||||
|
/** Queue buffers onto a source */
|
||||||
|
AL_API void AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei nb, const ALuint *buffers);
|
||||||
|
/** Unqueue processed buffers from a source */
|
||||||
|
AL_API void AL_APIENTRY alSourceUnqueueBuffers(ALuint source, ALsizei nb, ALuint *buffers);
|
||||||
|
|
||||||
|
|
||||||
|
/** Create Buffer objects */
|
||||||
|
AL_API void AL_APIENTRY alGenBuffers(ALsizei n, ALuint *buffers);
|
||||||
|
/** Delete Buffer objects */
|
||||||
|
AL_API void AL_APIENTRY alDeleteBuffers(ALsizei n, const ALuint *buffers);
|
||||||
|
/** Verify a handle is a valid Buffer */
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsBuffer(ALuint buffer);
|
||||||
|
|
||||||
|
/** Specifies the data to be copied into a buffer */
|
||||||
|
AL_API void AL_APIENTRY alBufferData(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq);
|
||||||
|
|
||||||
|
/** Set Buffer parameters, */
|
||||||
|
AL_API void AL_APIENTRY alBufferf(ALuint buffer, ALenum param, ALfloat value);
|
||||||
|
AL_API void AL_APIENTRY alBuffer3f(ALuint buffer, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
AL_API void AL_APIENTRY alBufferfv(ALuint buffer, ALenum param, const ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alBufferi(ALuint buffer, ALenum param, ALint value);
|
||||||
|
AL_API void AL_APIENTRY alBuffer3i(ALuint buffer, ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
AL_API void AL_APIENTRY alBufferiv(ALuint buffer, ALenum param, const ALint *values);
|
||||||
|
|
||||||
|
/** Get Buffer parameters. */
|
||||||
|
AL_API void AL_APIENTRY alGetBufferf(ALuint buffer, ALenum param, ALfloat *value);
|
||||||
|
AL_API void AL_APIENTRY alGetBuffer3f(ALuint buffer, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetBufferfv(ALuint buffer, ALenum param, ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alGetBufferi(ALuint buffer, ALenum param, ALint *value);
|
||||||
|
AL_API void AL_APIENTRY alGetBuffer3i(ALuint buffer, ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetBufferiv(ALuint buffer, ALenum param, ALint *values);
|
||||||
|
|
||||||
|
/** Pointer-to-function type, useful for dynamically getting AL entry points. */
|
||||||
|
typedef void (AL_APIENTRY *LPALENABLE)(ALenum capability);
|
||||||
|
typedef void (AL_APIENTRY *LPALDISABLE)(ALenum capability);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISENABLED)(ALenum capability);
|
||||||
|
typedef const ALchar* (AL_APIENTRY *LPALGETSTRING)(ALenum param);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBOOLEANV)(ALenum param, ALboolean *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETINTEGERV)(ALenum param, ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETFLOATV)(ALenum param, ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETDOUBLEV)(ALenum param, ALdouble *values);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALGETBOOLEAN)(ALenum param);
|
||||||
|
typedef ALint (AL_APIENTRY *LPALGETINTEGER)(ALenum param);
|
||||||
|
typedef ALfloat (AL_APIENTRY *LPALGETFLOAT)(ALenum param);
|
||||||
|
typedef ALdouble (AL_APIENTRY *LPALGETDOUBLE)(ALenum param);
|
||||||
|
typedef ALenum (AL_APIENTRY *LPALGETERROR)(void);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISEXTENSIONPRESENT)(const ALchar *extname);
|
||||||
|
typedef void* (AL_APIENTRY *LPALGETPROCADDRESS)(const ALchar *fname);
|
||||||
|
typedef ALenum (AL_APIENTRY *LPALGETENUMVALUE)(const ALchar *ename);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENERF)(ALenum param, ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENER3F)(ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENERFV)(ALenum param, const ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENERI)(ALenum param, ALint value);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENER3I)(ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENERIV)(ALenum param, const ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENERF)(ALenum param, ALfloat *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENER3F)(ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENERFV)(ALenum param, ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENERI)(ALenum param, ALint *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENER3I)(ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENERIV)(ALenum param, ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGENSOURCES)(ALsizei n, ALuint *sources);
|
||||||
|
typedef void (AL_APIENTRY *LPALDELETESOURCES)(ALsizei n, const ALuint *sources);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISSOURCE)(ALuint source);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEF)(ALuint source, ALenum param, ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCE3F)(ALuint source, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEFV)(ALuint source, ALenum param, const ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEI)(ALuint source, ALenum param, ALint value);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCE3I)(ALuint source, ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEIV)(ALuint source, ALenum param, const ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCEF)(ALuint source, ALenum param, ALfloat *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCE3F)(ALuint source, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCEFV)(ALuint source, ALenum param, ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCEI)(ALuint source, ALenum param, ALint *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCE3I)(ALuint source, ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCEIV)(ALuint source, ALenum param, ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEPLAYV)(ALsizei n, const ALuint *sources);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCESTOPV)(ALsizei n, const ALuint *sources);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEREWINDV)(ALsizei n, const ALuint *sources);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEPAUSEV)(ALsizei n, const ALuint *sources);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEPLAY)(ALuint source);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCESTOP)(ALuint source);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEREWIND)(ALuint source);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEPAUSE)(ALuint source);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEQUEUEBUFFERS)(ALuint source, ALsizei nb, const ALuint *buffers);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEUNQUEUEBUFFERS)(ALuint source, ALsizei nb, ALuint *buffers);
|
||||||
|
typedef void (AL_APIENTRY *LPALGENBUFFERS)(ALsizei n, ALuint *buffers);
|
||||||
|
typedef void (AL_APIENTRY *LPALDELETEBUFFERS)(ALsizei n, const ALuint *buffers);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISBUFFER)(ALuint buffer);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFERDATA)(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFERF)(ALuint buffer, ALenum param, ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFER3F)(ALuint buffer, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFERFV)(ALuint buffer, ALenum param, const ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFERI)(ALuint buffer, ALenum param, ALint value);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFER3I)(ALuint buffer, ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFERIV)(ALuint buffer, ALenum param, const ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFERF)(ALuint buffer, ALenum param, ALfloat *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFER3F)(ALuint buffer, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFERFV)(ALuint buffer, ALenum param, ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFERI)(ALuint buffer, ALenum param, ALint *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFER3I)(ALuint buffer, ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFERIV)(ALuint buffer, ALenum param, ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALDOPPLERFACTOR)(ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALDOPPLERVELOCITY)(ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALSPEEDOFSOUND)(ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALDISTANCEMODEL)(ALenum distanceModel);
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* AL_AL_H */
|
237
source/common/music/thirdparty/alc.h
vendored
Normal file
237
source/common/music/thirdparty/alc.h
vendored
Normal file
|
@ -0,0 +1,237 @@
|
||||||
|
#ifndef AL_ALC_H
|
||||||
|
#define AL_ALC_H
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_API
|
||||||
|
#if defined(AL_LIBTYPE_STATIC)
|
||||||
|
#define ALC_API
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
#define ALC_API __declspec(dllimport)
|
||||||
|
#else
|
||||||
|
#define ALC_API extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define ALC_APIENTRY __cdecl
|
||||||
|
#else
|
||||||
|
#define ALC_APIENTRY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/** Deprecated macro. */
|
||||||
|
#define ALCAPI ALC_API
|
||||||
|
#define ALCAPIENTRY ALC_APIENTRY
|
||||||
|
#define ALC_INVALID 0
|
||||||
|
|
||||||
|
/** Supported ALC version? */
|
||||||
|
#define ALC_VERSION_0_1 1
|
||||||
|
|
||||||
|
/** Opaque device handle */
|
||||||
|
typedef struct ALCdevice_struct ALCdevice;
|
||||||
|
/** Opaque context handle */
|
||||||
|
typedef struct ALCcontext_struct ALCcontext;
|
||||||
|
|
||||||
|
/** 8-bit boolean */
|
||||||
|
typedef char ALCboolean;
|
||||||
|
|
||||||
|
/** character */
|
||||||
|
typedef char ALCchar;
|
||||||
|
|
||||||
|
/** signed 8-bit 2's complement integer */
|
||||||
|
typedef signed char ALCbyte;
|
||||||
|
|
||||||
|
/** unsigned 8-bit integer */
|
||||||
|
typedef unsigned char ALCubyte;
|
||||||
|
|
||||||
|
/** signed 16-bit 2's complement integer */
|
||||||
|
typedef short ALCshort;
|
||||||
|
|
||||||
|
/** unsigned 16-bit integer */
|
||||||
|
typedef unsigned short ALCushort;
|
||||||
|
|
||||||
|
/** signed 32-bit 2's complement integer */
|
||||||
|
typedef int ALCint;
|
||||||
|
|
||||||
|
/** unsigned 32-bit integer */
|
||||||
|
typedef unsigned int ALCuint;
|
||||||
|
|
||||||
|
/** non-negative 32-bit binary integer size */
|
||||||
|
typedef int ALCsizei;
|
||||||
|
|
||||||
|
/** enumerated 32-bit value */
|
||||||
|
typedef int ALCenum;
|
||||||
|
|
||||||
|
/** 32-bit IEEE754 floating-point */
|
||||||
|
typedef float ALCfloat;
|
||||||
|
|
||||||
|
/** 64-bit IEEE754 floating-point */
|
||||||
|
typedef double ALCdouble;
|
||||||
|
|
||||||
|
/** void type (for opaque pointers only) */
|
||||||
|
typedef void ALCvoid;
|
||||||
|
|
||||||
|
|
||||||
|
/* Enumerant values begin at column 50. No tabs. */
|
||||||
|
|
||||||
|
/** Boolean False. */
|
||||||
|
#define ALC_FALSE 0
|
||||||
|
|
||||||
|
/** Boolean True. */
|
||||||
|
#define ALC_TRUE 1
|
||||||
|
|
||||||
|
/** Context attribute: <int> Hz. */
|
||||||
|
#define ALC_FREQUENCY 0x1007
|
||||||
|
|
||||||
|
/** Context attribute: <int> Hz. */
|
||||||
|
#define ALC_REFRESH 0x1008
|
||||||
|
|
||||||
|
/** Context attribute: AL_TRUE or AL_FALSE. */
|
||||||
|
#define ALC_SYNC 0x1009
|
||||||
|
|
||||||
|
/** Context attribute: <int> requested Mono (3D) Sources. */
|
||||||
|
#define ALC_MONO_SOURCES 0x1010
|
||||||
|
|
||||||
|
/** Context attribute: <int> requested Stereo Sources. */
|
||||||
|
#define ALC_STEREO_SOURCES 0x1011
|
||||||
|
|
||||||
|
/** No error. */
|
||||||
|
#define ALC_NO_ERROR 0
|
||||||
|
|
||||||
|
/** Invalid device handle. */
|
||||||
|
#define ALC_INVALID_DEVICE 0xA001
|
||||||
|
|
||||||
|
/** Invalid context handle. */
|
||||||
|
#define ALC_INVALID_CONTEXT 0xA002
|
||||||
|
|
||||||
|
/** Invalid enum parameter passed to an ALC call. */
|
||||||
|
#define ALC_INVALID_ENUM 0xA003
|
||||||
|
|
||||||
|
/** Invalid value parameter passed to an ALC call. */
|
||||||
|
#define ALC_INVALID_VALUE 0xA004
|
||||||
|
|
||||||
|
/** Out of memory. */
|
||||||
|
#define ALC_OUT_OF_MEMORY 0xA005
|
||||||
|
|
||||||
|
|
||||||
|
/** Runtime ALC version. */
|
||||||
|
#define ALC_MAJOR_VERSION 0x1000
|
||||||
|
#define ALC_MINOR_VERSION 0x1001
|
||||||
|
|
||||||
|
/** Context attribute list properties. */
|
||||||
|
#define ALC_ATTRIBUTES_SIZE 0x1002
|
||||||
|
#define ALC_ALL_ATTRIBUTES 0x1003
|
||||||
|
|
||||||
|
/** String for the default device specifier. */
|
||||||
|
#define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004
|
||||||
|
/**
|
||||||
|
* String for the given device's specifier.
|
||||||
|
*
|
||||||
|
* If device handle is NULL, it is instead a null-char separated list of
|
||||||
|
* strings of known device specifiers (list ends with an empty string).
|
||||||
|
*/
|
||||||
|
#define ALC_DEVICE_SPECIFIER 0x1005
|
||||||
|
/** String for space-separated list of ALC extensions. */
|
||||||
|
#define ALC_EXTENSIONS 0x1006
|
||||||
|
|
||||||
|
|
||||||
|
/** Capture extension */
|
||||||
|
#define ALC_EXT_CAPTURE 1
|
||||||
|
/**
|
||||||
|
* String for the given capture device's specifier.
|
||||||
|
*
|
||||||
|
* If device handle is NULL, it is instead a null-char separated list of
|
||||||
|
* strings of known capture device specifiers (list ends with an empty string).
|
||||||
|
*/
|
||||||
|
#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310
|
||||||
|
/** String for the default capture device specifier. */
|
||||||
|
#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311
|
||||||
|
/** Number of sample frames available for capture. */
|
||||||
|
#define ALC_CAPTURE_SAMPLES 0x312
|
||||||
|
|
||||||
|
|
||||||
|
/** Enumerate All extension */
|
||||||
|
#define ALC_ENUMERATE_ALL_EXT 1
|
||||||
|
/** String for the default extended device specifier. */
|
||||||
|
#define ALC_DEFAULT_ALL_DEVICES_SPECIFIER 0x1012
|
||||||
|
/**
|
||||||
|
* String for the given extended device's specifier.
|
||||||
|
*
|
||||||
|
* If device handle is NULL, it is instead a null-char separated list of
|
||||||
|
* strings of known extended device specifiers (list ends with an empty string).
|
||||||
|
*/
|
||||||
|
#define ALC_ALL_DEVICES_SPECIFIER 0x1013
|
||||||
|
|
||||||
|
|
||||||
|
/** Context management. */
|
||||||
|
ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCint* attrlist);
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context);
|
||||||
|
ALC_API void ALC_APIENTRY alcProcessContext(ALCcontext *context);
|
||||||
|
ALC_API void ALC_APIENTRY alcSuspendContext(ALCcontext *context);
|
||||||
|
ALC_API void ALC_APIENTRY alcDestroyContext(ALCcontext *context);
|
||||||
|
ALC_API ALCcontext* ALC_APIENTRY alcGetCurrentContext(void);
|
||||||
|
ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice(ALCcontext *context);
|
||||||
|
|
||||||
|
/** Device management. */
|
||||||
|
ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *devicename);
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcCloseDevice(ALCdevice *device);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error support.
|
||||||
|
*
|
||||||
|
* Obtain the most recent Device error.
|
||||||
|
*/
|
||||||
|
ALC_API ALCenum ALC_APIENTRY alcGetError(ALCdevice *device);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extension support.
|
||||||
|
*
|
||||||
|
* Query for the presence of an extension, and obtain any appropriate
|
||||||
|
* function pointers and enum values.
|
||||||
|
*/
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcIsExtensionPresent(ALCdevice *device, const ALCchar *extname);
|
||||||
|
ALC_API void* ALC_APIENTRY alcGetProcAddress(ALCdevice *device, const ALCchar *funcname);
|
||||||
|
ALC_API ALCenum ALC_APIENTRY alcGetEnumValue(ALCdevice *device, const ALCchar *enumname);
|
||||||
|
|
||||||
|
/** Query function. */
|
||||||
|
ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum param);
|
||||||
|
ALC_API void ALC_APIENTRY alcGetIntegerv(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values);
|
||||||
|
|
||||||
|
/** Capture function. */
|
||||||
|
ALC_API ALCdevice* ALC_APIENTRY alcCaptureOpenDevice(const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize);
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcCaptureCloseDevice(ALCdevice *device);
|
||||||
|
ALC_API void ALC_APIENTRY alcCaptureStart(ALCdevice *device);
|
||||||
|
ALC_API void ALC_APIENTRY alcCaptureStop(ALCdevice *device);
|
||||||
|
ALC_API void ALC_APIENTRY alcCaptureSamples(ALCdevice *device, ALCvoid *buffer, ALCsizei samples);
|
||||||
|
|
||||||
|
/** Pointer-to-function type, useful for dynamically getting ALC entry points. */
|
||||||
|
typedef ALCcontext* (ALC_APIENTRY *LPALCCREATECONTEXT)(ALCdevice *device, const ALCint *attrlist);
|
||||||
|
typedef ALCboolean (ALC_APIENTRY *LPALCMAKECONTEXTCURRENT)(ALCcontext *context);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCPROCESSCONTEXT)(ALCcontext *context);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCSUSPENDCONTEXT)(ALCcontext *context);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCDESTROYCONTEXT)(ALCcontext *context);
|
||||||
|
typedef ALCcontext* (ALC_APIENTRY *LPALCGETCURRENTCONTEXT)(void);
|
||||||
|
typedef ALCdevice* (ALC_APIENTRY *LPALCGETCONTEXTSDEVICE)(ALCcontext *context);
|
||||||
|
typedef ALCdevice* (ALC_APIENTRY *LPALCOPENDEVICE)(const ALCchar *devicename);
|
||||||
|
typedef ALCboolean (ALC_APIENTRY *LPALCCLOSEDEVICE)(ALCdevice *device);
|
||||||
|
typedef ALCenum (ALC_APIENTRY *LPALCGETERROR)(ALCdevice *device);
|
||||||
|
typedef ALCboolean (ALC_APIENTRY *LPALCISEXTENSIONPRESENT)(ALCdevice *device, const ALCchar *extname);
|
||||||
|
typedef void* (ALC_APIENTRY *LPALCGETPROCADDRESS)(ALCdevice *device, const ALCchar *funcname);
|
||||||
|
typedef ALCenum (ALC_APIENTRY *LPALCGETENUMVALUE)(ALCdevice *device, const ALCchar *enumname);
|
||||||
|
typedef const ALCchar* (ALC_APIENTRY *LPALCGETSTRING)(ALCdevice *device, ALCenum param);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCGETINTEGERV)(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values);
|
||||||
|
typedef ALCdevice* (ALC_APIENTRY *LPALCCAPTUREOPENDEVICE)(const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize);
|
||||||
|
typedef ALCboolean (ALC_APIENTRY *LPALCCAPTURECLOSEDEVICE)(ALCdevice *device);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCCAPTURESTART)(ALCdevice *device);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCCAPTURESTOP)(ALCdevice *device);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCCAPTURESAMPLES)(ALCdevice *device, ALCvoid *buffer, ALCsizei samples);
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* AL_ALC_H */
|
400
source/common/music/thirdparty/alext.h
vendored
Normal file
400
source/common/music/thirdparty/alext.h
vendored
Normal file
|
@ -0,0 +1,400 @@
|
||||||
|
/**
|
||||||
|
* OpenAL cross platform audio library
|
||||||
|
* Copyright (C) 2008 by authors.
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
* Or go to http://www.gnu.org/copyleft/lgpl.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AL_ALEXT_H
|
||||||
|
#define AL_ALEXT_H
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
/* Define int64_t and uint64_t types */
|
||||||
|
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
||||||
|
#include <inttypes.h>
|
||||||
|
#elif defined(_WIN32) && defined(__GNUC__)
|
||||||
|
#include <stdint.h>
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
typedef __int64 int64_t;
|
||||||
|
typedef unsigned __int64 uint64_t;
|
||||||
|
#else
|
||||||
|
/* Fallback if nothing above works */
|
||||||
|
#include <inttypes.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "alc.h"
|
||||||
|
#include "al.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_LOKI_IMA_ADPCM_format
|
||||||
|
#define AL_LOKI_IMA_ADPCM_format 1
|
||||||
|
#define AL_FORMAT_IMA_ADPCM_MONO16_EXT 0x10000
|
||||||
|
#define AL_FORMAT_IMA_ADPCM_STEREO16_EXT 0x10001
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_LOKI_WAVE_format
|
||||||
|
#define AL_LOKI_WAVE_format 1
|
||||||
|
#define AL_FORMAT_WAVE_EXT 0x10002
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_vorbis
|
||||||
|
#define AL_EXT_vorbis 1
|
||||||
|
#define AL_FORMAT_VORBIS_EXT 0x10003
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_LOKI_quadriphonic
|
||||||
|
#define AL_LOKI_quadriphonic 1
|
||||||
|
#define AL_FORMAT_QUAD8_LOKI 0x10004
|
||||||
|
#define AL_FORMAT_QUAD16_LOKI 0x10005
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_float32
|
||||||
|
#define AL_EXT_float32 1
|
||||||
|
#define AL_FORMAT_MONO_FLOAT32 0x10010
|
||||||
|
#define AL_FORMAT_STEREO_FLOAT32 0x10011
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_double
|
||||||
|
#define AL_EXT_double 1
|
||||||
|
#define AL_FORMAT_MONO_DOUBLE_EXT 0x10012
|
||||||
|
#define AL_FORMAT_STEREO_DOUBLE_EXT 0x10013
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_MULAW
|
||||||
|
#define AL_EXT_MULAW 1
|
||||||
|
#define AL_FORMAT_MONO_MULAW_EXT 0x10014
|
||||||
|
#define AL_FORMAT_STEREO_MULAW_EXT 0x10015
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_ALAW
|
||||||
|
#define AL_EXT_ALAW 1
|
||||||
|
#define AL_FORMAT_MONO_ALAW_EXT 0x10016
|
||||||
|
#define AL_FORMAT_STEREO_ALAW_EXT 0x10017
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_LOKI_audio_channel
|
||||||
|
#define ALC_LOKI_audio_channel 1
|
||||||
|
#define ALC_CHAN_MAIN_LOKI 0x500001
|
||||||
|
#define ALC_CHAN_PCM_LOKI 0x500002
|
||||||
|
#define ALC_CHAN_CD_LOKI 0x500003
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_MCFORMATS
|
||||||
|
#define AL_EXT_MCFORMATS 1
|
||||||
|
#define AL_FORMAT_QUAD8 0x1204
|
||||||
|
#define AL_FORMAT_QUAD16 0x1205
|
||||||
|
#define AL_FORMAT_QUAD32 0x1206
|
||||||
|
#define AL_FORMAT_REAR8 0x1207
|
||||||
|
#define AL_FORMAT_REAR16 0x1208
|
||||||
|
#define AL_FORMAT_REAR32 0x1209
|
||||||
|
#define AL_FORMAT_51CHN8 0x120A
|
||||||
|
#define AL_FORMAT_51CHN16 0x120B
|
||||||
|
#define AL_FORMAT_51CHN32 0x120C
|
||||||
|
#define AL_FORMAT_61CHN8 0x120D
|
||||||
|
#define AL_FORMAT_61CHN16 0x120E
|
||||||
|
#define AL_FORMAT_61CHN32 0x120F
|
||||||
|
#define AL_FORMAT_71CHN8 0x1210
|
||||||
|
#define AL_FORMAT_71CHN16 0x1211
|
||||||
|
#define AL_FORMAT_71CHN32 0x1212
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_MULAW_MCFORMATS
|
||||||
|
#define AL_EXT_MULAW_MCFORMATS 1
|
||||||
|
#define AL_FORMAT_MONO_MULAW 0x10014
|
||||||
|
#define AL_FORMAT_STEREO_MULAW 0x10015
|
||||||
|
#define AL_FORMAT_QUAD_MULAW 0x10021
|
||||||
|
#define AL_FORMAT_REAR_MULAW 0x10022
|
||||||
|
#define AL_FORMAT_51CHN_MULAW 0x10023
|
||||||
|
#define AL_FORMAT_61CHN_MULAW 0x10024
|
||||||
|
#define AL_FORMAT_71CHN_MULAW 0x10025
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_IMA4
|
||||||
|
#define AL_EXT_IMA4 1
|
||||||
|
#define AL_FORMAT_MONO_IMA4 0x1300
|
||||||
|
#define AL_FORMAT_STEREO_IMA4 0x1301
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_STATIC_BUFFER
|
||||||
|
#define AL_EXT_STATIC_BUFFER 1
|
||||||
|
typedef ALvoid (AL_APIENTRY*PFNALBUFFERDATASTATICPROC)(const ALint,ALenum,ALvoid*,ALsizei,ALsizei);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API ALvoid AL_APIENTRY alBufferDataStatic(const ALint buffer, ALenum format, ALvoid *data, ALsizei len, ALsizei freq);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_EXT_EFX
|
||||||
|
#define ALC_EXT_EFX 1
|
||||||
|
#include "efx.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_EXT_disconnect
|
||||||
|
#define ALC_EXT_disconnect 1
|
||||||
|
#define ALC_CONNECTED 0x313
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_EXT_thread_local_context
|
||||||
|
#define ALC_EXT_thread_local_context 1
|
||||||
|
typedef ALCboolean (ALC_APIENTRY*PFNALCSETTHREADCONTEXTPROC)(ALCcontext *context);
|
||||||
|
typedef ALCcontext* (ALC_APIENTRY*PFNALCGETTHREADCONTEXTPROC)(void);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcSetThreadContext(ALCcontext *context);
|
||||||
|
ALC_API ALCcontext* ALC_APIENTRY alcGetThreadContext(void);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_source_distance_model
|
||||||
|
#define AL_EXT_source_distance_model 1
|
||||||
|
#define AL_SOURCE_DISTANCE_MODEL 0x200
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_buffer_sub_data
|
||||||
|
#define AL_SOFT_buffer_sub_data 1
|
||||||
|
#define AL_BYTE_RW_OFFSETS_SOFT 0x1031
|
||||||
|
#define AL_SAMPLE_RW_OFFSETS_SOFT 0x1032
|
||||||
|
typedef ALvoid (AL_APIENTRY*PFNALBUFFERSUBDATASOFTPROC)(ALuint,ALenum,const ALvoid*,ALsizei,ALsizei);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API ALvoid AL_APIENTRY alBufferSubDataSOFT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_loop_points
|
||||||
|
#define AL_SOFT_loop_points 1
|
||||||
|
#define AL_LOOP_POINTS_SOFT 0x2015
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_FOLDBACK
|
||||||
|
#define AL_EXT_FOLDBACK 1
|
||||||
|
#define AL_EXT_FOLDBACK_NAME "AL_EXT_FOLDBACK"
|
||||||
|
#define AL_FOLDBACK_EVENT_BLOCK 0x4112
|
||||||
|
#define AL_FOLDBACK_EVENT_START 0x4111
|
||||||
|
#define AL_FOLDBACK_EVENT_STOP 0x4113
|
||||||
|
#define AL_FOLDBACK_MODE_MONO 0x4101
|
||||||
|
#define AL_FOLDBACK_MODE_STEREO 0x4102
|
||||||
|
typedef void (AL_APIENTRY*LPALFOLDBACKCALLBACK)(ALenum,ALsizei);
|
||||||
|
typedef void (AL_APIENTRY*LPALREQUESTFOLDBACKSTART)(ALenum,ALsizei,ALsizei,ALfloat*,LPALFOLDBACKCALLBACK);
|
||||||
|
typedef void (AL_APIENTRY*LPALREQUESTFOLDBACKSTOP)(void);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API void AL_APIENTRY alRequestFoldbackStart(ALenum mode,ALsizei count,ALsizei length,ALfloat *mem,LPALFOLDBACKCALLBACK callback);
|
||||||
|
AL_API void AL_APIENTRY alRequestFoldbackStop(void);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_EXT_DEDICATED
|
||||||
|
#define ALC_EXT_DEDICATED 1
|
||||||
|
#define AL_DEDICATED_GAIN 0x0001
|
||||||
|
#define AL_EFFECT_DEDICATED_DIALOGUE 0x9001
|
||||||
|
#define AL_EFFECT_DEDICATED_LOW_FREQUENCY_EFFECT 0x9000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_buffer_samples
|
||||||
|
#define AL_SOFT_buffer_samples 1
|
||||||
|
/* Channel configurations */
|
||||||
|
#define AL_MONO_SOFT 0x1500
|
||||||
|
#define AL_STEREO_SOFT 0x1501
|
||||||
|
#define AL_REAR_SOFT 0x1502
|
||||||
|
#define AL_QUAD_SOFT 0x1503
|
||||||
|
#define AL_5POINT1_SOFT 0x1504
|
||||||
|
#define AL_6POINT1_SOFT 0x1505
|
||||||
|
#define AL_7POINT1_SOFT 0x1506
|
||||||
|
|
||||||
|
/* Sample types */
|
||||||
|
#define AL_BYTE_SOFT 0x1400
|
||||||
|
#define AL_UNSIGNED_BYTE_SOFT 0x1401
|
||||||
|
#define AL_SHORT_SOFT 0x1402
|
||||||
|
#define AL_UNSIGNED_SHORT_SOFT 0x1403
|
||||||
|
#define AL_INT_SOFT 0x1404
|
||||||
|
#define AL_UNSIGNED_INT_SOFT 0x1405
|
||||||
|
#define AL_FLOAT_SOFT 0x1406
|
||||||
|
#define AL_DOUBLE_SOFT 0x1407
|
||||||
|
#define AL_BYTE3_SOFT 0x1408
|
||||||
|
#define AL_UNSIGNED_BYTE3_SOFT 0x1409
|
||||||
|
|
||||||
|
/* Storage formats */
|
||||||
|
#define AL_MONO8_SOFT 0x1100
|
||||||
|
#define AL_MONO16_SOFT 0x1101
|
||||||
|
#define AL_MONO32F_SOFT 0x10010
|
||||||
|
#define AL_STEREO8_SOFT 0x1102
|
||||||
|
#define AL_STEREO16_SOFT 0x1103
|
||||||
|
#define AL_STEREO32F_SOFT 0x10011
|
||||||
|
#define AL_QUAD8_SOFT 0x1204
|
||||||
|
#define AL_QUAD16_SOFT 0x1205
|
||||||
|
#define AL_QUAD32F_SOFT 0x1206
|
||||||
|
#define AL_REAR8_SOFT 0x1207
|
||||||
|
#define AL_REAR16_SOFT 0x1208
|
||||||
|
#define AL_REAR32F_SOFT 0x1209
|
||||||
|
#define AL_5POINT1_8_SOFT 0x120A
|
||||||
|
#define AL_5POINT1_16_SOFT 0x120B
|
||||||
|
#define AL_5POINT1_32F_SOFT 0x120C
|
||||||
|
#define AL_6POINT1_8_SOFT 0x120D
|
||||||
|
#define AL_6POINT1_16_SOFT 0x120E
|
||||||
|
#define AL_6POINT1_32F_SOFT 0x120F
|
||||||
|
#define AL_7POINT1_8_SOFT 0x1210
|
||||||
|
#define AL_7POINT1_16_SOFT 0x1211
|
||||||
|
#define AL_7POINT1_32F_SOFT 0x1212
|
||||||
|
|
||||||
|
/* Buffer attributes */
|
||||||
|
#define AL_INTERNAL_FORMAT_SOFT 0x2008
|
||||||
|
#define AL_BYTE_LENGTH_SOFT 0x2009
|
||||||
|
#define AL_SAMPLE_LENGTH_SOFT 0x200A
|
||||||
|
#define AL_SEC_LENGTH_SOFT 0x200B
|
||||||
|
|
||||||
|
typedef void (AL_APIENTRY*LPALBUFFERSAMPLESSOFT)(ALuint,ALuint,ALenum,ALsizei,ALenum,ALenum,const ALvoid*);
|
||||||
|
typedef void (AL_APIENTRY*LPALBUFFERSUBSAMPLESSOFT)(ALuint,ALsizei,ALsizei,ALenum,ALenum,const ALvoid*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETBUFFERSAMPLESSOFT)(ALuint,ALsizei,ALsizei,ALenum,ALenum,ALvoid*);
|
||||||
|
typedef ALboolean (AL_APIENTRY*LPALISBUFFERFORMATSUPPORTEDSOFT)(ALenum);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API void AL_APIENTRY alBufferSamplesSOFT(ALuint buffer, ALuint samplerate, ALenum internalformat, ALsizei samples, ALenum channels, ALenum type, const ALvoid *data);
|
||||||
|
AL_API void AL_APIENTRY alBufferSubSamplesSOFT(ALuint buffer, ALsizei offset, ALsizei samples, ALenum channels, ALenum type, const ALvoid *data);
|
||||||
|
AL_API void AL_APIENTRY alGetBufferSamplesSOFT(ALuint buffer, ALsizei offset, ALsizei samples, ALenum channels, ALenum type, ALvoid *data);
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsBufferFormatSupportedSOFT(ALenum format);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_direct_channels
|
||||||
|
#define AL_SOFT_direct_channels 1
|
||||||
|
#define AL_DIRECT_CHANNELS_SOFT 0x1033
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_SOFT_loopback
|
||||||
|
#define ALC_SOFT_loopback 1
|
||||||
|
#define ALC_FORMAT_CHANNELS_SOFT 0x1990
|
||||||
|
#define ALC_FORMAT_TYPE_SOFT 0x1991
|
||||||
|
|
||||||
|
/* Sample types */
|
||||||
|
#define ALC_BYTE_SOFT 0x1400
|
||||||
|
#define ALC_UNSIGNED_BYTE_SOFT 0x1401
|
||||||
|
#define ALC_SHORT_SOFT 0x1402
|
||||||
|
#define ALC_UNSIGNED_SHORT_SOFT 0x1403
|
||||||
|
#define ALC_INT_SOFT 0x1404
|
||||||
|
#define ALC_UNSIGNED_INT_SOFT 0x1405
|
||||||
|
#define ALC_FLOAT_SOFT 0x1406
|
||||||
|
|
||||||
|
/* Channel configurations */
|
||||||
|
#define ALC_MONO_SOFT 0x1500
|
||||||
|
#define ALC_STEREO_SOFT 0x1501
|
||||||
|
#define ALC_QUAD_SOFT 0x1503
|
||||||
|
#define ALC_5POINT1_SOFT 0x1504
|
||||||
|
#define ALC_6POINT1_SOFT 0x1505
|
||||||
|
#define ALC_7POINT1_SOFT 0x1506
|
||||||
|
|
||||||
|
typedef ALCdevice* (ALC_APIENTRY*LPALCLOOPBACKOPENDEVICESOFT)(const ALCchar*);
|
||||||
|
typedef ALCboolean (ALC_APIENTRY*LPALCISRENDERFORMATSUPPORTEDSOFT)(ALCdevice*,ALCsizei,ALCenum,ALCenum);
|
||||||
|
typedef void (ALC_APIENTRY*LPALCRENDERSAMPLESSOFT)(ALCdevice*,ALCvoid*,ALCsizei);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
ALC_API ALCdevice* ALC_APIENTRY alcLoopbackOpenDeviceSOFT(const ALCchar *deviceName);
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcIsRenderFormatSupportedSOFT(ALCdevice *device, ALCsizei freq, ALCenum channels, ALCenum type);
|
||||||
|
ALC_API void ALC_APIENTRY alcRenderSamplesSOFT(ALCdevice *device, ALCvoid *buffer, ALCsizei samples);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_STEREO_ANGLES
|
||||||
|
#define AL_EXT_STEREO_ANGLES 1
|
||||||
|
#define AL_STEREO_ANGLES 0x1030
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_SOURCE_RADIUS
|
||||||
|
#define AL_EXT_SOURCE_RADIUS 1
|
||||||
|
#define AL_SOURCE_RADIUS 0x1031
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_source_latency
|
||||||
|
#define AL_SOFT_source_latency 1
|
||||||
|
#define AL_SAMPLE_OFFSET_LATENCY_SOFT 0x1200
|
||||||
|
#define AL_SEC_OFFSET_LATENCY_SOFT 0x1201
|
||||||
|
typedef int64_t ALint64SOFT;
|
||||||
|
typedef uint64_t ALuint64SOFT;
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCEDSOFT)(ALuint,ALenum,ALdouble);
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCE3DSOFT)(ALuint,ALenum,ALdouble,ALdouble,ALdouble);
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCEDVSOFT)(ALuint,ALenum,const ALdouble*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCEDSOFT)(ALuint,ALenum,ALdouble*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCE3DSOFT)(ALuint,ALenum,ALdouble*,ALdouble*,ALdouble*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCEDVSOFT)(ALuint,ALenum,ALdouble*);
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCEI64SOFT)(ALuint,ALenum,ALint64SOFT);
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCE3I64SOFT)(ALuint,ALenum,ALint64SOFT,ALint64SOFT,ALint64SOFT);
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCEI64VSOFT)(ALuint,ALenum,const ALint64SOFT*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCEI64SOFT)(ALuint,ALenum,ALint64SOFT*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCE3I64SOFT)(ALuint,ALenum,ALint64SOFT*,ALint64SOFT*,ALint64SOFT*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCEI64VSOFT)(ALuint,ALenum,ALint64SOFT*);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API void AL_APIENTRY alSourcedSOFT(ALuint source, ALenum param, ALdouble value);
|
||||||
|
AL_API void AL_APIENTRY alSource3dSOFT(ALuint source, ALenum param, ALdouble value1, ALdouble value2, ALdouble value3);
|
||||||
|
AL_API void AL_APIENTRY alSourcedvSOFT(ALuint source, ALenum param, const ALdouble *values);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcedSOFT(ALuint source, ALenum param, ALdouble *value);
|
||||||
|
AL_API void AL_APIENTRY alGetSource3dSOFT(ALuint source, ALenum param, ALdouble *value1, ALdouble *value2, ALdouble *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcedvSOFT(ALuint source, ALenum param, ALdouble *values);
|
||||||
|
AL_API void AL_APIENTRY alSourcei64SOFT(ALuint source, ALenum param, ALint64SOFT value);
|
||||||
|
AL_API void AL_APIENTRY alSource3i64SOFT(ALuint source, ALenum param, ALint64SOFT value1, ALint64SOFT value2, ALint64SOFT value3);
|
||||||
|
AL_API void AL_APIENTRY alSourcei64vSOFT(ALuint source, ALenum param, const ALint64SOFT *values);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcei64SOFT(ALuint source, ALenum param, ALint64SOFT *value);
|
||||||
|
AL_API void AL_APIENTRY alGetSource3i64SOFT(ALuint source, ALenum param, ALint64SOFT *value1, ALint64SOFT *value2, ALint64SOFT *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcei64vSOFT(ALuint source, ALenum param, ALint64SOFT *values);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_EXT_DEFAULT_FILTER_ORDER
|
||||||
|
#define ALC_EXT_DEFAULT_FILTER_ORDER 1
|
||||||
|
#define ALC_DEFAULT_FILTER_ORDER 0x1100
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_deferred_updates
|
||||||
|
#define AL_SOFT_deferred_updates 1
|
||||||
|
#define AL_DEFERRED_UPDATES_SOFT 0xC002
|
||||||
|
typedef ALvoid (AL_APIENTRY*LPALDEFERUPDATESSOFT)(void);
|
||||||
|
typedef ALvoid (AL_APIENTRY*LPALPROCESSUPDATESSOFT)(void);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API ALvoid AL_APIENTRY alDeferUpdatesSOFT(void);
|
||||||
|
AL_API ALvoid AL_APIENTRY alProcessUpdatesSOFT(void);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_block_alignment
|
||||||
|
#define AL_SOFT_block_alignment 1
|
||||||
|
#define AL_UNPACK_BLOCK_ALIGNMENT_SOFT 0x200C
|
||||||
|
#define AL_PACK_BLOCK_ALIGNMENT_SOFT 0x200D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_MSADPCM
|
||||||
|
#define AL_SOFT_MSADPCM 1
|
||||||
|
#define AL_FORMAT_MONO_MSADPCM_SOFT 0x1302
|
||||||
|
#define AL_FORMAT_STEREO_MSADPCM_SOFT 0x1303
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_source_length
|
||||||
|
#define AL_SOFT_source_length 1
|
||||||
|
/*#define AL_BYTE_LENGTH_SOFT 0x2009*/
|
||||||
|
/*#define AL_SAMPLE_LENGTH_SOFT 0x200A*/
|
||||||
|
/*#define AL_SEC_LENGTH_SOFT 0x200B*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_SOFT_pause_device
|
||||||
|
#define ALC_SOFT_pause_device 1
|
||||||
|
typedef void (ALC_APIENTRY*LPALCDEVICEPAUSESOFT)(ALCdevice *device);
|
||||||
|
typedef void (ALC_APIENTRY*LPALCDEVICERESUMESOFT)(ALCdevice *device);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
ALC_API void ALC_APIENTRY alcDevicePauseSOFT(ALCdevice *device);
|
||||||
|
ALC_API void ALC_APIENTRY alcDeviceResumeSOFT(ALCdevice *device);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue