quadrilateralcowboy/openal/include/eax2.h
2020-06-12 14:06:25 -07:00

345 lines
14 KiB
C

/******************************************************************
*
* EAX.H - DirectSound3D Environmental Audio Extensions version 2.0
* Updated July 8, 1999
*
*******************************************************************
*/
#ifndef EAX20_H_INCLUDED
#define EAX20_H_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
#pragma pack(push, 4)
/*
* EAX 2.0 listener property set {0306A6A8-B224-11d2-99E5-0000E8D8C722}
*/
DEFINE_GUID(DSPROPSETID_EAX20_ListenerProperties,
0x306a6a8,
0xb224,
0x11d2,
0x99, 0xe5, 0x0, 0x0, 0xe8, 0xd8, 0xc7, 0x22);
typedef enum
{
DSPROPERTY_EAX20LISTENER_NONE,
DSPROPERTY_EAX20LISTENER_ALLPARAMETERS,
DSPROPERTY_EAX20LISTENER_ROOM,
DSPROPERTY_EAX20LISTENER_ROOMHF,
DSPROPERTY_EAX20LISTENER_ROOMROLLOFFFACTOR,
DSPROPERTY_EAX20LISTENER_DECAYTIME,
DSPROPERTY_EAX20LISTENER_DECAYHFRATIO,
DSPROPERTY_EAX20LISTENER_REFLECTIONS,
DSPROPERTY_EAX20LISTENER_REFLECTIONSDELAY,
DSPROPERTY_EAX20LISTENER_REVERB,
DSPROPERTY_EAX20LISTENER_REVERBDELAY,
DSPROPERTY_EAX20LISTENER_ENVIRONMENT,
DSPROPERTY_EAX20LISTENER_ENVIRONMENTSIZE,
DSPROPERTY_EAX20LISTENER_ENVIRONMENTDIFFUSION,
DSPROPERTY_EAX20LISTENER_AIRABSORPTIONHF,
DSPROPERTY_EAX20LISTENER_FLAGS
} DSPROPERTY_EAX20_LISTENERPROPERTY;
// OR these flags with property id
#define DSPROPERTY_EAX20LISTENER_IMMEDIATE 0x00000000 // changes take effect immediately
#define DSPROPERTY_EAX20LISTENER_DEFERRED 0x80000000 // changes take effect later
#define DSPROPERTY_EAX20LISTENER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAX20LISTENER_NONE | \
DSPROPERTY_EAX20LISTENER_IMMEDIATE)
// Use this structure for DSPROPERTY_EAX20LISTENER_ALLPARAMETERS
// - all levels are hundredths of decibels
// - all times are in seconds
// - the reference for high frequency controls is 5 kHz
//
// NOTE: This structure may change in future EAX versions.
// It is recommended to initialize fields by name:
// myListener.lRoom = -1000;
// myListener.lRoomHF = -100;
// ...
// myListener.dwFlags = myFlags /* see EAXLISTENERFLAGS below */ ;
// instead of:
// myListener = { -1000, -100, ... , 0x00000009 };
// If you want to save and load presets in binary form, you
// should define your own structure to insure future compatibility.
//
typedef struct _EAX20LISTENERPROPERTIES
{
long lRoom; // room effect level at low frequencies
long lRoomHF; // room effect high-frequency level re. low frequency level
float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
float flDecayTime; // reverberation decay time at low frequencies
float flDecayHFRatio; // high-frequency to low-frequency decay time ratio
long lReflections; // early reflections level relative to room effect
float flReflectionsDelay; // initial reflection delay time
long lReverb; // late reverberation level relative to room effect
float flReverbDelay; // late reverberation delay time relative to initial reflection
unsigned long dwEnvironment; // sets all listener properties
float flEnvironmentSize; // environment size in meters
float flEnvironmentDiffusion; // environment diffusion
float flAirAbsorptionHF; // change in level per meter at 5 kHz
unsigned long dwFlags; // modifies the behavior of properties
} EAX20LISTENERPROPERTIES, *LPEAX20LISTENERPROPERTIES;
// used by DSPROPERTY_EAX20LISTENER_ENVIRONMENT
enum
{
EAX20_ENVIRONMENT_GENERIC,
EAX20_ENVIRONMENT_PADDEDCELL,
EAX20_ENVIRONMENT_ROOM,
EAX20_ENVIRONMENT_BATHROOM,
EAX20_ENVIRONMENT_LIVINGROOM,
EAX20_ENVIRONMENT_STONEROOM,
EAX20_ENVIRONMENT_AUDITORIUM,
EAX20_ENVIRONMENT_CONCERTHALL,
EAX20_ENVIRONMENT_CAVE,
EAX20_ENVIRONMENT_ARENA,
EAX20_ENVIRONMENT_HANGAR,
EAX20_ENVIRONMENT_CARPETEDHALLWAY,
EAX20_ENVIRONMENT_HALLWAY,
EAX20_ENVIRONMENT_STONECORRIDOR,
EAX20_ENVIRONMENT_ALLEY,
EAX20_ENVIRONMENT_FOREST,
EAX20_ENVIRONMENT_CITY,
EAX20_ENVIRONMENT_MOUNTAINS,
EAX20_ENVIRONMENT_QUARRY,
EAX20_ENVIRONMENT_PLAIN,
EAX20_ENVIRONMENT_PARKINGLOT,
EAX20_ENVIRONMENT_SEWERPIPE,
EAX20_ENVIRONMENT_UNDERWATER,
EAX20_ENVIRONMENT_DRUGGED,
EAX20_ENVIRONMENT_DIZZY,
EAX20_ENVIRONMENT_PSYCHOTIC,
EAX20_ENVIRONMENT_COUNT
};
// Used by DS20PROPERTY_EAXLISTENER_FLAGS
//
// Note: The number and order of flags may change in future EAX versions.
// It is recommended to use the flag defines as follows:
// myFlags = EAXLISTENERFLAGS_DECAYTIMESCALE | EAXLISTENERFLAGS_REVERBSCALE;
// instead of:
// myFlags = 0x00000009;
//
// These flags determine what properties are affected by environment size.
#define EAX20LISTENERFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time
#define EAX20LISTENERFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level
#define EAX20LISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time
#define EAX20LISTENERFLAGS_REVERBSCALE 0x00000008 // reflections level
#define EAX20LISTENERFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time
// This flag limits high-frequency decay time according to air absorption.
#define EAX20LISTENERFLAGS_DECAYHFLIMIT 0x00000020
#define EAX20LISTENERFLAGS_RESERVED 0xFFFFFFC0 // reserved future use
// property ranges and defaults:
#define EAX20LISTENER_MINROOM (-10000)
#define EAX20LISTENER_MAXROOM 0
#define EAX20LISTENER_DEFAULTROOM (-1000)
#define EAX20LISTENER_MINROOMHF (-10000)
#define EAX20LISTENER_MAXROOMHF 0
#define EAX20LISTENER_DEFAULTROOMHF (-100)
#define EAX20LISTENER_MINROOMROLLOFFFACTOR 0.0f
#define EAX20LISTENER_MAXROOMROLLOFFFACTOR 10.0f
#define EAX20LISTENER_DEFAULTROOMROLLOFFFACTOR 0.0f
#define EAX20LISTENER_MINDECAYTIME 0.1f
#define EAX20LISTENER_MAXDECAYTIME 20.0f
#define EAX20LISTENER_DEFAULTDECAYTIME 1.49f
#define EAX20LISTENER_MINDECAYHFRATIO 0.1f
#define EAX20LISTENER_MAXDECAYHFRATIO 2.0f
#define EAX20LISTENER_DEFAULTDECAYHFRATIO 0.83f
#define EAX20LISTENER_MINREFLECTIONS (-10000)
#define EAX20LISTENER_MAXREFLECTIONS 1000
#define EAX20LISTENER_DEFAULTREFLECTIONS (-2602)
#define EAX20LISTENER_MINREFLECTIONSDELAY 0.0f
#define EAX20LISTENER_MAXREFLECTIONSDELAY 0.3f
#define EAX20LISTENER_DEFAULTREFLECTIONSDELAY 0.007f
#define EAX20LISTENER_MINREVERB (-10000)
#define EAX20LISTENER_MAXREVERB 2000
#define EAX20LISTENER_DEFAULTREVERB 200
#define EAX20LISTENER_MINREVERBDELAY 0.0f
#define EAX20LISTENER_MAXREVERBDELAY 0.1f
#define EAX20LISTENER_DEFAULTREVERBDELAY 0.011f
#define EAX20LISTENER_MINENVIRONMENT 0
#define EAX20LISTENER_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1)
#define EAX20LISTENER_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC
#define EAX20LISTENER_MINENVIRONMENTSIZE 1.0f
#define EAX20LISTENER_MAXENVIRONMENTSIZE 100.0f
#define EAX20LISTENER_DEFAULTENVIRONMENTSIZE 7.5f
#define EAX20LISTENER_MINENVIRONMENTDIFFUSION 0.0f
#define EAX20LISTENER_MAXENVIRONMENTDIFFUSION 1.0f
#define EAX20LISTENER_DEFAULTENVIRONMENTDIFFUSION 1.0f
#define EAX20LISTENER_MINAIRABSORPTIONHF (-100.0f)
#define EAX20LISTENER_MAXAIRABSORPTIONHF 0.0f
#define EAX20LISTENER_DEFAULTAIRABSORPTIONHF (-5.0f)
#define EAX20LISTENER_DEFAULTFLAGS (EAX20LISTENERFLAGS_DECAYTIMESCALE | \
EAX20LISTENERFLAGS_REFLECTIONSSCALE | \
EAX20LISTENERFLAGS_REFLECTIONSDELAYSCALE | \
EAX20LISTENERFLAGS_REVERBSCALE | \
EAX20LISTENERFLAGS_REVERBDELAYSCALE | \
EAX20LISTENERFLAGS_DECAYHFLIMIT)
/*
* EAX 2.0 buffer property set {0306A6A7-B224-11d2-99E5-0000E8D8C722}
*/
DEFINE_GUID(DSPROPSETID_EAX20_BufferProperties,
0x306a6a7,
0xb224,
0x11d2,
0x99, 0xe5, 0x0, 0x0, 0xe8, 0xd8, 0xc7, 0x22);
// For compatibility with future EAX versions:
#define DSPROPSETID_EAX20_BufferProperties DSPROPSETID_EAX20_BufferProperties
typedef enum
{
DSPROPERTY_EAX20BUFFER_NONE,
DSPROPERTY_EAX20BUFFER_ALLPARAMETERS,
DSPROPERTY_EAX20BUFFER_DIRECT,
DSPROPERTY_EAX20BUFFER_DIRECTHF,
DSPROPERTY_EAX20BUFFER_ROOM,
DSPROPERTY_EAX20BUFFER_ROOMHF,
DSPROPERTY_EAX20BUFFER_ROOMROLLOFFFACTOR,
DSPROPERTY_EAX20BUFFER_OBSTRUCTION,
DSPROPERTY_EAX20BUFFER_OBSTRUCTIONLFRATIO,
DSPROPERTY_EAX20BUFFER_OCCLUSION,
DSPROPERTY_EAX20BUFFER_OCCLUSIONLFRATIO,
DSPROPERTY_EAX20BUFFER_OCCLUSIONROOMRATIO,
DSPROPERTY_EAX20BUFFER_OUTSIDEVOLUMEHF,
DSPROPERTY_EAX20BUFFER_AIRABSORPTIONFACTOR,
DSPROPERTY_EAX20BUFFER_FLAGS
} DSPROPERTY_EAX20_BUFFERPROPERTY;
// OR these flags with property id
#define DSPROPERTY_EAX20BUFFER_IMMEDIATE 0x00000000 // changes take effect immediately
#define DSPROPERTY_EAX20BUFFER_DEFERRED 0x80000000 // changes take effect later
#define DSPROPERTY_EAX20BUFFER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAX20BUFFER_NONE | \
DSPROPERTY_EAX20BUFFER_IMMEDIATE)
// Use this structure for DSPROPERTY_EAX20BUFFER_ALLPARAMETERS
// - all levels are hundredths of decibels
//
// NOTE: This structure may change in future EAX versions.
// It is recommended to initialize fields by name:
// myBuffer.lDirect = 0;
// myBuffer.lDirectHF = -200;
// ...
// myBuffer.dwFlags = myFlags /* see EAXBUFFERFLAGS below */ ;
// instead of:
// myBuffer = { 0, -200, ... , 0x00000003 };
//
typedef struct _EAX20BUFFERPROPERTIES
{
long lDirect; // direct path level
long lDirectHF; // direct path level at high frequencies
long lRoom; // room effect level
long lRoomHF; // room effect level at high frequencies
float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
long lObstruction; // main obstruction control (attenuation at high frequencies)
float flObstructionLFRatio; // obstruction low-frequency level re. main control
long lOcclusion; // main occlusion control (attenuation at high frequencies)
float flOcclusionLFRatio; // occlusion low-frequency level re. main control
float flOcclusionRoomRatio; // occlusion room effect level re. main control
long lOutsideVolumeHF; // outside sound cone level at high frequencies
float flAirAbsorptionFactor; // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
unsigned long dwFlags; // modifies the behavior of properties
} EAX20BUFFERPROPERTIES, *LPEAX20BUFFERPROPERTIES;
// Used by DSPROPERTY_EAX20BUFFER_FLAGS
// TRUE: value is computed automatically - property is an offset
// FALSE: value is used directly
//
// Note: The number and order of flags may change in future EAX versions.
// To insure future compatibility, use flag defines as follows:
// myFlags = EAXBUFFERFLAGS_DIRECTHFAUTO | EAXBUFFERFLAGS_ROOMAUTO;
// instead of:
// myFlags = 0x00000003;
//
#define EAX20BUFFERFLAGS_DIRECTHFAUTO 0x00000001 // affects DSPROPERTY_EAXBUFFER_DIRECTHF
#define EAX20BUFFERFLAGS_ROOMAUTO 0x00000002 // affects DSPROPERTY_EAXBUFFER_ROOM
#define EAX20BUFFERFLAGS_ROOMHFAUTO 0x00000004 // affects DSPROPERTY_EAXBUFFER_ROOMHF
#define EAX20BUFFERFLAGS_RESERVED 0xFFFFFFF8 // reserved future use
// property ranges and defaults:
#define EAX20BUFFER_MINDIRECT (-10000)
#define EAX20BUFFER_MAXDIRECT 1000
#define EAX20BUFFER_DEFAULTDIRECT 0
#define EAX20BUFFER_MINDIRECTHF (-10000)
#define EAX20BUFFER_MAXDIRECTHF 0
#define EAX20BUFFER_DEFAULTDIRECTHF 0
#define EAX20BUFFER_MINROOM (-10000)
#define EAX20BUFFER_MAXROOM 1000
#define EAX20BUFFER_DEFAULTROOM 0
#define EAX20BUFFER_MINROOMHF (-10000)
#define EAX20BUFFER_MAXROOMHF 0
#define EAX20BUFFER_DEFAULTROOMHF 0
#define EAX20BUFFER_MINROOMROLLOFFFACTOR 0.0f
#define EAX20BUFFER_MAXROOMROLLOFFFACTOR 10.f
#define EAX20BUFFER_DEFAULTROOMROLLOFFFACTOR 0.0f
#define EAX20BUFFER_MINOBSTRUCTION (-10000)
#define EAX20BUFFER_MAXOBSTRUCTION 0
#define EAX20BUFFER_DEFAULTOBSTRUCTION 0
#define EAX20BUFFER_MINOBSTRUCTIONLFRATIO 0.0f
#define EAX20BUFFER_MAXOBSTRUCTIONLFRATIO 1.0f
#define EAX20BUFFER_DEFAULTOBSTRUCTIONLFRATIO 0.0f
#define EAX20BUFFER_MINOCCLUSION (-10000)
#define EAX20BUFFER_MAXOCCLUSION 0
#define EAX20BUFFER_DEFAULTOCCLUSION 0
#define EAX20BUFFER_MINOCCLUSIONLFRATIO 0.0f
#define EAX20BUFFER_MAXOCCLUSIONLFRATIO 1.0f
#define EAX20BUFFER_DEFAULTOCCLUSIONLFRATIO 0.25f
#define EAX20BUFFER_MINOCCLUSIONROOMRATIO 0.0f
#define EAX20BUFFER_MAXOCCLUSIONROOMRATIO 10.0f
#define EAX20BUFFER_DEFAULTOCCLUSIONROOMRATIO 0.5f
#define EAX20BUFFER_MINOUTSIDEVOLUMEHF (-10000)
#define EAX20BUFFER_MAXOUTSIDEVOLUMEHF 0
#define EAX20BUFFER_DEFAULTOUTSIDEVOLUMEHF 0
#define EAX20BUFFER_MINAIRABSORPTIONFACTOR 0.0f
#define EAX20BUFFER_MAXAIRABSORPTIONFACTOR 10.0f
#define EAX20BUFFER_DEFAULTAIRABSORPTIONFACTOR 1.0f
#define EAX20BUFFER_DEFAULTFLAGS (EAX20BUFFERFLAGS_DIRECTHFAUTO | \
EAX20BUFFERFLAGS_ROOMAUTO | \
EAX20BUFFERFLAGS_ROOMHFAUTO)
#pragma pack(pop)
#ifdef __cplusplus
}
#endif // __cplusplus
#endif