📄 eax.pas
字号:
DSPROPERTY_EAXBUFFER_ALLPARAMETERS = 1;
DSPROPERTY_EAXBUFFER_DIRECT = 2;
DSPROPERTY_EAXBUFFER_DIRECTHF = 3;
DSPROPERTY_EAXBUFFER_ROOM = 4;
DSPROPERTY_EAXBUFFER_ROOMHF = 5;
DSPROPERTY_EAXBUFFER_ROOMROLLOFFFACTOR = 6;
DSPROPERTY_EAXBUFFER_OBSTRUCTION = 7;
DSPROPERTY_EAXBUFFER_OBSTRUCTIONLFRATIO = 8;
DSPROPERTY_EAXBUFFER_OCCLUSION = 9;
DSPROPERTY_EAXBUFFER_OCCLUSIONLFRATIO = 10;
DSPROPERTY_EAXBUFFER_OCCLUSIONROOMRATIO = 11;
DSPROPERTY_EAXBUFFER_OUTSIDEVOLUMEHF = 12;
DSPROPERTY_EAXBUFFER_AIRABSORPTIONFACTOR = 13;
DSPROPERTY_EAXBUFFER_FLAG = 14;
// OR these flags with property id
DSPROPERTY_EAXBUFFER_IMMEDIATE = $00000000;
// changes take effect immediately
DSPROPERTY_EAXBUFFER_DEFERRED = DWORD($80000000);
DSPROPERTY_EAXBUFFER_COMMITDEFERREDSETTINGS = DSPROPERTY_EAXBUFFER_NONE or
DSPROPERTY_EAXBUFFER_IMMEDIATE;
// Used by DSPROPERTY_EAXBUFFER_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;
//
EAXBUFFERFLAGS_DIRECTHFAUTO = $00000001;
// affects DSPROPERTY_EAXBUFFER_DIRECTHF
EAXBUFFERFLAGS_ROOMAUTO = $00000002;
// affects DSPROPERTY_EAXBUFFER_ROOM
EAXBUFFERFLAGS_ROOMHFAUTO = $00000004;
// affects DSPROPERTY_EAXBUFFER_ROOMHF
EAXBUFFERFLAGS_RESERVED = $FFFFFFF8; // reserved future use
// property ranges and defaults:
EAXBUFFER_MINDIRECT = -10000;
EAXBUFFER_MAXDIRECT = 1000;
EAXBUFFER_DEFAULTDIRECT = 0;
EAXBUFFER_MINDIRECTHF = -10000;
EAXBUFFER_MAXDIRECTHF = 0;
EAXBUFFER_DEFAULTDIRECTHF = 0;
EAXBUFFER_MINROOM = -10000;
EAXBUFFER_MAXROOM = 1000;
EAXBUFFER_DEFAULTROOM = 0;
EAXBUFFER_MINROOMHF = -10000;
EAXBUFFER_MAXROOMHF = 0;
EAXBUFFER_DEFAULTROOMHF = 0;
EAXBUFFER_MINROOMROLLOFFFACTOR = 0.0;
EAXBUFFER_MAXROOMROLLOFFFACTOR = 10.;
EAXBUFFER_DEFAULTROOMROLLOFFFACTOR = 0.0;
EAXBUFFER_MINOBSTRUCTION = -10000;
EAXBUFFER_MAXOBSTRUCTION = 0;
EAXBUFFER_DEFAULTOBSTRUCTION = 0;
EAXBUFFER_MINOBSTRUCTIONLFRATIO = 0.0;
EAXBUFFER_MAXOBSTRUCTIONLFRATIO = 1.0;
EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO = 0.0;
EAXBUFFER_MINOCCLUSION = -10000;
EAXBUFFER_MAXOCCLUSION = 0;
EAXBUFFER_DEFAULTOCCLUSION = 0;
EAXBUFFER_MINOCCLUSIONLFRATIO = 0.0;
EAXBUFFER_MAXOCCLUSIONLFRATIO = 1.0;
EAXBUFFER_DEFAULTOCCLUSIONLFRATIO = 0.25;
EAXBUFFER_MINOCCLUSIONROOMRATIO = 0.0;
EAXBUFFER_MAXOCCLUSIONROOMRATIO = 10.0;
EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO = 0.5;
EAXBUFFER_MINOUTSIDEVOLUMEHF = -10000;
EAXBUFFER_MAXOUTSIDEVOLUMEHF = 0;
EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF = 0;
EAXBUFFER_MINAIRABSORPTIONFACTOR = 0.0;
EAXBUFFER_MAXAIRABSORPTIONFACTOR = 10.0;
EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR = 1.0;
EAXBUFFER_DEFAULTFLAGS = EAXBUFFERFLAGS_DIRECTHFAUTO or
EAXBUFFERFLAGS_ROOMAUTO or
EAXBUFFERFLAGS_ROOMHFAUTO;
// Material transmission presets
// 3 values in this order:
// 1: occlusion (or obstruction)
// 2: occlusion LF Ratio (or obstruction LF Ratio)
// 3: occlusion Room Ratio
// Single window material preset
EAX_MATERIAL_SINGLEWINDOW = -2800;
EAX_MATERIAL_SINGLEWINDOWLF = 0.71;
EAX_MATERIAL_SINGLEWINDOWROOMRATIO = 0.43;
// Double window material preset
EAX_MATERIAL_DOUBLEWINDOW = -5000;
EAX_MATERIAL_DOUBLEWINDOWHF = 0.40;
EAX_MATERIAL_DOUBLEWINDOWROOMRATIO = 0.24;
// Thin door material preset
EAX_MATERIAL_THINDOOR = -1800;
EAX_MATERIAL_THINDOORLF = 0.66;
EAX_MATERIAL_THINDOORROOMRATIO = 0.66;
// Thick door material preset
EAX_MATERIAL_THICKDOOR = -4400;
EAX_MATERIAL_THICKDOORLF = 0.64;
EAX_MATERIAL_THICKDOORROOMRTATION = 0.27;
// Wood wall material preset
EAX_MATERIAL_WOODWALL = -4000;
EAX_MATERIAL_WOODWALLLF = 0.50;
EAX_MATERIAL_WOODWALLROOMRATIO = 0.30;
// Brick wall material preset
EAX_MATERIAL_BRICKWALL = -5000;
EAX_MATERIAL_BRICKWALLLF = 0.60;
EAX_MATERIAL_BRICKWALLROOMRATIO = 0.24;
// Stone wall material preset
EAX_MATERIAL_STONEWALL = -6000;
EAX_MATERIAL_STONEWALLLF = 0.68;
EAX_MATERIAL_STONEWALLROOMRATIO = 0.20;
// Curtain material preset
EAX_MATERIAL_CURTAIN = -1200;
EAX_MATERIAL_CURTAINLF = 0.15;
EAX_MATERIAL_CURTAINROOMRATIO = 1.00;
type
DSPROPERTY_EAX_LISTENERPROPERTY = DWORD;
DSPROPERTY_EAX_BUFFERPROPERTY = DWORD;
// Use this structure for DSPROPERTY_EAXLISTENER_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.
//
PEaxListenerProperties = ^TEaxListenerProperties;
TEaxListenerProperties = packed record
lRoom: integer; // room effect level at low frequencies
lRoomHF: integer;
// room effect high-frequency level re. low frequency levelimplementation
flRoomRolloffFactor: double; // like DS3D flRolloffFactor but for room effect
flDecayTime: double; // reverberation decay time at low frequenciesend.
flDecayHFRatio: double; // high-frequency to low-frequency decay time ratio
lReflections: integer; // early reflections level relative to room effect
flReflectionsDelay: double; // initial reflection delay time
lReverb: integer; // late reverberation level relative to room effect
flReverbDelay: double;
// late reverberation delay time relative to initial reflection
dwEnvironment: cardinal; // sets all listener properties
flEnvironmentSize: double; // environment size in meters
flEnvironmentDiffusion: double; // environment diffusion
flAirAbsorptionHF: double; // change in level per meter at 5 kHz
dwFlags: cardinal; // modifies the behavior of properties
end;
// Use this structure for DSPROPERTY_EAXBUFFER_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 };
//
PEaxBufferProperties = ^TEaxBufferProperties;
TEaxBufferProperties = packed record
lDirect: integer; // direct path level
lDirectHF: integer; // direct path level at high frequencies
lRoom: integer; // room effect level
lRoomHF: integer; // room effect level at high frequencies
flRoomRolloffFactor: double; // like DS3D flRolloffFactor but for room effect
lObstruction: integer;
// main obstruction control (attenuation at high frequencies)
flObstructionLFRatio: double;
// obstruction low-frequency level re. main control
lOcclusion: integer;
// main occlusion control (attenuation at high frequencies)
flOcclusionLFRatio: double; // occlusion low-frequency level re. main control
flOcclusionRoomRatio: double; // occlusion room effect level re. main control
lOutsideVolumeHF: integer; // outside sound cone level at high frequencies
flAirAbsorptionFactor: double;
// multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
dwFlags: Cardinal; // modifies the behavior of properties
end;
var
EAXSet: Function(const Guid: TGUID; ALuint1: TALuint; ALuint2: TALuint; point: Pointer; ALuint3: TALuint): TALenum; stdcall; {$EXTERNALSYM EAXSet}
EAXGet: Function(const Guid: TGUID; ALuint1: TALuint; ALuint2: TALuint; point: Pointer; ALuint3: TALuint): TALenum; stdcall; {$EXTERNALSYM EAXGet}
implementation
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -