diff --git a/Source/OpenTK/OpenAL/AlFunctions.cs b/Source/OpenTK/OpenAL/AlFunctions.cs index d5aba28b..de1b3a5d 100644 --- a/Source/OpenTK/OpenAL/AlFunctions.cs +++ b/Source/OpenTK/OpenAL/AlFunctions.cs @@ -515,19 +515,7 @@ namespace OpenTK.OpenAL ///The value to set the attribute to. (EFX Extension) optional Filter ID. [CLSCompliant(false),DllImport(AL.Lib,EntryPoint = "alSource3i",ExactSpelling = true,CallingConvention = AL.Style),SuppressUnmanagedCodeSecurity( )] public static extern void Source( uint sid,Enums.ALSource3i param,int value1,int value2,int value3 ); - // AL_API void AL_APIENTRY alSource3i( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 ); - - - /// (Helper) Reroutes a Source's output into an Auxiliary Effect Slot. - /// The Source handle who's output is forwarded. - /// The Auxiliary Effect Slot handle that receives input from the Source. - /// Every Source has only a limited number of slots it can feed data to. The number must stay below AlcContextAttributes.EfxMaxAuxiliarySends - /// Filter handle to be attached between Source ouput and Auxiliary Slot input. Use 0 or EfxFilterType.FilterNull for no filter. - [CLSCompliant(false)] - public static void BindSourceToAuxiliarySlot( uint source,uint slot,int slotnumber, uint filter ) - { - AL.Source(source,Enums.ALSource3i.EfxAuxiliarySendFilter,(int) slot,slotnumber,(int) filter); - } + // AL_API void AL_APIENTRY alSource3i( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 ); // Not used by any Enum: // AL_API void AL_APIENTRY alSourcefv( ALuint sid, ALenum param, const ALfloat* values ); diff --git a/Source/OpenTK/OpenAL/AlTokens.cs b/Source/OpenTK/OpenAL/AlTokens.cs index 649ad601..45f0adfc 100644 --- a/Source/OpenTK/OpenAL/AlTokens.cs +++ b/Source/OpenTK/OpenAL/AlTokens.cs @@ -12,12 +12,14 @@ using System; namespace OpenTK.OpenAL.Enums { + ///A list of valid Enable/Disable/IsEnabled parameters public enum ALCapability : int { ///Currently no state toggles exist for vanilla OpenAL and no Extension uses it. Invalid = -1, } + ///A list of valid 32-Bits Float Listener/GetListener parameters public enum ALListenerf : int { ///Indicate the gain (Volume amplification) applied. Type: float Range: [0.0f - ? ] A value of 1.0 means un-attenuated/unchanged. Each division by 2 equals an attenuation of -6dB. Each multiplicaton with 2 equals an amplification of +6dB. A value of 0.0f is interpreted as zero volume and the channel is effectively disabled. @@ -27,6 +29,7 @@ namespace OpenTK.OpenAL.Enums EfxMetersPerUnit = 0x20004, } + ///A list of valid Math.Vector3 Listener/GetListener parameters public enum ALListener3f : int { ///Specify the current 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. Listener position is always in the world coordinate system. @@ -36,12 +39,14 @@ namespace OpenTK.OpenAL.Enums Velocity = 0x1006, } + ///A list of valid float[] Listener/GetListener parameters public enum ALListenerfv : int { ///Indicate Listener orientation. Expects two Vector3, At followed by Up. Orientation = 0x100F, } + ///A list of valid 32-Bits Float Source/GetSource parameters public enum ALSourcef : int { ///Source specific reference distance. Type: float Range: [0.0f - float.PositiveInfinity] At 0.0f, no distance attenuation occurs. Type: float Default: 1.0f. @@ -88,6 +93,7 @@ namespace OpenTK.OpenAL.Enums } + ///A list of valid Math.Vector3 Source/GetSource parameters public enum ALSource3f : int { ///Specify the current 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. Listener position is always in the world coordinate system. @@ -100,6 +106,7 @@ namespace OpenTK.OpenAL.Enums Direction = 0x1005, } + ///A list of valid 8-Bits boolean Source/GetSource parameters public enum ALSourceb : int { ///Indicate that the Source has relative coordinates. Type: bool Range: [True, False] @@ -118,6 +125,7 @@ namespace OpenTK.OpenAL.Enums EfxAuxiliarySendFilterGainHighFrequencyAuto = 0x2000C, } + ///A list of valid Int32 Source parameters public enum ALSourcei : int { ///The playback position, expressed in bytes. @@ -136,19 +144,21 @@ namespace OpenTK.OpenAL.Enums EfxDirectFilter = 0x20005, } + ///A list of valid 3x Int32 Source/GetSource parameters public enum ALSource3i : int { ///(EFX Extension) This Source property is used to establish connections between Sources and Auxiliary Effect Slots. For a Source to feed an Effect that has been loaded into an Auxiliary Effect Slot the application must configure one of the Source’s auxiliary sends. This process involves setting 3 variables – the destination Auxiliary Effect Slot ID, the Auxiliary Send number, and an optional Filter ID. Type: uint Range: any valid Filter Handle. EfxAuxiliarySendFilter = 0x20006, } + ///A list of valid Int32 GetSource parameters public enum ALGetSourcei : int { - ///The playback position, expressed in bytes. - ByteOffset = 0x1026, // AL_EXT_OFFSET extension. + ///The playback position, expressed in bytes. AL_EXT_OFFSET Extension. + ByteOffset = 0x1026, - ///The playback position, expressed in samples. - SampleOffset = 0x1025, // AL_EXT_OFFSET extension. + ///The playback position, expressed in samples. AL_EXT_OFFSET Extension. + SampleOffset = 0x1025, ///Indicate the Buffer to provide sound samples. Type: uint Range: any valid Buffer Handle. Buffer = 0x1009, @@ -166,13 +176,15 @@ namespace OpenTK.OpenAL.Enums SourceType = 0x1027, } + /* public enum ALDeprecated : int { ///Deprecated. Specify the channel mask. (Creative) Type: uint Range: [0 - 255] ChannelMask = 0x3000, } + */ - ///Source state information. + ///Source state information, can be retrieved by AL.Source() with ALSourcei.SourceState. public enum ALSourceState : int { ///Default State when loaded, can be manually set with AL.SourceRewind(). @@ -188,7 +200,7 @@ namespace OpenTK.OpenAL.Enums Stopped = 0x1014, } - ///Source type (Static, Streaming or undetermined) + ///Source type information, can be retrieved by AL.Source() with ALSourcei.SourceType. public enum ALSourceType : int { ///Source is Static if a Buffer has been attached using AL.Source with the parameter Sourcei.Buffer. @@ -217,6 +229,7 @@ namespace OpenTK.OpenAL.Enums Stereo16 = 0x1103, } + ///A list of valid Int32 GetBuffer parameters public enum ALGetBufferi : int { ///Sound sample's frequency, in units of Hertz [Hz]. This is the number of samples per second. Half of the sample frequency marks the maximum significant frequency component. @@ -247,6 +260,7 @@ namespace OpenTK.OpenAL.Enums Processed = 0x2012, } + /// Returned by AL.GetError public enum ALError : int { ///No OpenAL Error. @@ -272,6 +286,7 @@ namespace OpenTK.OpenAL.Enums OutOfMemory = 0xA005, } + ///A list of valid string AL.Get() parameters public enum ALGetString : int { /// Gets the Vendor name. @@ -287,6 +302,7 @@ namespace OpenTK.OpenAL.Enums Extensions = 0xB004, } + ///A list of valid 32-Bits Float AL.Get() parameters public enum ALGetFloat : int { ///Doppler scale. Default 1.0f @@ -299,12 +315,14 @@ namespace OpenTK.OpenAL.Enums SpeedOfSound = 0xC003, } + ///A list of valid Int32 AL.Get() parameters public enum ALGetInteger : int { ///See enum ALDistanceModel. DistanceModel = 0xD000, } + /// Used by AL.DistanceModel(), the distance model can be retrieved by AL.Get() with ALGetInteger.DistanceModel public enum ALDistanceModel : int { ///Bypasses all distance attenuation calculation for all Sources. @@ -321,7 +339,7 @@ namespace OpenTK.OpenAL.Enums ///AL_EXT_LINEAR_DISTANCE extension. LinearDistanceClamped = 0xD004, - + ///AL_EXT_EXPONENT_DISTANCE extension. ExponentDistance = 0xD005, diff --git a/Source/OpenTK/OpenAL/EfxFunctions.cs b/Source/OpenTK/OpenAL/EfxFunctions.cs index b8545b1c..cda2d231 100644 --- a/Source/OpenTK/OpenAL/EfxFunctions.cs +++ b/Source/OpenTK/OpenAL/EfxFunctions.cs @@ -8,27 +8,87 @@ #endregion using System; +using System.Diagnostics; using System.Runtime.InteropServices; using OpenTK.Math; namespace OpenTK.OpenAL { + public partial class EfxExtension { + #region Helpers + + #region BindEffect + + /// (Helper) Selects the Effect type used by this Effect handle. + /// Effect id returned from a successful call to GenEffects. + /// Effect type. + [CLSCompliant(false)] + public void BindEffect( uint eid,Enums.EfxEffectType type ) + { + Imported_alEffecti(eid,Enums.EfxEffecti.EffectType,(int) type); + } + + #endregion BindEffect + + #region BindFilterToSource + + /// (Helper) reroutes the output of a Source through a Filter. + /// A valid Source handle. + /// A valid Filter handle. + [CLSCompliant(false)] + public void BindFilterToSource( uint source,uint filter ) + { + AL.Source(source,Enums.ALSourcei.EfxDirectFilter,(int) filter); + } + + #endregion BindFilterToSource + + #region BindEffectToAuxiliarySlot + + /// (Helper) Attaches an Effect to an Auxiliary Effect Slot. + /// The slot handle to attach the Effect to. + /// The Effect handle that is being attached. + [CLSCompliant(false)] + public void BindEffectToAuxiliarySlot( uint auxiliaryeffectslot,uint effect ) + { + AuxiliaryEffectSlot(auxiliaryeffectslot,Enums.EfxAuxiliaryi.EffectslotEffect,(int) effect); + } + + #endregion BindEffectToAuxiliarySlot + + #region BindSourceToAuxiliarySlot + + /// (Helper) Reroutes a Source's output into an Auxiliary Effect Slot. + /// The Source handle who's output is forwarded. + /// The Auxiliary Effect Slot handle that receives input from the Source. + /// Every Source has only a limited number of slots it can feed data to. The number must stay below AlcContextAttributes.EfxMaxAuxiliarySends + /// Filter handle to be attached between Source ouput and Auxiliary Slot input. Use 0 or EfxFilterType.FilterNull for no filter. + [CLSCompliant(false)] + public void BindSourceToAuxiliarySlot( uint source,uint slot,int slotnumber,uint filter ) + { + AL.Source(source,Enums.ALSource3i.EfxAuxiliarySendFilter,(int) slot,slotnumber,(int) filter); + } + + #endregion BindSourceToAuxiliarySlot + + #endregion Helpers + #region Effect Object #region alGenEffects - // typedef void (__cdecl *LPALGENEFFECTS)( ALsizei n, ALuint* effects ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alGenEffects( int n,[Out] uint* effects ); + // typedef void (__cdecl *LPALGENEFFECTS)( ALsizei n, ALuint* effects ); //[CLSCompliant(false)] private Delegate_alGenEffects Imported_alGenEffects; - /// The alGenEffects function is used to create one or more Effect objects. An Effect object stores an effect type and a set of parameter values to control that Effect. In order to use an Effect it must be attached to an Auxiliary Effect Slot object - /// After creation an Effect has no type (AL_EFFECT_NULL), so before it can be used to store a set of parameters, the application must specify what type of effect should be stored in the object, using alEffecti. + /// The GenEffects function is used to create one or more Effect objects. An Effect object stores an effect type and a set of parameter values to control that Effect. In order to use an Effect it must be attached to an Auxiliary Effect Slot object + /// After creation an Effect has no type (EfxEffectType.Null), so before it can be used to store a set of parameters, the application must specify what type of effect should be stored in the object, using Effect() with EfxEffecti. /// Number of Effects to be created. /// Pointer addressing sufficient memory to store n Effect object identifiers. [CLSCompliant(false)] @@ -62,14 +122,14 @@ namespace OpenTK.OpenAL #region alDeleteEffects - // typedef void (__cdecl *LPALDELETEEFFECTS)( ALsizei n, ALuint* effects ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alDeleteEffects( int n,[In] uint* effects ); + // typedef void (__cdecl *LPALDELETEEFFECTS)( ALsizei n, ALuint* effects ); //[CLSCompliant(false)] private Delegate_alDeleteEffects Imported_alDeleteEffects; - /// The alDeleteEffects function is used to delete and free resources for Effect objects previously created with alGenEffects. + /// The DeleteEffects function is used to delete and free resources for Effect objects previously created with GenEffects. /// Number of Effects to be deleted. /// Pointer to n Effect object identifiers. [CLSCompliant(false)] @@ -102,14 +162,14 @@ namespace OpenTK.OpenAL #region alIsEffect - // typedef ALboolean (__cdecl *LPALISEFFECT)( ALuint eid ); //[CLSCompliant(false)] private delegate bool Delegate_alIsEffect( uint eid ); + // typedef ALboolean (__cdecl *LPALISEFFECT)( ALuint eid ); //[CLSCompliant(false)] private Delegate_alIsEffect Imported_alIsEffect; - /// The alIsEffect function is used to determine if an object identifier is a valid Effect object. + /// The IsEffect function is used to determine if an object identifier is a valid Effect object. /// Effect identifier to validate. /// True if the identifier is a valid Effect, False otherwise. [CLSCompliant(false)] @@ -122,9 +182,9 @@ namespace OpenTK.OpenAL #region alEffecti - // typedef void (__cdecl *LPALEFFECTI)( ALuint eid, ALenum param, ALint value); //[CLSCompliant(false)] private delegate void Delegate_alEffecti( uint eid,Enums.EfxEffecti param,int value ); + // typedef void (__cdecl *LPALEFFECTI)( ALuint eid, ALenum param, ALint value); //[CLSCompliant(false)] private Delegate_alEffecti Imported_alEffecti; @@ -139,22 +199,13 @@ namespace OpenTK.OpenAL Imported_alEffecti(eid,param,value); } - /// (Helper) Selects the Effect type used by this Effect handle. - /// Effect id returned from a successful call to Efx.GenEffects. - /// Effect type. - [CLSCompliant(false)] - public void BindEffect( uint eid,Enums.EfxEffectType type ) - { - Imported_alEffecti(eid,Enums.EfxEffecti.EffectType,(int) type); - } - #endregion alEffecti #region alEffectf - // typedef void (__cdecl *LPALEFFECTF)( ALuint eid, ALenum param, ALfloat value); //[CLSCompliant(false)] private delegate void Delegate_alEffectf( uint eid,Enums.EfxEffectf param,float value ); + // typedef void (__cdecl *LPALEFFECTF)( ALuint eid, ALenum param, ALfloat value); //[CLSCompliant(false)] private Delegate_alEffectf Imported_alEffectf; @@ -174,8 +225,8 @@ namespace OpenTK.OpenAL #region alEffectfv //[CLSCompliant(false)] - unsafe private delegate void Delegate_alEffectfv(uint eid, Enums.EfxEffect3f param, [In] float* values); - // typedef void (__cdecl *LPALEFFECTFV)( ALuint eid, ALenum param, ALfloat* values ); + unsafe private delegate void Delegate_alEffectfv( uint eid,Enums.EfxEffect3f param,[In] float* values ); + // typedef void (__cdecl *LPALEFFECTFV)( ALuint eid, ALenum param, ALfloat* values ); //[CLSCompliant(false)] private Delegate_alEffectfv Imported_alEffectfv; @@ -196,9 +247,9 @@ namespace OpenTK.OpenAL #region alGetEffecti - // typedef void (__cdecl *LPALGETEFFECTI)( ALuint eid, ALenum pname, ALint* value ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alGetEffecti( uint eid,Enums.EfxEffecti pname,[Out] int* value ); + // typedef void (__cdecl *LPALGETEFFECTI)( ALuint eid, ALenum pname, ALint* value ); //[CLSCompliant(false)] private Delegate_alGetEffecti Imported_alGetEffecti; @@ -223,9 +274,9 @@ namespace OpenTK.OpenAL #region alGetEffectf - // typedef void (__cdecl *LPALGETEFFECTF)( ALuint eid, ALenum pname, ALfloat* value ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alGetEffectf( uint eid,Enums.EfxEffectf pname,[Out]float* value ); + // typedef void (__cdecl *LPALGETEFFECTF)( ALuint eid, ALenum pname, ALfloat* value ); //[CLSCompliant(false)] private Delegate_alGetEffectf Imported_alGetEffectf; @@ -249,8 +300,7 @@ namespace OpenTK.OpenAL #endregion alGetEffectf #region alGetEffectfv - - + //[CLSCompliant(false)] unsafe private delegate void Delegate_alGetEffectfv( uint eid,Enums.EfxEffect3f param,[Out] float* values ); // typedef void (__cdecl *LPALGETEFFECTFV)( ALuint eid, ALenum pname, ALfloat* values ); @@ -285,15 +335,15 @@ namespace OpenTK.OpenAL #region alGenFilters - // typedef void (__cdecl *LPALGENFILTERS)( ALsizei n, ALuint* filters ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alGenFilters( int n,[Out] uint* filters ); + // typedef void (__cdecl *LPALGENFILTERS)( ALsizei n, ALuint* filters ); //[CLSCompliant(false)] private Delegate_alGenFilters Imported_alGenFilters; - /// The alGenFilters function is used to create one or more Filter objects. A Filter object stores a filter type and a set of parameter values to control that Filter. Filter objects can be attached to Sources as Direct Filters or Auxiliary Send Filters. - /// After creation a Filter has no type (AL_FILTER_NULL), so before it can be used to store a set of parameters, the application must specify what type of filter should be stored in the object, using alFilteri. + /// The GenFilters function is used to create one or more Filter objects. A Filter object stores a filter type and a set of parameter values to control that Filter. Filter objects can be attached to Sources as Direct Filters or Auxiliary Send Filters. + /// After creation a Filter has no type (EfxFilterType.Null), so before it can be used to store a set of parameters, the application must specify what type of filter should be stored in the object, using Filter() with EfxFilteri. /// Number of Filters to be created. /// Pointer addressing sufficient memory to store n Filter object identifiers. [CLSCompliant(false)] @@ -327,14 +377,14 @@ namespace OpenTK.OpenAL #region alDeleteFilters - // typedef void (__cdecl *LPALDELETEFILTERS)( ALsizei n, ALuint* filters ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alDeleteFilters( int n,[In] uint* filters ); + // typedef void (__cdecl *LPALDELETEFILTERS)( ALsizei n, ALuint* filters ); //[CLSCompliant(false)] private Delegate_alDeleteFilters Imported_alDeleteFilters; - /// The alDeleteFilters function is used to delete and free resources for Filter objects previously created with alGenFilters. + /// The DeleteFilters function is used to delete and free resources for Filter objects previously created with GenFilters. /// Number of Filters to be deleted. /// Pointer to n Filter object identifiers. [CLSCompliant(false)] @@ -367,14 +417,14 @@ namespace OpenTK.OpenAL #region alIsFilter - // typedef ALboolean (__cdecl *LPALISFILTER)( ALuint fid ); //[CLSCompliant(false)] private delegate bool Delegate_alIsFilter( uint fid ); + // typedef ALboolean (__cdecl *LPALISFILTER)( ALuint fid ); //[CLSCompliant(false)] private Delegate_alIsFilter Imported_alIsFilter; - /// The alIsFilter function is used to determine if an object identifier is a valid Filter object. + /// The IsFilter function is used to determine if an object identifier is a valid Filter object. /// Effect identifier to validate. /// True if the identifier is a valid Filter, False otherwise. [CLSCompliant(false)] @@ -387,9 +437,9 @@ namespace OpenTK.OpenAL #region alFilteri - // typedef void (__cdecl *LPALFILTERI)( ALuint fid, ALenum param, ALint value ); //[CLSCompliant(false)] private delegate void Delegate_alFilteri( uint fid,Enums.EfxFilteri param,int value ); + // typedef void (__cdecl *LPALFILTERI)( ALuint fid, ALenum param, ALint value ); //[CLSCompliant(false)] private Delegate_alFilteri Imported_alFilteri; @@ -404,13 +454,13 @@ namespace OpenTK.OpenAL Imported_alFilteri(fid,param,value); } - #endregion alFilteri( uint fid,Enums.EfxFilteri param,int value ) + #endregion alFilteri #region alFilterf - // typedef void (__cdecl *LPALFILTERF)( ALuint fid, ALenum param, ALfloat value); //[CLSCompliant(false)] private delegate void Delegate_alFilterf( uint fid,Enums.EfxFilterf param,float value ); + // typedef void (__cdecl *LPALFILTERF)( ALuint fid, ALenum param, ALfloat value); //[CLSCompliant(false)] private Delegate_alFilterf Imported_alFilterf; @@ -429,9 +479,9 @@ namespace OpenTK.OpenAL #region alGetFilteri - // typedef void (__cdecl *LPALGETFILTERI)( ALuint fid, ALenum pname, ALint* value ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alGetFilteri( uint fid,Enums.EfxFilteri pname,[Out] int* value ); + // typedef void (__cdecl *LPALGETFILTERI)( ALuint fid, ALenum pname, ALint* value ); //[CLSCompliant(false)] private Delegate_alGetFilteri Imported_alGetFilteri; @@ -456,9 +506,9 @@ namespace OpenTK.OpenAL #region alGetFilterf - // typedef void (__cdecl *LPALGETFILTERF)( ALuint fid, ALenum pname, ALfloat* value ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alGetFilterf( uint fid,Enums.EfxFilterf pname,[Out] float* value ); + // typedef void (__cdecl *LPALGETFILTERF)( ALuint fid, ALenum pname, ALfloat* value ); //[CLSCompliant(false)] private Delegate_alGetFilterf Imported_alGetFilterf; @@ -491,16 +541,18 @@ namespace OpenTK.OpenAL #region Auxiliary Effect Slot Object + + #region alGenAuxiliaryEffectSlots - // typedef void (__cdecl *LPALGENAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alGenAuxiliaryEffectSlots( int n,[Out] uint* slots ); + // typedef void (__cdecl *LPALGENAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots ); //[CLSCompliant(false)] private Delegate_alGenAuxiliaryEffectSlots Imported_alGenAuxiliaryEffectSlots; - /// The alGenAuxiliaryEffectSlots function is used to create one or more Auxiliary Effect Slots. The number of slots that can be created will be dependant upon the Open AL device used. + /// The GenAuxiliaryEffectSlots function is used to create one or more Auxiliary Effect Slots. The number of slots that can be created will be dependant upon the Open AL device used. /// An application should check the OpenAL error state after making this call to determine if the Effect Slot was successfully created. If the function call fails then none of the requested Effect Slots are created. A good strategy for creating any OpenAL object is to use a for-loop and generate one object each loop iteration and then check for an error condition. If an error is set then the loop can be broken and the application can determine if sufficient resources are available. /// Number of Auxiliary Effect Slots to be created. /// Pointer addressing sufficient memory to store n Effect Slot object identifiers. @@ -535,14 +587,14 @@ namespace OpenTK.OpenAL #region alDeleteAuxiliaryEffectSlots - // typedef void (__cdecl *LPALDELETEAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alDeleteAuxiliaryEffectSlots( int n,[In] uint* slots ); + // typedef void (__cdecl *LPALDELETEAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots ); //[CLSCompliant(false)] private Delegate_alDeleteAuxiliaryEffectSlots Imported_alDeleteAuxiliaryEffectSlots; - /// The alDeleteAuxiliaryEffectSlots function is used to delete and free resources for Auxiliary Effect Slots previously created with alGenAuxiliaryEffectSlots. + /// The DeleteAuxiliaryEffectSlots function is used to delete and free resources for Auxiliary Effect Slots previously created with GenAuxiliaryEffectSlots. /// Number of Auxiliary Effect Slots to be deleted. /// Pointer to n Effect Slot object identifiers. [CLSCompliant(false)] @@ -575,14 +627,14 @@ namespace OpenTK.OpenAL #region alIsAuxiliaryEffectSlot - // typedef ALboolean (__cdecl *LPALISAUXILIARYEFFECTSLOT)( ALuint slot ); //[CLSCompliant(false)] private delegate bool Delegate_alIsAuxiliaryEffectSlot( uint slot ); + // typedef ALboolean (__cdecl *LPALISAUXILIARYEFFECTSLOT)( ALuint slot ); //[CLSCompliant(false)] private Delegate_alIsAuxiliaryEffectSlot Imported_alIsAuxiliaryEffectSlot; - /// The alIsAuxiliaryEffectSlot function is used to determine if an object identifier is a valid Auxiliary Effect Slot object. + /// The IsAuxiliaryEffectSlot function is used to determine if an object identifier is a valid Auxiliary Effect Slot object. /// Effect Slot object identifier to validate. /// True if the identifier is a valid Auxiliary Effect Slot, False otherwise. [CLSCompliant(false)] @@ -595,9 +647,9 @@ namespace OpenTK.OpenAL #region alAuxiliaryEffectSloti - // typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum param, ALint value ); //[CLSCompliant(false)] private delegate void Delegate_alAuxiliaryEffectSloti( uint asid,Enums.EfxAuxiliaryi param,int value ); + // typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum param, ALint value ); //[CLSCompliant(false)] private Delegate_alAuxiliaryEffectSloti Imported_alAuxiliaryEffectSloti; @@ -612,22 +664,13 @@ namespace OpenTK.OpenAL Imported_alAuxiliaryEffectSloti(asid,param,value); } - /// (Helper) Attaches an Effect to an Auxiliary Effect Slot. - /// The slot handle to attach the Effect to. - /// The Effect handle that is being attached. - [CLSCompliant(false)] - public void BindEffectToAuxiliarySlot( uint auxiliaryeffectslot,uint effect ) - { - AuxiliaryEffectSlot(auxiliaryeffectslot,Enums.EfxAuxiliaryi.EffectslotEffect,(int) effect); - } - #endregion alAuxiliaryEffectSloti #region alAuxiliaryEffectSlotf - // typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum param, ALfloat value ); //[CLSCompliant(false)] private delegate void Delegate_alAuxiliaryEffectSlotf( uint asid,Enums.EfxAuxiliaryf param,float value ); + // typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum param, ALfloat value ); //[CLSCompliant(false)] private Delegate_alAuxiliaryEffectSlotf Imported_alAuxiliaryEffectSlotf; @@ -646,9 +689,9 @@ namespace OpenTK.OpenAL #region alGetAuxiliaryEffectSloti - // typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum pname, ALint* value ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alGetAuxiliaryEffectSloti( uint asid,Enums.EfxAuxiliaryi pname,[Out] int* value ); + // typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum pname, ALint* value ); //[CLSCompliant(false)] private Delegate_alGetAuxiliaryEffectSloti Imported_alGetAuxiliaryEffectSloti; @@ -673,9 +716,9 @@ namespace OpenTK.OpenAL #region alGetAuxiliaryEffectSlotf - // typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum pname, ALfloat* value ); //[CLSCompliant(false)] unsafe private delegate void Delegate_alGetAuxiliaryEffectSlotf( uint asid,Enums.EfxAuxiliaryf pname,[Out] float* value ); + // typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum pname, ALfloat* value ); //[CLSCompliant(false)] private Delegate_alGetAuxiliaryEffectSlotf Imported_alGetAuxiliaryEffectSlotf; @@ -720,10 +763,10 @@ namespace OpenTK.OpenAL if ( Alc.IsExtensionPresent(Alc.GetContextsDevice(Alc.GetCurrentContext( )),"ALC_EXT_EFX") == false ) { - Console.WriteLine("Extension unknown."); + Trace.WriteLine("Efx Extension ALC_EXT_EFX is unknown to the Device."); return; } - Console.WriteLine("ALC_EXT_EFX found."); + // Console.WriteLine("ALC_EXT_EFX found. Efx can be used."); try { @@ -738,10 +781,10 @@ namespace OpenTK.OpenAL Imported_alGetEffectfv = (Delegate_alGetEffectfv) Marshal.GetDelegateForFunctionPointer(AL.GetProcAddress("alGetEffectfv"),typeof(Delegate_alGetEffectfv)); } catch ( Exception e ) { - Console.WriteLine("Failed to marshal Effect functions. " + e.ToString( )); + Trace.WriteLine("Failed to marshal Effect functions. " + e.ToString( )); return; } - Console.WriteLine("Effect functions appear to be ok."); + // Console.WriteLine("Effect functions appear to be ok."); try { @@ -754,10 +797,10 @@ namespace OpenTK.OpenAL Imported_alGetFilterf = (Delegate_alGetFilterf) Marshal.GetDelegateForFunctionPointer(AL.GetProcAddress("alGetFilterf"),typeof(Delegate_alGetFilterf)); } catch ( Exception e ) { - Console.WriteLine("Failed to marshal Filter functions. " + e.ToString( )); + Trace.WriteLine("Failed to marshal Filter functions. " + e.ToString( )); return; } - Console.WriteLine("Filter functions appear to be ok."); + // Console.WriteLine("Filter functions appear to be ok."); try { @@ -770,10 +813,10 @@ namespace OpenTK.OpenAL Imported_alGetAuxiliaryEffectSlotf = (Delegate_alGetAuxiliaryEffectSlotf) Marshal.GetDelegateForFunctionPointer(AL.GetProcAddress("alGetAuxiliaryEffectSlotf"),typeof(Delegate_alGetAuxiliaryEffectSlotf)); } catch ( Exception e ) { - Console.WriteLine("Failed to marshal AuxiliaryEffectSlot functions. " + e.ToString( )); + Trace.WriteLine("Failed to marshal AuxiliaryEffectSlot functions. " + e.ToString( )); return; } - Console.WriteLine("Auxiliary Effect Slot functions appear to be ok."); + // Console.WriteLine("Auxiliary Effect Slot functions appear to be ok."); // didn't return so far, everything went fine. _valid = true; diff --git a/Source/OpenTK/OpenAL/EfxTokens.cs b/Source/OpenTK/OpenAL/EfxTokens.cs index 8454ddb6..be979504 100644 --- a/Source/OpenTK/OpenAL/EfxTokens.cs +++ b/Source/OpenTK/OpenAL/EfxTokens.cs @@ -11,232 +11,213 @@ using System; namespace OpenTK.OpenAL.Enums { - // Constants, might be removed if inline docu is sufficiently describing it - // AL chorus effect parameter ranges and defaults - // AL_CHORUS_WAVEFORM_SINUSOID 0 - // AL_CHORUS_WAVEFORM_TRIANGLE 1 - - // AL flanger effect parameter ranges and defaults - // AL_FLANGER_WAVEFORM_SINUSOID 0 - // AL_FLANGER_WAVEFORM_TRIANGLE 1 - - // AL ring modulator effect parameter ranges and defaults - // AL_RING_MODULATOR_SINUSOID 0 - // AL_RING_MODULATOR_SAWTOOTH 1 - // AL_RING_MODULATOR_SQUARE 2 - - // AL vocal morpher effect parameter ranges and defaults - // AL_VOCAL_MORPHER_WAVEFORM_SINUSOID 0 - // AL_VOCAL_MORPHER_WAVEFORM_TRIANGLE 1 - // AL_VOCAL_MORPHER_WAVEFORM_SAWTOOTH 2 - - // AL frequency shifter effect parameter ranges and defaults - // AL_FREQUENCY_SHIFTER_DIRECTION_DOWN 0 - // AL_FREQUENCY_SHIFTER_DIRECTION_UP 1 - // AL_FREQUENCY_SHIFTER_DIRECTION_OFF 2 #region Effect + ///A list of valid 32-Bits Float Effect/GetEffect parameters public enum EfxEffectf : int { - ///Reverb Parameter. Range [0.0f .. 1.0f] Default: 0.1f + ///Reverb Modal Density controls the coloration of the late reverb. Lowering the value adds more coloration to the late reverb. Range [0.0f .. 1.0f] Default: 1.0f ReverbDensity = 0x0001, - ///Reverb Parameter. Range [0.0f .. 1.0f] Default: 0.1f + ///The Reverb Diffusion property controls the echo density in the reverberation decay. The default 1.0f provides the highest density. Reducing diffusion gives the reverberation a more "grainy" character that is especially noticeable with percussive sound sources. If you set a diffusion value of 0.0f, the later reverberation sounds like a succession of distinct echoes. Range [0.0f .. 1.0f] Default: 1.0f ReverbDiffusion = 0x0002, - ///Reverb Parameter. Range [0.0f .. 1.0f] Default: 0.32f + ///The Reverb Gain property is the master volume control for the reflected sound - both early reflections and reverberation - that the reverb effect adds to all sound sources. Ranges from 1.0 (0db) (the maximum amount) to 0.0 (-100db) (no reflected sound at all) are accepted. Units: Linear gain Range [0.0f .. 1.0f] Default: 0.32f ReverbGain = 0x0003, - ///Reverb Parameter. Range [0.0f .. 1.0f] Default: 0.89f + ///The Reverb Gain HF property further tweaks reflected sound by attenuating it at high frequencies. It controls a low-pass filter that applies globally to the reflected sound of all sound sources feeding the particular instance of the reverb effect. Ranges from 1.0f (0db) (no filter) to 0.0f (-100db) (virtually no reflected sound) are accepted. Units: Linear gain Range [0.0f .. 1.0f] Default: 0.89f ReverbGainHF = 0x0004, - ///Reverb Parameter. Unit: Seconds Range [0.1f .. 20.0f] Default: 1.49f + ///The Decay Time property sets the reverberation decay time. It ranges from 0.1f (typically a small room with very dead surfaces) to 20.0 (typically a large room with very live surfaces). Unit: Seconds Range [0.1f .. 20.0f] Default: 1.49f ReverbDecayTime = 0x0005, - ///Reverb Parameter. Range [0.1f .. 2.0f] Default: 0.83f + ///The Decay HF Ratio property sets the spectral quality of the Decay Time parameter. It is the ratio of high-frequency decay time relative to the time set by Decay Time.. Unit: linear multiplier Range [0.1f .. 2.0f] Default: 0.83f ReverbDecayHFRatio = 0x0006, - ///Reverb Parameter. Range [0.0f .. 3.16f] Default: 0.05f + ///The Reflections Gain property controls the overall amount of initial reflections relative to the Gain property. The value of Reflections Gain ranges from a maximum of 3.16f (+10 dB) to a minimum of 0.0f (-100 dB) (no initial reflections at all), and is corrected by the value of the Gain property. Unit: Linear gain Range [0.0f .. 3.16f] Default: 0.05f ReverbReflectionsGain = 0x0007, - ///Reverb Parameter. Unit: Seconds Range [0.0f .. 0.3f] Default: 0.007f + ///The Reflections Delay property is the amount of delay between the arrival time of the direct path from the source to the first reflection from the source. It ranges from 0 to 300 milliseconds. Unit: Seconds Range [0.0f .. 0.3f] Default: 0.007f ReverbReflectionsDelay = 0x0008, - ///Reverb Parameter. Range [0.0f .. 10.0f] Default: 1.26f + ///The Late Reverb Gain property controls the overall amount of later reverberation relative to the Gain property. The value of Late Reverb Gain ranges from a maximum of 10.0f (+20 dB) to a minimum of 0.0f (-100 dB) (no late reverberation at all). Unit: Linear gain Range [0.0f .. 10.0f] Default: 1.26f ReverbLateReverbGain = 0x0009, - ///Reverb Parameter. Unit: Seconds Range [0.0f .. 0.1f] Default: 0.011f + ///The Late Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Unit: Seconds Range [0.0f .. 0.1f] Default: 0.011f ReverbLateReverbDelay = 0x000A, - ///Reverb Parameter. Range [0.892f .. 1.0f] Default: 0.994f + ///The Air Absorption Gain HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium and applies to reflected sound only. Unit: Linear gain per meter Range [0.892f .. 1.0f] Default: 0.994f ReverbAirAbsorptionGainHF = 0x000B, - ///Reverb Parameter. Range [0.0f .. 10.0f] Default: 0.0f + ///The Room Rolloff Factor property is one of two methods available to attenuate the reflected sound (containing both reflections and reverberation) according to source-listener distance. It's defined the same way as OpenAL's Rolloff Factor, but operates on reverb sound instead of direct-path sound. Unit: Linear multiplier Range [0.0f .. 10.0f] Default: 0.0f ReverbRoomRolloffFactor = 0x000C, - ///Chorus Parameter. Unit: Hz Range [0.0f .. 10.0f] Default: 1.1f + ///This property sets the modulation rate of the low-frequency oscillator that controls the delay time of the delayed signals. Unit: Hz Range [0.0f .. 10.0f] Default: 1.1f ChorusRate = 0x0003, - ///Chorus Parameter. Range [0.0f .. 1.0f] Default: 0.1f + ///This property controls the amount by which the delay time is modulated by the low-frequency oscillator. Range [0.0f .. 1.0f] Default: 0.1f ChorusDepth = 0x0004, - ///Chorus Parameter. Range [-1.0f .. +1.0f] Default: +0.25f + ///This property controls the amount of processed signal that is fed back to the input of the chorus effect. Negative values will reverse the phase of the feedback signal. At full magnitude the identical sample will repeat endlessly. Range [-1.0f .. +1.0f] Default: +0.25f ChorusFeedback = 0x0005, - ///Chorus Parameter. Unit: Seconds Range [0.0f .. 0.016f] Default: 0.016f + ///This property controls the average amount of time the sample is delayed before it is played back, and with feedback, the amount of time between iterations of the sample. Larger values lower the pitch. Unit: Seconds Range [0.0f .. 0.016f] Default: 0.016f ChorusDelay = 0x0006, - ///Distortion Parameter. Range [0.0f .. 1.0f] Default: 0.2f + ///This property controls the shape of the distortion. The higher the value for Edge, the "dirtier" and "fuzzier" the effect. Range [0.0f .. 1.0f] Default: 0.2f DistortionEdge = 0x0001, - ///Distortion Parameter. Range [0.01f .. 1.0f] Default: 0.05f + ///This property allows you to attenuate the distorted sound. Range [0.01f .. 1.0f] Default: 0.05f DistortionGain = 0x0002, - ///Distortion Parameter. Unit: Hz Range [80.0f .. 24000.0f] Default: 8000.0f + ///Input signals can have a low pass filter applied, to limit the amount of high frequency signal feeding into the distortion effect. Unit: Hz Range [80.0f .. 24000.0f] Default: 8000.0f DistortionLowpassCutoff = 0x0003, - ///Distortion Parameter. Unit: Hz Range [80.0f .. 24000.0f] Default: 3600.0f + ///This property controls the frequency at which the post-distortion attenuation (Distortion Gain) is active. Unit: Hz Range [80.0f .. 24000.0f] Default: 3600.0f DistortionEQCenter = 0x0004, - ///Distortion Parameter. Unit: Hz Range [80.0f .. 24000.0f] Default: 3600.0f + ///This property controls the bandwidth of the post-distortion attenuation. Unit: Hz Range [80.0f .. 24000.0f] Default: 3600.0f DistortionEQBandwidth = 0x0005, - ///Echo Parameter. Unit: Seconds Range [0.0f .. 0.207f] Default: 0.1f + ///This property controls the delay between the original sound and the first "tap", or echo instance. Subsequently, the value for Echo Delay is used to determine the time delay between each "second tap" and the next "first tap". Unit: Seconds Range [0.0f .. 0.207f] Default: 0.1f EchoDelay = 0x0001, - ///Echo Parameter. Unit: Seconds Range [0.0f .. 0.404f] Default: 0.1f + ///This property controls the delay between the "first tap" and the "second tap". Subsequently, the value for Echo LR Delay is used to determine the time delay between each "first tap" and the next "second tap". Unit: Seconds Range [0.0f .. 0.404f] Default: 0.1f EchoLRDelay = 0x0002, - ///Echo Parameter. Range [0.0f .. 0.99f] Default: 0.5f + ///This property controls the amount of high frequency damping applied to each echo. As the sound is subsequently fed back for further echoes, damping results in an echo which progressively gets softer in tone as well as intensity. Range [0.0f .. 0.99f] Default: 0.5f EchoDamping = 0x0003, - ///Echo Parameter. Range [0.0f .. 1.0f] Default: 0.5f + ///This property controls the amount of feedback the output signal fed back into the input. Use this parameter to create "cascading" echoes. At full magnitude, the identical sample will repeat endlessly. Below full magnitude, the sample will repeat and fade. Range [0.0f .. 1.0f] Default: 0.5f EchoFeedback = 0x0004, - ///Echo Parameter. Range [-1.0f .. +1.0f] Default: -1.0f + ///This property controls how hard panned the individual echoes are. With a value of 1.0f, the first "tap" will be panned hard left, and the second "tap" hard right. –1.0f gives the opposite result and values near to 0.0f result in less emphasized panning. Range [-1.0f .. +1.0f] Default: -1.0f EchoSpread = 0x0005, - ///Flanger Parameter. Range [0.0f .. 10.0f] Default: 0.27f + ///The number of times per second the low-frequency oscillator controlling the amount of delay repeats. Range [0.0f .. 10.0f] Default: 0.27f FlangerRate = 0x0003, - ///Flanger Parameter. Range [0.0f .. 1.0f] Default: 1.0f + ///The ratio by which the delay time is modulated by the low-frequency oscillator. Range [0.0f .. 1.0f] Default: 1.0f FlangerDepth = 0x0004, - ///Flanger Parameter. Range [-1.0f .. +1.0f] Default: -0.5f + ///This is the amount of the output signal level fed back into the effect's input. A negative value will reverse the phase of the feedback signal. Range [-1.0f .. +1.0f] Default: -0.5f FlangerFeedback = 0x0005, - ///Flanger Parameter. Unit: Seconds Range [0.0f .. 0.004f] Default: 0.002f + ///The average amount of time the sample is delayed before it is played back. When used with the Feedback property it's the amount of time between iterations of the sample. Unit: Seconds Range [0.0f .. 0.004f] Default: 0.002f FlangerDelay = 0x0006, - ///Frequencyshifter Parameter. Unit: Hz Range [0.0f .. 24000.0f] Default: 0.0f + ///This is the carrier frequency. For carrier frequencies below the audible range, the single sideband modulator may produce phaser effects, spatial effects or a slight pitch-shift. As the carrier frequency increases, the timbre of the sound is affected. Unit: Hz Range [0.0f .. 24000.0f] Default: 0.0f FrequencyShifterFrequency = 0x0001, - ///Vocalmorpher Parameter. Unit: Hz Range [0.0f .. 10.0f] Default: 1.41f + ///This controls the frequency of the low-frequency oscillator used to morph between the two phoneme filters. Unit: Hz Range [0.0f .. 10.0f] Default: 1.41f VocalMorpherRate = 0x0006, - ///Ringmodulator Parameter. Unit: Hz Range [0.0f .. 8000.0f] Default: 440.0f + ///This is the frequency of the carrier signal. If the carrier signal is slowly varying (less than 20 Hz), the result is a slow amplitude variation effect (tremolo). Unit: Hz Range [0.0f .. 8000.0f] Default: 440.0f RingModulatorFrequency = 0x0001, - ///Ringmodulator Parameter. Unit: Hz Range [0.0f .. 24000.0f] Default: 800.0f + ///This controls the cutoff frequency at which the input signal is high-pass filtered before being ring modulated. Unit: Hz Range [0.0f .. 24000.0f] Default: 800.0f RingModulatorHighpassCutoff = 0x0002, - ///Autowah Parameter. Unit: Seconds Range [0.0001f .. 1.0f] Default: 0.06f + ///This property controls the time the filtering effect takes to sweep from minimum to maximum center frequency when it is triggered by input signal. Unit: Seconds Range [0.0001f .. 1.0f] Default: 0.06f AutowahAttackTime = 0x0001, - ///Autowah Parameter. Unit: Seconds Range [0.0001f .. 1.0f] Default: 0.06f + ///This property controls the time the filtering effect takes to sweep from maximum back to base center frequency, when the input signal ends. Unit: Seconds Range [0.0001f .. 1.0f] Default: 0.06f AutowahReleaseTime = 0x0002, - ///Autowah Parameter. Range [2.0f .. 1000.0f] Default: 1000.0f + ///This property controls the resonant peak, sometimes known as emphasis or Q, of the auto-wah band-pass filter. Range [2.0f .. 1000.0f] Default: 1000.0f AutowahResonance = 0x0003, - ///Autowah Parameter. Range [0.00003f .. 31621.0f] Default: 11.22f + ///This property controls the input signal level at which the band-pass filter will be fully opened. Range [0.00003f .. 31621.0f] Default: 11.22f AutowahPeakGain = 0x0004, - ///Equalizer Parameter. Range [0.126f .. 7.943f] Default: 1.0f + ///This property controls amount of cut or boost on the low frequency range. Range [0.126f .. 7.943f] Default: 1.0f EqualizerLowGain = 0x0001, - ///Equalizer Parameter. Unit: Hz Range [50.0f .. 800.0f] Default: 200.0f + ///This property controls the low frequency below which signal will be cut off. Unit: Hz Range [50.0f .. 800.0f] Default: 200.0f EqualizerLowCutoff = 0x0002, - ///Equalizer Parameter. Range [0.126f .. 7.943f] Default: 1.0f + ///This property allows you to cut/boost signal on the "mid1" range. Range [0.126f .. 7.943f] Default: 1.0f EqualizerMid1Gain = 0x0003, - ///Equalizer Parameter. Unit: Hz Range [200.0f .. 3000.0f] Default: 500.0f + ///This property sets the center frequency for the "mid1" range. Unit: Hz Range [200.0f .. 3000.0f] Default: 500.0f EqualizerMid1Center = 0x0004, - ///Equalizer Parameter. Range [0.01f .. 1.0f] Default: 1.0f + ///This property controls the width of the "mid1" range. Range [0.01f .. 1.0f] Default: 1.0f EqualizerMid1Width = 0x0005, - ///Equalizer Parameter. Range [0.126f .. 7.943f] Default: 1.0f + ///This property allows you to cut/boost signal on the "mid2" range. Range [0.126f .. 7.943f] Default: 1.0f EqualizerMid2Gain = 0x0006, - ///Equalizer Parameter. Unit: Hz Range [1000.0f .. 8000.0f] Default: 3000.0f + ///This property sets the center frequency for the "mid2" range. Unit: Hz Range [1000.0f .. 8000.0f] Default: 3000.0f EqualizerMid2Center = 0x0007, - ///Equalizer Parameter. Range [0.01f .. 1.0f] Default: 1.0f + ///This property controls the width of the "mid2" range. Range [0.01f .. 1.0f] Default: 1.0f EqualizerMid2Width = 0x0008, - ///Equalizer Parameter. Range [0.126f .. 7.943f] Default: 1.0f + ///This property allows to cut/boost the signal at high frequencies. Range [0.126f .. 7.943f] Default: 1.0f EqualizerHighGain = 0x0009, - ///Equalizer Parameter. Unit: Hz Range [4000.0f .. 16000.0f] Default: 6000.0f + ///This property controls the high frequency above which signal will be cut off. Unit: Hz Range [4000.0f .. 16000.0f] Default: 6000.0f EqualizerHighCutoff = 0x000A, - ///EAXReverb effect parameters. Range [0.0f .. 1.0f] Default: 1.0f + + ///Reverb Modal Density controls the coloration of the late reverb. Range [0.0f .. 1.0f] Default: 1.0f EaxReverbDensity = 0x0001, - ///EAXReverb effect parameters. Range [0.0f .. 1.0f] Default: 1.0f + ///The Reverb Diffusion property controls the echo density in the reverberation decay. Range [0.0f .. 1.0f] Default: 1.0f EaxReverbDiffusion = 0x0002, - ///EAXReverb effect parameters. Range [0.0f .. 1.0f] Default: 0.32f + ///Reverb Gain controls the level of the reverberant sound in an environment. A high level of reverb is characteristic of rooms with highly reflective walls and/or small dimensions. Unit: Linear gain Range [0.0f .. 1.0f] Default: 0.32f EaxReverbGain = 0x0003, - ///EAXReverb effect parameters. Range [0.0f .. 1.0f] Default: 0.89f + ///Gain HF is used to attenuate the high frequency content of all the reflected sound in an environment. You can use this property to give a room specific spectral characteristic. Unit: Linear gain Range [0.0f .. 1.0f] Default: 0.89f EaxReverbGainHF = 0x0004, - ///EAXReverb effect parameters. Range [0.0f .. 1.0f] Default: 1.0f + ///Gain LF is the low frequency counterpart to Gain HF. Use this to reduce or boost the low frequency content in an environment. Unit: Linear gain Range [0.0f .. 1.0f] Default: 1.0f EaxReverbGainLF = 0x0005, - ///EAXReverb effect parameters. Unit: Seconds Range [0.1f .. 20.0f] Default: 1.49f + ///The Decay Time property sets the reverberation decay time. It ranges from 0.1f (typically a small room with very dead surfaces) to 20.0f (typically a large room with very live surfaces). Unit: Seconds Range [0.1f .. 20.0f] Default: 1.49f EaxReverbDecayTime = 0x0006, - ///EAXReverb effect parameters. Range [0.1f .. 2.0f] Default: 0.83f + ///Decay HF Ratio scales the decay time of high frequencies relative to the value of the Decay Time property. By changing this value, you are changing the amount of time it takes for the high frequencies to decay compared to the mid frequencies of the reverb. Range [0.1f .. 2.0f] Default: 0.83f EaxReverbDecayHFRatio = 0x0007, - ///EAXReverb effect parameters. Range [0.1f .. 2.0f] Default: 1.0f + ///Decay LF Ratio scales the decay time of low frequencies in the reverberation in the same manner that Decay HF Ratio handles high frequencies. Unit: Linear multiplier Range [0.1f .. 2.0f] Default: 1.0f EaxReverbDecayLFRatio = 0x0008, - ///EAXReverb effect parameters. Range [0.0f .. 3.16f] Default: 0.05f + ///Reflections Gain sets the level of the early reflections in an environment. Early reflections are used as a cue for determining the size of the environment we are in. Unit: Linear gain Range [0.0f .. 3.16f] Default: 0.05f EaxReverbReflectionsGain = 0x0009, - ///EAXReverb effect parameters. Unit: Seconds Range [0.0f .. 0.3f] Default: 0.007f + ///Reflections Delay controls the amount of time it takes for the first reflected wave front to reach the listener, relative to the arrival of the direct-path sound. Unit: Seconds Range [0.0f .. 0.3f] Default: 0.007f EaxReverbReflectionsDelay = 0x000A, - ///EAXReverb effect parameters. Range [0.0f .. 10.0f] Default: 1.26f + ///The Late Reverb Gain property controls the overall amount of later reverberation relative to the Gain property. Range [0.0f .. 10.0f] Default: 1.26f EaxReverbLateReverbGain = 0x000C, - ///EAXReverb effect parameters. Unit: Seconds Range [0.0f .. 0.1f] Default: 0.011f + ///The Late Reverb Delay property defines the begin time of the late reverberation relative to the time of the initial reflection (the first of the early reflections). It ranges from 0 to 100 milliseconds. Unit: Seconds Range [0.0f .. 0.1f] Default: 0.011f EaxReverbLateReverbDelay = 0x000D, - ///EAXReverb effect parameters. Range [0.075f .. 0.25f] Default: 0.25f + ///Echo Time controls the rate at which the cyclic echo repeats itself along the reverberation decay. Range [0.075f .. 0.25f] Default: 0.25f EaxReverbEchoTime = 0x000F, - ///EAXReverb effect parameters. Range [0.0f .. 1.0f] Default: 0.0f + ///Echo Depth introduces a cyclic echo in the reverberation decay, which will be noticeable with transient or percussive sounds. Range [0.0f .. 1.0f] Default: 0.0f EaxReverbEchoDepth = 0x0010, - ///EAXReverb effect parameters. Range [0.04f .. 4.0f] Default: 0.25f + ///Modulation Time controls the speed of the rate of periodic changes in pitch (vibrato). Range [0.04f .. 4.0f] Default: 0.25f EaxReverbModulationTime = 0x0011, - ///EAXReverb effect parameters. Range [0.0f .. 1.0f] Default: 0.0f + ///Modulation Depth controls the amount of pitch change. Low values of Diffusion will contribute to reinforcing the perceived effect by reducing the mixing of overlapping reflections in the reverberation decay. Range [0.0f .. 1.0f] Default: 0.0f EaxReverbModulationDepth = 0x0012, - ///EAXReverb effect parameters. Range [0.892f .. 1.0f] Default: 0.994f + ///The Air Absorption Gain HF property controls the distance-dependent attenuation at high frequencies caused by the propagation medium. It applies to reflected sound only. Range [0.892f .. 1.0f] Default: 0.994f EaxReverbAirAbsorptionGainHF = 0x0013, - ///EAXReverb effect parameters. Unit: Hz Range [1000.0f .. 20000.0f] Default: 5000.0f + ///The property HF reference determines the frequency at which the high-frequency effects created by Reverb properties are measured. Unit: Hz Range [1000.0f .. 20000.0f] Default: 5000.0f EaxReverbHFReference = 0x0014, - ///EAXReverb effect parameters. Unit: Hz Range [20.0f .. 1000.0f] Default: 250.0f + ///The property LF reference determines the frequency at which the low-frequency effects created by Reverb properties are measured. Unit: Hz Range [20.0f .. 1000.0f] Default: 250.0f EaxReverbLFReference = 0x0015, - ///EAXReverb effect parameters. Range [0.0f .. 10.0f] Default: 0.0f + ///The Room Rolloff Factor property is one of two methods available to attenuate the reflected sound (containing both reflections and reverberation) according to source-listener distance. It's defined the same way as OpenAL Rolloff Factor, but operates on reverb sound instead of direct-path sound. Range [0.0f .. 10.0f] Default: 0.0f EaxReverbRoomRolloffFactor = 0x0016, } + ///A list of valid Math.Vector3 Effect/GetEffect parameters public enum EfxEffect3f : int { - /// EAXReverb effect parameters. Unit: Vector3 Default: {0.0f, 0.0f, 0.0f} + /// Reverb Pan does for the Reverb what Reflections Pan does for the Reflections. Unit: Vector3 of length 0f to 1f Default: {0.0f, 0.0f, 0.0f} EaxReverbLateReverbPan = 0x000E, - /// EAXReverb effect parameters. Unit: Vector3 Default: {0.0f, 0.0f, 0.0f} + /// This Vector3 controls the spatial distribution of the cluster of early reflections. The direction of this vector controls the global direction of the reflections, while its magnitude controls how focused the reflections are towards this direction. For legacy reasons this Vector3 follows a left-handed co-ordinate system! Note that OpenAL uses a right-handed coordinate system. Unit: Vector3 of length 0f to 1f Default: {0.0f, 0.0f, 0.0f} EaxReverbReflectionsPan = 0x000B, } + ///A list of valid Int32 Effect/GetEffect parameters public enum EfxEffecti : int { - ///Chorus Parameter. Unit: (0) Sinusoid, (1) Triangle [0 .. 1] Default: 1 + ///This property sets the waveform shape of the low-frequency oscillator that controls the delay time of the delayed signals. Unit: (0) Sinusoid, (1) Triangle Range [0 .. 1] Default: 1 ChorusWaveform = 0x0001, - ///Chorus Parameter. Unit: Degrees Range [-180 .. 180] Default: 90 + ///This property controls the phase difference between the left and right low-frequency oscillators. At zero degrees the two low-frequency oscillators are synchronized. Unit: Degrees Range [-180 .. 180] Default: 90 ChorusPhase = 0x0002, - ///Flanger Parameter. Unit: (0) Sinusoid, (1) Triangle Range [0 .. 1] Default: 1 + ///Selects the shape of the low-frequency oscillator waveform that controls the amount of the delay of the sampled signal. Unit: (0) Sinusoid, (1) Triangle Range [0 .. 1] Default: 1 FlangerWaveform = 0x0001, - ///Flanger Parameter. Range [-180 .. +180] Default: 0 + ///This changes the phase difference between the left and right low-frequency oscillator's. At zero degrees the two low-frequency oscillators are synchronized. Range [-180 .. +180] Default: 0 FlangerPhase = 0x0002, - ///Frequencyshifter Parameter. Unit: (0) Down, (1) Up, (2) Off Range [0 .. 2] Default: 0 + ///These select which internal signals are added together to produce the output. Unit: (0) Down, (1) Up, (2) Off Range [0 .. 2] Default: 0 FrequencyShifterLeftDirection = 0x0002, - ///Frequencyshifter Parameter. Unit: (0) Down, (1) Up, (2) Off Range [0 .. 2] Default: 0 + ///These select which internal signals are added together to produce the output. Unit: (0) Down, (1) Up, (2) Off Range [0 .. 2] Default: 0 FrequencyShifterRightDirection = 0x0003, - ///Vocalmorpher Parameter. Unit: Use enum EfxFormantFilterSettings Range [0 .. 29] Default: 0, AL_VOCAL_MORPHER_PHONEME_A + ///Sets the vocal morpher 4-band formant filter A, used to impose vocal tract effects upon the input signal. The vocal morpher is not necessarily intended for use on voice signals; it is primarily intended for pitched noise effects, vocal-like wind effects, etc. Unit: Use enum EfxFormantFilterSettings Range [0 .. 29] Default: 0, "Phoneme A" VocalMorpherPhonemeA = 0x0001, - ///Vocalmorpher Parameter. Unit: Semitones Range [-24 .. +24] Default: 0 + ///This is used to adjust the pitch of phoneme filter A in 1-semitone increments. Unit: Semitones Range [-24 .. +24] Default: 0 VocalMorpherPhonemeACoarseTuning = 0x0002, - ///Vocalmorpher Parameter. Unit: Use enum EfxFormantFilterSettings Range [0 .. 29] Default: 10, AL_VOCAL_MORPHER_PHONEME_ER + ///Sets the vocal morpher 4-band formant filter B, used to impose vocal tract effects upon the input signal. The vocal morpher is not necessarily intended for use on voice signals; it is primarily intended for pitched noise effects, vocal-like wind effects, etc. Unit: Use enum EfxFormantFilterSettings Range [0 .. 29] Default: 10, "Phoneme ER" VocalMorpherPhonemeB = 0x0003, - ///Vocalmorpher Parameter. Unit: Semitones Range [-24 .. +24] Default: 0 + ///This is used to adjust the pitch of phoneme filter B in 1-semitone increments. Unit: Semitones Range [-24 .. +24] Default: 0 VocalMorpherPhonemeBCoarseTuning = 0x0004, - ///Vocalmorpher Parameter. Unit: (0) Sinusoid, (1) Triangle, (2) Sawtooth Range [0 .. 2] Default: 0 + ///This controls the shape of the low-frequency oscillator used to morph between the two phoneme filters. Unit: (0) Sinusoid, (1) Triangle, (2) Sawtooth Range [0 .. 2] Default: 0 VocalMorpherWaveform = 0x0005, - ///Pitchshifter Parameter. Unit: Semitones Range [-12 .. +12] Default: +12 + ///This sets the number of semitones by which the pitch is shifted. There are 12 semitones per octave. Unit: Semitones Range [-12 .. +12] Default: +12 PitchShifterCoarseTune = 0x0001, - ///Pitchshifter Parameter. Unit: Cents Range [-50 .. +50] Default: 0 + ///This sets the number of cents between Semitones a pitch is shifted. A Cent is 1/100th of a Semitone. Unit: Cents Range [-50 .. +50] Default: 0 PitchShifterFineTune = 0x0002, - ///Ringmodulator Parameter. Unit: (0) Sinusoid, (1) Sawtooth, (2) Square Range [0 .. 2] Default: 0 + ///This controls which waveform is used as the carrier signal. Traditional ring modulator and tremolo effects generally use a sinusoidal carrier. Unit: (0) Sinusoid, (1) Sawtooth, (2) Square Range [0 .. 2] Default: 0 RingModulatorWaveform = 0x0003, - ///Compressor Parameter. Unit: (0) Off, (1) On Range [0 .. 1] Default: 1 + ///Enabling this will result in audio exhibiting smaller variation in intensity between the loudest and quietest portions. Unit: (0) Off, (1) On Range [0 .. 1] Default: 1 CompressorOnoff = 0x0001, - ///Reverb Parameter. Unit: (0) False, (1) True Range [AL_FALSE .. AL_TRUE] Default: AL_TRUE + ///When this flag is set, the high-frequency decay time automatically stays below a limit value that's derived from the setting of the property Air Absorption HF. Unit: (0) False, (1) True Range [False, True] Default: True ReverbDecayHFLimit = 0x000D, - ///EAXReverb effect parameters. Unit: (0) False, (1) True Range [AL_FALSE .. AL_TRUE] Default: AL_TRUE + ///When this flag is set, the high-frequency decay time automatically stays below a limit value that's derived from the setting of the property AirAbsorptionGainHF. Unit: (0) False, (1) True Range [False, True] Default: True EaxReverbDecayHFLimit = 0x0017, AL_EFFECT_FIRST_PARAMETER = 0x0000,// deprecated? @@ -246,74 +227,89 @@ namespace OpenTK.OpenAL.Enums EffectType = 0x8001, } - ///Vocal morpher effect parameters. + ///Vocal morpher effect parameters. If both parameters are set to the same phoneme, that determines the filtering effect that will be heard. If these two parameters are set to different phonemes, the filtering effect will morph between the two settings at a rate specified by EfxEffectf.VocalMorpherRate. public enum EfxFormantFilterSettings : int { - AL_VOCAL_MORPHER_PHONEME_A = 0, - AL_VOCAL_MORPHER_PHONEME_E = 1, - AL_VOCAL_MORPHER_PHONEME_I = 2, - AL_VOCAL_MORPHER_PHONEME_O = 3, - AL_VOCAL_MORPHER_PHONEME_U = 4, - AL_VOCAL_MORPHER_PHONEME_AA = 5, - AL_VOCAL_MORPHER_PHONEME_AE = 6, - AL_VOCAL_MORPHER_PHONEME_AH = 7, - AL_VOCAL_MORPHER_PHONEME_AO = 8, - AL_VOCAL_MORPHER_PHONEME_EH = 9, - AL_VOCAL_MORPHER_PHONEME_ER = 10, - AL_VOCAL_MORPHER_PHONEME_IH = 11, - AL_VOCAL_MORPHER_PHONEME_IY = 12, - AL_VOCAL_MORPHER_PHONEME_UH = 13, - AL_VOCAL_MORPHER_PHONEME_UW = 14, - AL_VOCAL_MORPHER_PHONEME_B = 15, - AL_VOCAL_MORPHER_PHONEME_D = 16, - AL_VOCAL_MORPHER_PHONEME_F = 17, - AL_VOCAL_MORPHER_PHONEME_G = 18, - AL_VOCAL_MORPHER_PHONEME_J = 19, - AL_VOCAL_MORPHER_PHONEME_K = 20, - AL_VOCAL_MORPHER_PHONEME_L = 21, - AL_VOCAL_MORPHER_PHONEME_M = 22, - AL_VOCAL_MORPHER_PHONEME_N = 23, - AL_VOCAL_MORPHER_PHONEME_P = 24, - AL_VOCAL_MORPHER_PHONEME_R = 25, - AL_VOCAL_MORPHER_PHONEME_S = 26, - AL_VOCAL_MORPHER_PHONEME_T = 27, - AL_VOCAL_MORPHER_PHONEME_V = 28, - AL_VOCAL_MORPHER_PHONEME_Z = 29, + VocalMorpherPhonemeA = 0, + VocalMorpherPhonemeE = 1, + VocalMorpherPhonemeI = 2, + VocalMorpherPhonemeO = 3, + VocalMorpherPhonemeU = 4, + VocalMorpherPhonemeAA = 5, + VocalMorpherPhonemeAE = 6, + VocalMorpherPhonemeAH = 7, + VocalMorpherPhonemeAO = 8, + VocalMorpherPhonemeEH = 9, + VocalMorpherPhonemeER = 10, + VocalMorpherPhonemeIH = 11, + VocalMorpherPhonemeIY = 12, + VocalMorpherPhonemeUH = 13, + VocalMorpherPhonemeUW = 14, + VocalMorpherPhonemeB = 15, + VocalMorpherPhonemeD = 16, + VocalMorpherPhonemeF = 17, + VocalMorpherPhonemeG = 18, + VocalMorpherPhonemeJ = 19, + VocalMorpherPhonemeK = 20, + VocalMorpherPhonemeL = 21, + VocalMorpherPhonemeM = 22, + VocalMorpherPhonemeN = 23, + VocalMorpherPhonemeP = 24, + VocalMorpherPhonemeR = 25, + VocalMorpherPhonemeS = 26, + VocalMorpherPhonemeT = 27, + VocalMorpherPhonemeV = 28, + VocalMorpherPhonemeZ = 29, } - ///Effect type definitions to be used with AL_EFFECT_TYPE. + ///Effect type definitions to be used with EfxEffecti.EffectType. public enum EfxEffectType : int { - EffectNull = 0x0000, /* Can also be used as an Effect Object ID */ - EffectReverb = 0x0001, - EffectChorus = 0x0002, - EffectDistortion = 0x0003, - EffectEcho = 0x0004, - EffectFlanger = 0x0005, - EffectFrequencyShifter = 0x0006, - EffectVocalMorpher = 0x0007, - EffectPitchShifter = 0x0008, - EffectRingModulator = 0x0009, - EffectAutowah = 0x000A, - EffectCompressor = 0x000B, - EffectEqualizer = 0x000C, - - EffectEaxReverb = 0x8000, // works on native HW only + ///No Effect, disable. This Effect type is used when an Effect object is initially created. + Null = 0x0000, + ///The Reverb effect is the standard Effects Extension's environmental reverberation effect. It is available on all Generic Software and Generic Hardware devices. + Reverb = 0x0001, + ///The Chorus effect essentially replays the input audio accompanied by another slightly delayed version of the signal, creating a "doubling" effect. + Chorus = 0x0002, + ///The Distortion effect simulates turning up (overdriving) the gain stage on a guitar amplifier or adding a distortion pedal to an instrument's output. + Distortion = 0x0003, + ///The Echo effect generates discrete, delayed instances of the input signal. + Echo = 0x0004, + ///The Flanger effect creates a "tearing" or "whooshing" sound, like a jet flying overhead. + Flanger = 0x0005, + ///The Frequency shifter is a single-sideband modulator, which translates all the component frequencies of the input signal by an equal amount. + FrequencyShifter = 0x0006, + ///The Vocal morpher consists of a pair of 4-band formant filters, used to impose vocal tract effects upon the input signal. + VocalMorpher = 0x0007, + ///The Pitch shifter applies time-invariant pitch shifting to the input signal, over a one octave range and controllable at a semi-tone and cent resolution. + PitchShifter = 0x0008, + ///The Ring modulator multiplies an input signal by a carrier signal in the time domain, resulting in tremolo or inharmonic effects. + RingModulator = 0x0009, + ///The Auto-wah effect emulates the sound of a wah-wah pedal used with an electric guitar, or a mute on a brass instrument. + Autowah = 0x000A, + ///The Compressor will boost quieter portions of the audio, while louder portions will stay the same or may even be reduced. + Compressor = 0x000B, + ///The Equalizer is very flexible, providing tonal control over four different adjustable frequency ranges. + Equalizer = 0x000C, + ///The EAX Reverb has a more advanced parameter set than EfxEffectType.Reverb, but is only natively supported on devices that support the EAX 3.0 or above. + EaxReverb = 0x8000, } #endregion Effect #region Auxiliary Effect Slot + ///A list of valid Int32 AuxiliaryEffectSlot/GetAuxiliaryEffectSlot parameters public enum EfxAuxiliaryi : int { /// This property is used to attach an Effect object to the Auxiliary Effect Slot object. After the attachment, the Auxiliary Effect Slot object will contain the effect type and have the same effect parameters that were stored in the Effect object. Any Sources feeding the Auxiliary Effect Slot will immediate feed the new effect type and new effect parameters. EffectslotEffect = 0x0001, - /// This property is used to enable or disable automatic send adjustments based on the physical positions of the sources and the listener. This property should be enabled when an application wishes to use a reverb effect to simulate the environment surrounding a listener or a collection of Sources. Range [False .. True] Default: True + /// This property is used to enable or disable automatic send adjustments based on the physical positions of the sources and the listener. This property should be enabled when an application wishes to use a reverb effect to simulate the environment surrounding a listener or a collection of Sources. Range [False, True] Default: True EffectslotAuxiliarySendAuto = 0x0003, - } + } + ///A list of valid 32-Bits Float AuxiliaryEffectSlot/GetAuxiliaryEffectSlot parameters public enum EfxAuxiliaryf : int { /// This property is used to specify an output level for the Auxiliary Effect Slot. Setting the gain to 0.0f mutes the output. Range [0.0f .. 1.0f] Default: 1.0f @@ -324,7 +320,7 @@ namespace OpenTK.OpenAL.Enums #region Filter Object - // Filter object definitions to be used with alFilter functions. + ///A list of valid 32-Bits Float Filter/GetFilter parameters public enum EfxFilterf : int { ///Range [0.0f .. 1.0f] Default: 1.0f @@ -345,7 +341,7 @@ namespace OpenTK.OpenAL.Enums BandpassGainHF = 0x0003, } - // Filter type + ///A list of valid Int32 Filter/GetFilter parameters public enum EfxFilteri : int { AL_FILTER_FIRST_PARAMETER = 0x0000, // deprecated? @@ -355,13 +351,17 @@ namespace OpenTK.OpenAL.Enums FilterType = 0x8001, } - ///Filter type definitions to be used with AL_FILTER_TYPE. + ///Filter type definitions to be used with EfxFilteri.FilterType. public enum EfxFilterType : int { - FilterNull = 0x0000, // Can also be used as a Filter Object ID - FilterLowpass = 0x0001, - FilterHighpass = 0x0002, - FilterBandpass = 0x0003, + ///No Filter, disable. This Filter type is used when a Filter object is initially created. + Null = 0x0000, + /// A low-pass filter is used to remove high frequency content from a signal. + Lowpass = 0x0001, + ///Currently not implemented. A high-pass filter is used to remove low frequency content from a signal. + Highpass = 0x0002, + ///Currently not implemented. A band-pass filter is used to remove high and low frequency content from a signal. + Bandpass = 0x0003, } #endregion Filter Object diff --git a/Source/OpenTK/OpenAL/History.txt b/Source/OpenTK/OpenAL/History.txt index e214ee0e..f9c31212 100644 --- a/Source/OpenTK/OpenAL/History.txt +++ b/Source/OpenTK/OpenAL/History.txt @@ -29,23 +29,16 @@ Efx: Functions not imported: - X-Ram Extension untested, as it requires special hardware. !verify parameters of GetBufferMode()! - functions with ushort, uint, ulong marked as not CLS compliant. -Alpha v0.9 --added docu --added alEffectfv and alGetEffectfv --ported samples from SDK Alpha v0.95 --full cleanup of AL class documentation --added *.Bind* helpers. - -Alpha v0.96 -- Cleaned up X-Ram, improved docu, hide some previously public things. No more Console.WriteLines +- Cleaned up X-Ram, added docu, hid some previously public delegates. +- Cleaned up Efx, largely improved docu, refactored some EfxFilter.FilterXYZ glitches to EfxFilter.XYZ. +- commented out debugging Console.WriteLines, replaced errormessages with Trace.Writeline +- Added description for most enums. Todo for beta: - Identify: AL_FILTER_FIRST_PARAMETER, AL_FILTER_LAST_PARAMETER AL_EFFECT_FIRST_PARAMETER, AL_EFFECT_LAST_PARAMETER - replace EaxEfx reverbs with Efx reverbs. - -Todo for final: -- Enums themselves require summaries (do after some more serious tests) \ No newline at end of file +- keep both reverb preset formats, or delete EaxEfxReverb presets? \ No newline at end of file