From 6df1dacca8ffdf7109e0d914751eed6e8185b172 Mon Sep 17 00:00:00 2001 From: skidau Date: Mon, 7 Jan 2013 12:16:04 +1100 Subject: [PATCH 01/17] OpenAL for Windows initial commit --- Externals/OpenAL/Win32/EFX-Util.lib | Bin 0 -> 9934 bytes Externals/OpenAL/Win32/OpenAL32.dll | Bin 0 -> 110592 bytes Externals/OpenAL/Win32/OpenAL32.lib | Bin 0 -> 20552 bytes Externals/OpenAL/Win32/wrap_oal.dll | Bin 0 -> 413696 bytes Externals/OpenAL/Win64/EFX-Util.lib | Bin 0 -> 15984 bytes Externals/OpenAL/Win64/OpenAL32.dll | Bin 0 -> 133632 bytes Externals/OpenAL/Win64/OpenAL32.lib | Bin 0 -> 19858 bytes Externals/OpenAL/Win64/wrap_oal.dll | Bin 0 -> 419840 bytes Externals/OpenAL/include/EFX-Util.h | 422 +++++++++++ Externals/OpenAL/include/al.h | 732 +++++++++++++++++++ Externals/OpenAL/include/alc.h | 281 ++++++++ Externals/OpenAL/include/efx-creative.h | 151 ++++ Externals/OpenAL/include/efx.h | 737 ++++++++++++++++++++ Externals/OpenAL/include/xram.h | 94 +++ Source/Core/AudioCommon/AudioCommon.vcxproj | 48 +- Source/Core/Common/Src/Common.h | 3 +- 16 files changed, 2445 insertions(+), 23 deletions(-) create mode 100644 Externals/OpenAL/Win32/EFX-Util.lib create mode 100644 Externals/OpenAL/Win32/OpenAL32.dll create mode 100644 Externals/OpenAL/Win32/OpenAL32.lib create mode 100644 Externals/OpenAL/Win32/wrap_oal.dll create mode 100644 Externals/OpenAL/Win64/EFX-Util.lib create mode 100644 Externals/OpenAL/Win64/OpenAL32.dll create mode 100644 Externals/OpenAL/Win64/OpenAL32.lib create mode 100644 Externals/OpenAL/Win64/wrap_oal.dll create mode 100644 Externals/OpenAL/include/EFX-Util.h create mode 100644 Externals/OpenAL/include/al.h create mode 100644 Externals/OpenAL/include/alc.h create mode 100644 Externals/OpenAL/include/efx-creative.h create mode 100644 Externals/OpenAL/include/efx.h create mode 100644 Externals/OpenAL/include/xram.h diff --git a/Externals/OpenAL/Win32/EFX-Util.lib b/Externals/OpenAL/Win32/EFX-Util.lib new file mode 100644 index 0000000000000000000000000000000000000000..94ab9c817a4e0d1b9b4a3a02a1ff104226244756 GIT binary patch literal 9934 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 literal 0 HcmV?d00001 diff --git a/Externals/OpenAL/Win32/OpenAL32.dll b/Externals/OpenAL/Win32/OpenAL32.dll new file mode 100644 index 0000000000000000000000000000000000000000..b63bb2f3012f9e355fbc444971994716b2dcbbb5 GIT binary patch literal 110592 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

T+&f$ixghDt873WzpILVUW$M7He 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 literal 0 HcmV?d00001 diff --git a/Externals/OpenAL/Win64/OpenAL32.dll b/Externals/OpenAL/Win64/OpenAL32.dll new file mode 100644 index 0000000000000000000000000000000000000000..f36943df401562cf63d08eda15a02a7244ebe27c GIT binary patch literal 133632 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 literal 0 HcmV?d00001 diff --git a/Externals/OpenAL/Win64/OpenAL32.lib b/Externals/OpenAL/Win64/OpenAL32.lib new file mode 100644 index 0000000000000000000000000000000000000000..17663e0a388887093e8cff00a892b0c8c4851360 GIT binary patch literal 19858 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 literal 0 HcmV?d00001 diff --git a/Externals/OpenAL/Win64/wrap_oal.dll b/Externals/OpenAL/Win64/wrap_oal.dll new file mode 100644 index 0000000000000000000000000000000000000000..1ab0365711f7e19ca409b5353f69e3556ad08bf6 GIT binary patch literal 419840 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

Q~J3$t#;CHi=*xB$_d4dW7 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 MLnl@7Vt>}+|Js^=IRF3v literal 0 HcmV?d00001 diff --git a/Externals/OpenAL/Win64/soft_oal.dll b/Externals/OpenAL/Win64/soft_oal.dll new file mode 100644 index 0000000000000000000000000000000000000000..b47ff952b78bf43db6b7d507b4d7a9b9f1d2d810 GIT binary patch literal 417320 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 literal 0 HcmV?d00001 diff --git a/Externals/OpenAL/include/al.h b/Externals/OpenAL/include/al.h index 1c2f95b318..413b38331e 100644 --- a/Externals/OpenAL/include/al.h +++ b/Externals/OpenAL/include/al.h @@ -1,21 +1,18 @@ #ifndef AL_AL_H #define AL_AL_H - - #if defined(__cplusplus) extern "C" { #endif -#if defined(_WIN32) && !defined(_XBOX) - /* _OPENAL32LIB is deprecated */ - #if defined(AL_BUILD_LIBRARY) || defined (_OPENAL32LIB) - #define AL_API __declspec(dllexport) - #else +#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 -#else - #define AL_API extern #endif #if defined(_WIN32) @@ -24,20 +21,19 @@ extern "C" { #define AL_APIENTRY #endif -#if TARGET_OS_MAC - #pragma export on -#endif -/* The OPENAL, ALAPI, and ALAPIENTRY macros are deprecated, but are included for applications porting code - from AL 1.0 */ +/** Deprecated macro. */ #define OPENAL -#define ALAPI AL_API -#define ALAPIENTRY AL_APIENTRY +#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; @@ -45,7 +41,7 @@ typedef char ALboolean; typedef char ALchar; /** signed 8-bit 2's complement integer */ -typedef char ALbyte; +typedef signed char ALbyte; /** unsigned 8-bit integer */ typedef unsigned char ALubyte; @@ -80,650 +76,578 @@ typedef void ALvoid; /* Enumerant values begin at column 50. No tabs. */ -/* bad value */ -#define AL_INVALID -1 +/** "no distance model" or "no buffer" */ +#define AL_NONE 0 -#define AL_NONE 0 - -/* Boolean False. */ -#define AL_FALSE 0 +/** Boolean False. */ +#define AL_FALSE 0 /** Boolean True. */ -#define AL_TRUE 1 - -/** Indicate Source has relative coordinates. */ -#define AL_SOURCE_RELATIVE 0x202 - +#define AL_TRUE 1 /** - * Directional source, inner cone angle, in degrees. - * Range: [0-360] - * Default: 360 - */ -#define AL_CONE_INNER_ANGLE 0x1001 - -/** - * Directional source, outer cone angle, in degrees. - * Range: [0-360] - * Default: 360 - */ -#define AL_CONE_OUTER_ANGLE 0x1002 - -/** - * Specify the pitch to be applied, either at source, - * or on mixer results, at listener. - * Range: [0.5-2.0] - * Default: 1.0 - */ -#define AL_PITCH 0x1003 - -/** - * 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. - */ -#define AL_POSITION 0x1004 - -/** Specify the current direction. */ -#define AL_DIRECTION 0x1005 - -/** Specify the current velocity in three dimensional space. */ -#define AL_VELOCITY 0x1006 - -/** - * Indicate whether source is looping. - * Type: ALboolean? + * Relative source. + * Type: ALboolean * Range: [AL_TRUE, AL_FALSE] - * Default: FALSE. - */ -#define AL_LOOPING 0x1007 - -/** - * Indicate the buffer to provide sound samples. - * Type: ALuint. - * Range: any valid Buffer id. - */ -#define AL_BUFFER 0x1009 - -/** - * Indicate the gain (volume amplification) applied. - * Type: ALfloat. - * Range: ]0.0- ] - * 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.0 is meaningless with respect to a logarithmic - * scale; it is interpreted as zero volume - the channel - * is effectively disabled. - */ -#define AL_GAIN 0x100A - -/* - * Indicate minimum source attenuation - * Type: ALfloat - * Range: [0.0 - 1.0] + * Default: AL_FALSE * - * Logarthmic + * Specifies if the Source has relative coordinates. */ -#define AL_MIN_GAIN 0x100D +#define AL_SOURCE_RELATIVE 0x202 + /** - * Indicate maximum source attenuation - * Type: ALfloat - * Range: [0.0 - 1.0] + * Inner cone angle, in degrees. + * Type: ALint, ALfloat + * Range: [0 - 360] + * Default: 360 * - * Logarthmic + * The angle covered by the inner cone, where the source will not attenuate. */ -#define AL_MAX_GAIN 0x100E +#define AL_CONE_INNER_ANGLE 0x1001 /** - * Indicate listener orientation. + * Outer cone angle, in degrees. + * Range: [0 - 360] + * Default: 360 * - * at/up + * The angle covered by the outer cone, where the source will be fully + * attenuated. */ -#define AL_ORIENTATION 0x100F +#define AL_CONE_OUTER_ANGLE 0x1002 /** - * Specify the channel mask. (Creative) - * Type: ALuint - * Range: [0 - 255] - */ -#define AL_CHANNEL_MASK 0x3000 - - -/** - * Source state information. - */ -#define AL_SOURCE_STATE 0x1010 -#define AL_INITIAL 0x1011 -#define AL_PLAYING 0x1012 -#define AL_PAUSED 0x1013 -#define AL_STOPPED 0x1014 - -/** - * Buffer Queue params - */ -#define AL_BUFFERS_QUEUED 0x1015 -#define AL_BUFFERS_PROCESSED 0x1016 - -/** - * Source buffer position information - */ -#define AL_SEC_OFFSET 0x1024 -#define AL_SAMPLE_OFFSET 0x1025 -#define AL_BYTE_OFFSET 0x1026 - -/* - * Source type (Static, Streaming or undetermined) - * Source is Static if a Buffer has been attached using AL_BUFFER - * Source is Streaming if one or more Buffers have been attached using alSourceQueueBuffers - * Source is undetermined when it has the NULL buffer attached - */ -#define AL_SOURCE_TYPE 0x1027 -#define AL_STATIC 0x1028 -#define AL_STREAMING 0x1029 -#define AL_UNDETERMINED 0x1030 - -/** Sound samples: format specifier. */ -#define AL_FORMAT_MONO8 0x1100 -#define AL_FORMAT_MONO16 0x1101 -#define AL_FORMAT_STEREO8 0x1102 -#define AL_FORMAT_STEREO16 0x1103 - -/** - * source specific reference distance - * Type: ALfloat - * Range: 0.0 - +inf + * Source pitch. + * Type: ALfloat + * Range: [0.5 - 2.0] + * Default: 1.0 * - * At 0.0, no distance attenuation occurs. Default is - * 1.0. + * A multiplier for the frequency (sample rate) of the source's buffer. */ -#define AL_REFERENCE_DISTANCE 0x1020 +#define AL_PITCH 0x1003 /** - * source specific rolloff factor - * Type: ALfloat - * Range: 0.0 - +inf + * 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_ROLLOFF_FACTOR 0x1021 +#define AL_POSITION 0x1004 /** - * Directional source, outer cone gain. + * Source direction. + * Type: ALfloat[3], ALint[3] + * Default: {0, 0, 0} * - * Default: 0.0 - * Range: [0.0 - 1.0] - * Logarithmic + * Specifies the current direction in local space. + * A zero-length vector specifies an omni-directional source (cone is ignored). */ -#define AL_CONE_OUTER_GAIN 0x1022 +#define AL_DIRECTION 0x1005 /** - * Indicate distance above which sources are not - * attenuated using the inverse clamped distance model. + * 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 - * Type: ALfloat - * Range: 0.0 - +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 +#define AL_MAX_DISTANCE 0x1023 -/** - * Sound samples: 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. +/** 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_FREQUENCY 0x2001 -#define AL_BITS 0x2002 -#define AL_CHANNELS 0x2003 -#define AL_SIZE 0x2004 +#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 supported for public use (yet). + * Not for public use. */ -#define AL_UNUSED 0x2010 -#define AL_PENDING 0x2011 -#define AL_PROCESSED 0x2012 +#define AL_UNUSED 0x2010 +#define AL_PENDING 0x2011 +#define AL_PROCESSED 0x2012 -/** Errors: No Error. */ -#define AL_NO_ERROR AL_FALSE +/** No error. */ +#define AL_NO_ERROR 0 -/** - * Invalid Name paramater passed to AL call. - */ -#define AL_INVALID_NAME 0xA001 +/** Invalid name paramater passed to AL call. */ +#define AL_INVALID_NAME 0xA001 -/** - * Invalid parameter passed to AL call. - */ -#define AL_ILLEGAL_ENUM 0xA002 -#define AL_INVALID_ENUM 0xA002 +/** Invalid enum parameter passed to AL call. */ +#define AL_INVALID_ENUM 0xA002 -/** - * Invalid enum parameter value. - */ -#define AL_INVALID_VALUE 0xA003 +/** Invalid value parameter passed to AL call. */ +#define AL_INVALID_VALUE 0xA003 -/** - * Illegal call. - */ -#define AL_ILLEGAL_COMMAND 0xA004 -#define AL_INVALID_OPERATION 0xA004 +/** Illegal AL call. */ +#define AL_INVALID_OPERATION 0xA004 - -/** - * No mojo. - */ -#define AL_OUT_OF_MEMORY 0xA005 +/** Not enough memory. */ +#define AL_OUT_OF_MEMORY 0xA005 -/** Context strings: Vendor Name. */ -#define AL_VENDOR 0xB001 -#define AL_VERSION 0xB002 -#define AL_RENDERER 0xB003 -#define AL_EXTENSIONS 0xB004 +/** 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 -/** Global tweakage. */ /** - * Doppler scale. Default 1.0 - */ -#define AL_DOPPLER_FACTOR 0xC000 - -/** - * Tweaks speed of propagation. - */ -#define AL_DOPPLER_VELOCITY 0xC001 - -/** - * Speed of Sound in units per second - */ -#define AL_SPEED_OF_SOUND 0xC003 - -/** - * Distance models + * Doppler scale. + * Type: ALfloat + * Range: [0.0 - ] + * Default: 1.0 * - * used in conjunction with DistanceModel + * Scale for source and listener velocities. + */ +#define AL_DOPPLER_FACTOR 0xC000 +AL_API void AL_APIENTRY alDopplerFactor(ALfloat value); + +/** + * Doppler velocity (deprecated). * - * implicit: NONE, which disances distance attenuation. + * A multiplier applied to the Speed of Sound. */ -#define AL_DISTANCE_MODEL 0xD000 -#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 +#define AL_DOPPLER_VELOCITY 0xC001 +AL_API void AL_APIENTRY alDopplerVelocity(ALfloat value); - -#if !defined(AL_NO_PROTOTYPES) - -/* - * Renderer State management +/** + * 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. */ -AL_API void AL_APIENTRY alEnable( ALenum capability ); +#define AL_SPEED_OF_SOUND 0xC003 +AL_API void AL_APIENTRY alSpeedOfSound(ALfloat value); -AL_API void AL_APIENTRY alDisable( ALenum capability ); - -AL_API ALboolean AL_APIENTRY alIsEnabled( ALenum capability ); - - -/* - * State retrieval +/** + * 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. */ -AL_API const ALchar* AL_APIENTRY alGetString( ALenum param ); +#define AL_DISTANCE_MODEL 0xD000 +AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel); -AL_API void AL_APIENTRY alGetBooleanv( ALenum param, ALboolean* data ); +/** 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 -AL_API void AL_APIENTRY alGetIntegerv( ALenum param, ALint* data ); +/** 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); -AL_API void AL_APIENTRY alGetFloatv( ALenum param, ALfloat* data ); +/** 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); -AL_API void AL_APIENTRY alGetDoublev( ALenum param, ALdouble* data ); - -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 support. - * Obtain the most recent error generated in the AL state machine. +/** + * Error retrieval. + * + * Obtain the first error generated in the AL context since the last check. */ -AL_API ALenum AL_APIENTRY alGetError( void ); +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 ); - - -/* - * LISTENER - * Listener represents the location and orientation of the - * 'user' in 3D-space. * - * Properties include: - - * - * Gain AL_GAIN ALfloat - * Position AL_POSITION ALfloat[3] - * Velocity AL_VELOCITY ALfloat[3] - * Orientation AL_ORIENTATION ALfloat[6] (Forward then Up vectors) -*/ - -/* - * Set Listener parameters + * Query for the presence of an extension, and obtain any appropriate function + * pointers and enum values. */ -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 ); - - -/** - * SOURCE - * Sources represent individual sound objects in 3D-space. - * Sources take the PCM data provided in the specified Buffer, - * apply Source-specific modifications, and then - * submit them to be mixed according to spatial arrangement etc. - * - * Properties include: - - * - * Gain AL_GAIN ALfloat - * Min Gain AL_MIN_GAIN ALfloat - * Max Gain AL_MAX_GAIN ALfloat - * Position AL_POSITION ALfloat[3] - * Velocity AL_VELOCITY ALfloat[3] - * Direction AL_DIRECTION ALfloat[3] - * Head Relative Mode AL_SOURCE_RELATIVE ALint (AL_TRUE or AL_FALSE) - * Reference Distance AL_REFERENCE_DISTANCE ALfloat - * Max Distance AL_MAX_DISTANCE ALfloat - * RollOff Factor AL_ROLLOFF_FACTOR ALfloat - * Inner Angle AL_CONE_INNER_ANGLE ALint or ALfloat - * Outer Angle AL_CONE_OUTER_ANGLE ALint or ALfloat - * Cone Outer Gain AL_CONE_OUTER_GAIN ALint or ALfloat - * Pitch AL_PITCH ALfloat - * Looping AL_LOOPING ALint (AL_TRUE or AL_FALSE) - * MS Offset AL_MSEC_OFFSET ALint or ALfloat - * Byte Offset AL_BYTE_OFFSET ALint or ALfloat - * Sample Offset AL_SAMPLE_OFFSET ALint or ALfloat - * Attached Buffer AL_BUFFER ALint - * State (Query only) AL_SOURCE_STATE ALint - * Buffers Queued (Query only) AL_BUFFERS_QUEUED ALint - * Buffers Processed (Query only) AL_BUFFERS_PROCESSED ALint - */ - -/* 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 sid ); - -/* - * Set Source parameters - */ -AL_API void AL_APIENTRY alSourcef( ALuint sid, ALenum param, ALfloat value ); - -AL_API void AL_APIENTRY alSource3f( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); - -AL_API void AL_APIENTRY alSourcefv( ALuint sid, ALenum param, const ALfloat* values ); - -AL_API void AL_APIENTRY alSourcei( ALuint sid, ALenum param, ALint value ); - -AL_API void AL_APIENTRY alSource3i( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 ); - -AL_API void AL_APIENTRY alSourceiv( ALuint sid, ALenum param, const ALint* values ); - -/* - * Get Source parameters - */ -AL_API void AL_APIENTRY alGetSourcef( ALuint sid, ALenum param, ALfloat* value ); - -AL_API void AL_APIENTRY alGetSource3f( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); - -AL_API void AL_APIENTRY alGetSourcefv( ALuint sid, ALenum param, ALfloat* values ); - -AL_API void AL_APIENTRY alGetSourcei( ALuint sid, ALenum param, ALint* value ); - -AL_API void AL_APIENTRY alGetSource3i( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3); - -AL_API void AL_APIENTRY alGetSourceiv( ALuint sid, ALenum param, ALint* values ); - - -/* - * Source vector based playback calls - */ - -/* Play, replay, or resume (if paused) a list of Sources */ -AL_API void AL_APIENTRY alSourcePlayv( ALsizei ns, const ALuint *sids ); - -/* Stop a list of Sources */ -AL_API void AL_APIENTRY alSourceStopv( ALsizei ns, const ALuint *sids ); - -/* Rewind a list of Sources */ -AL_API void AL_APIENTRY alSourceRewindv( ALsizei ns, const ALuint *sids ); - -/* Pause a list of Sources */ -AL_API void AL_APIENTRY alSourcePausev( ALsizei ns, const ALuint *sids ); - -/* - * Source based playback calls - */ - -/* Play, replay, or resume a Source */ -AL_API void AL_APIENTRY alSourcePlay( ALuint sid ); - -/* Stop a Source */ -AL_API void AL_APIENTRY alSourceStop( ALuint sid ); - -/* Rewind a Source (set playback postiton to beginning) */ -AL_API void AL_APIENTRY alSourceRewind( ALuint sid ); - -/* Pause a Source */ -AL_API void AL_APIENTRY alSourcePause( ALuint sid ); - -/* - * Source Queuing - */ -AL_API void AL_APIENTRY alSourceQueueBuffers( ALuint sid, ALsizei numEntries, const ALuint *bids ); - -AL_API void AL_APIENTRY alSourceUnqueueBuffers( ALuint sid, ALsizei numEntries, ALuint *bids ); - - -/** - * BUFFER - * Buffer objects are storage space for sample data. - * Buffers are referred to by Sources. One Buffer can be used - * by multiple Sources. - * - * Properties include: - - * - * Frequency (Query only) AL_FREQUENCY ALint - * Size (Query only) AL_SIZE ALint - * Bits (Query only) AL_BITS ALint - * Channels (Query only) AL_CHANNELS ALint - */ - -/* 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 bid ); - -/* Specify the data to be copied into a buffer */ -AL_API void AL_APIENTRY alBufferData( ALuint bid, ALenum format, const ALvoid* data, ALsizei size, ALsizei freq ); - -/* - * Set Buffer parameters - */ -AL_API void AL_APIENTRY alBufferf( ALuint bid, ALenum param, ALfloat value ); - -AL_API void AL_APIENTRY alBuffer3f( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); - -AL_API void AL_APIENTRY alBufferfv( ALuint bid, ALenum param, const ALfloat* values ); - -AL_API void AL_APIENTRY alBufferi( ALuint bid, ALenum param, ALint value ); - -AL_API void AL_APIENTRY alBuffer3i( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 ); - -AL_API void AL_APIENTRY alBufferiv( ALuint bid, ALenum param, const ALint* values ); - -/* - * Get Buffer parameters - */ -AL_API void AL_APIENTRY alGetBufferf( ALuint bid, ALenum param, ALfloat* value ); - -AL_API void AL_APIENTRY alGetBuffer3f( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); - -AL_API void AL_APIENTRY alGetBufferfv( ALuint bid, ALenum param, ALfloat* values ); - -AL_API void AL_APIENTRY alGetBufferi( ALuint bid, ALenum param, ALint* value ); - -AL_API void AL_APIENTRY alGetBuffer3i( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3); - -AL_API void AL_APIENTRY alGetBufferiv( ALuint bid, ALenum param, ALint* values ); - - -/* - * Global Parameters - */ -AL_API void AL_APIENTRY alDopplerFactor( ALfloat value ); - -AL_API void AL_APIENTRY alDopplerVelocity( ALfloat value ); - -AL_API void AL_APIENTRY alSpeedOfSound( ALfloat value ); - -AL_API void AL_APIENTRY alDistanceModel( ALenum distanceModel ); - -#else /* AL_NO_PROTOTYPES */ - -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* data ); -typedef void (AL_APIENTRY *LPALGETINTEGERV)( ALenum param, ALint* data ); -typedef void (AL_APIENTRY *LPALGETFLOATV)( ALenum param, ALfloat* data ); -typedef void (AL_APIENTRY *LPALGETDOUBLEV)( ALenum param, ALdouble* data ); -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 sid ); -typedef void (AL_APIENTRY *LPALSOURCEF)( ALuint sid, ALenum param, ALfloat value); -typedef void (AL_APIENTRY *LPALSOURCE3F)( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); -typedef void (AL_APIENTRY *LPALSOURCEFV)( ALuint sid, ALenum param, const ALfloat* values ); -typedef void (AL_APIENTRY *LPALSOURCEI)( ALuint sid, ALenum param, ALint value); -typedef void (AL_APIENTRY *LPALSOURCE3I)( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 ); -typedef void (AL_APIENTRY *LPALSOURCEIV)( ALuint sid, ALenum param, const ALint* values ); -typedef void (AL_APIENTRY *LPALGETSOURCEF)( ALuint sid, ALenum param, ALfloat* value ); -typedef void (AL_APIENTRY *LPALGETSOURCE3F)( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); -typedef void (AL_APIENTRY *LPALGETSOURCEFV)( ALuint sid, ALenum param, ALfloat* values ); -typedef void (AL_APIENTRY *LPALGETSOURCEI)( ALuint sid, ALenum param, ALint* value ); -typedef void (AL_APIENTRY *LPALGETSOURCE3I)( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3); -typedef void (AL_APIENTRY *LPALGETSOURCEIV)( ALuint sid, ALenum param, ALint* values ); -typedef void (AL_APIENTRY *LPALSOURCEPLAYV)( ALsizei ns, const ALuint *sids ); -typedef void (AL_APIENTRY *LPALSOURCESTOPV)( ALsizei ns, const ALuint *sids ); -typedef void (AL_APIENTRY *LPALSOURCEREWINDV)( ALsizei ns, const ALuint *sids ); -typedef void (AL_APIENTRY *LPALSOURCEPAUSEV)( ALsizei ns, const ALuint *sids ); -typedef void (AL_APIENTRY *LPALSOURCEPLAY)( ALuint sid ); -typedef void (AL_APIENTRY *LPALSOURCESTOP)( ALuint sid ); -typedef void (AL_APIENTRY *LPALSOURCEREWIND)( ALuint sid ); -typedef void (AL_APIENTRY *LPALSOURCEPAUSE)( ALuint sid ); -typedef void (AL_APIENTRY *LPALSOURCEQUEUEBUFFERS)(ALuint sid, ALsizei numEntries, const ALuint *bids ); -typedef void (AL_APIENTRY *LPALSOURCEUNQUEUEBUFFERS)(ALuint sid, ALsizei numEntries, ALuint *bids ); -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 bid ); -typedef void (AL_APIENTRY *LPALBUFFERDATA)( ALuint bid, ALenum format, const ALvoid* data, ALsizei size, ALsizei freq ); -typedef void (AL_APIENTRY *LPALBUFFERF)( ALuint bid, ALenum param, ALfloat value); -typedef void (AL_APIENTRY *LPALBUFFER3F)( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); -typedef void (AL_APIENTRY *LPALBUFFERFV)( ALuint bid, ALenum param, const ALfloat* values ); -typedef void (AL_APIENTRY *LPALBUFFERI)( ALuint bid, ALenum param, ALint value); -typedef void (AL_APIENTRY *LPALBUFFER3I)( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 ); -typedef void (AL_APIENTRY *LPALBUFFERIV)( ALuint bid, ALenum param, const ALint* values ); -typedef void (AL_APIENTRY *LPALGETBUFFERF)( ALuint bid, ALenum param, ALfloat* value ); -typedef void (AL_APIENTRY *LPALGETBUFFER3F)( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); -typedef void (AL_APIENTRY *LPALGETBUFFERFV)( ALuint bid, ALenum param, ALfloat* values ); -typedef void (AL_APIENTRY *LPALGETBUFFERI)( ALuint bid, ALenum param, ALint* value ); -typedef void (AL_APIENTRY *LPALGETBUFFER3I)( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3); -typedef void (AL_APIENTRY *LPALGETBUFFERIV)( ALuint bid, 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 ); - -#endif /* AL_NO_PROTOTYPES */ - -#if TARGET_OS_MAC - #pragma export off -#endif +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" */ diff --git a/Externals/OpenAL/include/alc.h b/Externals/OpenAL/include/alc.h index b0bbfbe7de..294e8b33c6 100644 --- a/Externals/OpenAL/include/alc.h +++ b/Externals/OpenAL/include/alc.h @@ -5,16 +5,11 @@ extern "C" { #endif -#if defined(_WIN32) && !defined(_XBOX) - /* _OPENAL32LIB is deprecated */ - #if defined(AL_BUILD_LIBRARY) || defined (_OPENAL32LIB) - #define ALC_API __declspec(dllexport) - #else +#ifndef ALC_API + #if defined(AL_LIBTYPE_STATIC) + #define ALC_API + #elif defined(_WIN32) #define ALC_API __declspec(dllimport) - #endif -#else - #if defined(AL_BUILD_LIBRARY) && defined(HAVE_GCC_VISIBILITY) - #define ALC_API __attribute__((visibility("default"))) #else #define ALC_API extern #endif @@ -26,25 +21,20 @@ extern "C" { #define ALC_APIENTRY #endif -#if defined(TARGET_OS_MAC) && TARGET_OS_MAC - #pragma export on -#endif -/* - * The ALCAPI, ALCAPIENTRY, and ALC_INVALID macros are deprecated, but are - * included for applications porting code from AL 1.0 - */ -#define ALCAPI ALC_API -#define ALCAPIENTRY ALC_APIENTRY -#define ALC_INVALID 0 +/** Deprecated macro. */ +#define ALCAPI ALC_API +#define ALCAPIENTRY ALC_APIENTRY +#define ALC_INVALID 0 +/** Supported ALC version? */ +#define ALC_VERSION_0_1 1 -#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; @@ -52,7 +42,7 @@ typedef char ALCboolean; typedef char ALCchar; /** signed 8-bit 2's complement integer */ -typedef char ALCbyte; +typedef signed char ALCbyte; /** unsigned 8-bit integer */ typedef unsigned char ALCubyte; @@ -87,192 +77,158 @@ typedef void ALCvoid; /* Enumerant values begin at column 50. No tabs. */ -/* Boolean False. */ +/** Boolean False. */ #define ALC_FALSE 0 -/* Boolean True. */ +/** Boolean True. */ #define ALC_TRUE 1 -/** - * followed by Hz - */ +/** Context attribute: Hz. */ #define ALC_FREQUENCY 0x1007 -/** - * followed by Hz - */ +/** Context attribute: Hz. */ #define ALC_REFRESH 0x1008 -/** - * followed by AL_TRUE, AL_FALSE - */ +/** Context attribute: AL_TRUE or AL_FALSE. */ #define ALC_SYNC 0x1009 -/** - * followed by Num of requested Mono (3D) Sources - */ +/** Context attribute: requested Mono (3D) Sources. */ #define ALC_MONO_SOURCES 0x1010 -/** - * followed by Num of requested Stereo Sources - */ +/** Context attribute: requested Stereo Sources. */ #define ALC_STEREO_SOURCES 0x1011 -/** - * errors - */ +/** No error. */ +#define ALC_NO_ERROR 0 -/** - * No error - */ -#define ALC_NO_ERROR ALC_FALSE - -/** - * No device - */ +/** Invalid device handle. */ #define ALC_INVALID_DEVICE 0xA001 -/** - * invalid context ID - */ +/** Invalid context handle. */ #define ALC_INVALID_CONTEXT 0xA002 -/** - * bad enum - */ +/** Invalid enum parameter passed to an ALC call. */ #define ALC_INVALID_ENUM 0xA003 -/** - * bad value - */ +/** Invalid value parameter passed to an ALC call. */ #define ALC_INVALID_VALUE 0xA004 -/** - * Out of memory. - */ +/** Out of memory. */ #define ALC_OUT_OF_MEMORY 0xA005 -/** - * The Specifier string for default device - */ -#define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004 -#define ALC_DEVICE_SPECIFIER 0x1005 -#define ALC_EXTENSIONS 0x1006 - +/** 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 /** - * ALC_ENUMERATE_ALL_EXT enums + * 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_DEFAULT_ALL_DEVICES_SPECIFIER 0x1012 -#define ALC_ALL_DEVICES_SPECIFIER 0x1013 +#define ALC_DEVICE_SPECIFIER 0x1005 +/** String for space-separated list of ALC extensions. */ +#define ALC_EXTENSIONS 0x1006 + +/** Capture extension */ +#define ALC_EXT_CAPTURE 1 /** - * Capture extension + * 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 -/* - * Context Management +/** 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). */ -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 ); +#define ALC_ALL_DEVICES_SPECIFIER 0x1013 -/* - * Device Management - */ -ALC_API ALCdevice * ALC_APIENTRY alcOpenDevice( const ALCchar *devicename ); +/** 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); -ALC_API ALCboolean ALC_APIENTRY alcCloseDevice( ALCdevice *device ); +/** 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 Context error + * + * Obtain the most recent Device error. */ -ALC_API ALCenum ALC_APIENTRY alcGetError( ALCdevice *device ); +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 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); -ALC_API void * ALC_APIENTRY alcGetProcAddress( ALCdevice *device, const ALCchar *funcname ); +/** 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); -ALC_API ALCenum ALC_APIENTRY alcGetEnumValue( ALCdevice *device, const ALCchar *enumname ); +/** 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); - -/* - * Query functions - */ -ALC_API const ALCchar * ALC_APIENTRY alcGetString( ALCdevice *device, ALCenum param ); - -ALC_API void ALC_APIENTRY alcGetIntegerv( ALCdevice *device, ALCenum param, ALCsizei size, ALCint *data ); - - -/* - * Capture functions - */ -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 types, 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 *dest ); -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(TARGET_OS_MAC) && TARGET_OS_MAC - #pragma export off -#endif +/** 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) } diff --git a/Externals/OpenAL/include/alext.h b/Externals/OpenAL/include/alext.h new file mode 100644 index 0000000000..0447f2bb45 --- /dev/null +++ b/Externals/OpenAL/include/alext.h @@ -0,0 +1,355 @@ +/** + * 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 +/* Define int64_t and uint64_t types */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#include +#elif defined(_WIN32) && defined(__GNUC__) +#include +#elif defined(_WIN32) +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#else +/* Fallback if nothing above works */ +#include +#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 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Externals/OpenAL/include/efx-creative.h b/Externals/OpenAL/include/efx-creative.h index 4ea9da6b72..0a04c982e1 100644 --- a/Externals/OpenAL/include/efx-creative.h +++ b/Externals/OpenAL/include/efx-creative.h @@ -1,151 +1,3 @@ -#ifndef __efxcreative_h_ -#define __efxcreative_h_ - -/** - * efx-creative.h - Environmental Audio Extensions - * for OpenAL Effects Extension. - * - */ -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * Effect object definitions to be used with alEffect functions. - * - * Effect parameter value definitions, ranges, and defaults - * appear farther down in this file. - */ - -/* AL EAXReverb 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 - -/* Effect type definitions to be used with AL_EFFECT_TYPE. */ -#define AL_EFFECT_EAXREVERB 0x8000 - - - - /********************************************************** - * Effect parameter structures, value definitions, ranges and defaults. - */ - -/** - * AL reverb effect parameter ranges and defaults - */ -#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 {0.0f, 0.0f, 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 {0.0f, 0.0f, 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 - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* __efxcreative_h_ */ +/* The tokens that would be defined here are already defined in efx.h. This + * empty file is here to provide compatibility with Windows-based projects + * that would include it. */ diff --git a/Externals/OpenAL/include/efx-presets.h b/Externals/OpenAL/include/efx-presets.h new file mode 100644 index 0000000000..86dcbda2f3 --- /dev/null +++ b/Externals/OpenAL/include/efx-presets.h @@ -0,0 +1,402 @@ +/* Reverb presets for EFX */ + +#ifndef EFX_PRESETS_H +#define EFX_PRESETS_H + +#ifndef EFXEAXREVERBPROPERTIES_DEFINED +#define EFXEAXREVERBPROPERTIES_DEFINED +typedef struct { + float flDensity; + float flDiffusion; + float flGain; + float flGainHF; + float flGainLF; + float flDecayTime; + float flDecayHFRatio; + float flDecayLFRatio; + float flReflectionsGain; + float flReflectionsDelay; + float flReflectionsPan[3]; + float flLateReverbGain; + float flLateReverbDelay; + float flLateReverbPan[3]; + float flEchoTime; + float flEchoDepth; + float flModulationTime; + float flModulationDepth; + float flAirAbsorptionGainHF; + float flHFReference; + float flLFReference; + float flRoomRolloffFactor; + int iDecayHFLimit; +} EFXEAXREVERBPROPERTIES, *LPEFXEAXREVERBPROPERTIES; +#endif + +/* Default Presets */ + +#define EFX_REVERB_PRESET_GENERIC \ + { 1.0000f, 1.0000f, 0.3162f, 0.8913f, 1.0000f, 1.4900f, 0.8300f, 1.0000f, 0.0500f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PADDEDCELL \ + { 0.1715f, 1.0000f, 0.3162f, 0.0010f, 1.0000f, 0.1700f, 0.1000f, 1.0000f, 0.2500f, 0.0010f, { 0.0000f, 0.0000f, 0.0000f }, 1.2691f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ROOM \ + { 0.4287f, 1.0000f, 0.3162f, 0.5929f, 1.0000f, 0.4000f, 0.8300f, 1.0000f, 0.1503f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 1.0629f, 0.0030f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_BATHROOM \ + { 0.1715f, 1.0000f, 0.3162f, 0.2512f, 1.0000f, 1.4900f, 0.5400f, 1.0000f, 0.6531f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 3.2734f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_LIVINGROOM \ + { 0.9766f, 1.0000f, 0.3162f, 0.0010f, 1.0000f, 0.5000f, 0.1000f, 1.0000f, 0.2051f, 0.0030f, { 0.0000f, 0.0000f, 0.0000f }, 0.2805f, 0.0040f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_STONEROOM \ + { 1.0000f, 1.0000f, 0.3162f, 0.7079f, 1.0000f, 2.3100f, 0.6400f, 1.0000f, 0.4411f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1003f, 0.0170f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_AUDITORIUM \ + { 1.0000f, 1.0000f, 0.3162f, 0.5781f, 1.0000f, 4.3200f, 0.5900f, 1.0000f, 0.4032f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.7170f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CONCERTHALL \ + { 1.0000f, 1.0000f, 0.3162f, 0.5623f, 1.0000f, 3.9200f, 0.7000f, 1.0000f, 0.2427f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.9977f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CAVE \ + { 1.0000f, 1.0000f, 0.3162f, 1.0000f, 1.0000f, 2.9100f, 1.3000f, 1.0000f, 0.5000f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.7063f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_ARENA \ + { 1.0000f, 1.0000f, 0.3162f, 0.4477f, 1.0000f, 7.2400f, 0.3300f, 1.0000f, 0.2612f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.0186f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_HANGAR \ + { 1.0000f, 1.0000f, 0.3162f, 0.3162f, 1.0000f, 10.0500f, 0.2300f, 1.0000f, 0.5000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.2560f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CARPETEDHALLWAY \ + { 0.4287f, 1.0000f, 0.3162f, 0.0100f, 1.0000f, 0.3000f, 0.1000f, 1.0000f, 0.1215f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 0.1531f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_HALLWAY \ + { 0.3645f, 1.0000f, 0.3162f, 0.7079f, 1.0000f, 1.4900f, 0.5900f, 1.0000f, 0.2458f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.6615f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_STONECORRIDOR \ + { 1.0000f, 1.0000f, 0.3162f, 0.7612f, 1.0000f, 2.7000f, 0.7900f, 1.0000f, 0.2472f, 0.0130f, { 0.0000f, 0.0000f, 0.0000f }, 1.5758f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ALLEY \ + { 1.0000f, 0.3000f, 0.3162f, 0.7328f, 1.0000f, 1.4900f, 0.8600f, 1.0000f, 0.2500f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.9954f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 0.9500f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FOREST \ + { 1.0000f, 0.3000f, 0.3162f, 0.0224f, 1.0000f, 1.4900f, 0.5400f, 1.0000f, 0.0525f, 0.1620f, { 0.0000f, 0.0000f, 0.0000f }, 0.7682f, 0.0880f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CITY \ + { 1.0000f, 0.5000f, 0.3162f, 0.3981f, 1.0000f, 1.4900f, 0.6700f, 1.0000f, 0.0730f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.1427f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_MOUNTAINS \ + { 1.0000f, 0.2700f, 0.3162f, 0.0562f, 1.0000f, 1.4900f, 0.2100f, 1.0000f, 0.0407f, 0.3000f, { 0.0000f, 0.0000f, 0.0000f }, 0.1919f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_QUARRY \ + { 1.0000f, 1.0000f, 0.3162f, 0.3162f, 1.0000f, 1.4900f, 0.8300f, 1.0000f, 0.0000f, 0.0610f, { 0.0000f, 0.0000f, 0.0000f }, 1.7783f, 0.0250f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 0.7000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PLAIN \ + { 1.0000f, 0.2100f, 0.3162f, 0.1000f, 1.0000f, 1.4900f, 0.5000f, 1.0000f, 0.0585f, 0.1790f, { 0.0000f, 0.0000f, 0.0000f }, 0.1089f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PARKINGLOT \ + { 1.0000f, 1.0000f, 0.3162f, 1.0000f, 1.0000f, 1.6500f, 1.5000f, 1.0000f, 0.2082f, 0.0080f, { 0.0000f, 0.0000f, 0.0000f }, 0.2652f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_SEWERPIPE \ + { 0.3071f, 0.8000f, 0.3162f, 0.3162f, 1.0000f, 2.8100f, 0.1400f, 1.0000f, 1.6387f, 0.0140f, { 0.0000f, 0.0000f, 0.0000f }, 3.2471f, 0.0210f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_UNDERWATER \ + { 0.3645f, 1.0000f, 0.3162f, 0.0100f, 1.0000f, 1.4900f, 0.1000f, 1.0000f, 0.5963f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 7.0795f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 1.1800f, 0.3480f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DRUGGED \ + { 0.4287f, 0.5000f, 0.3162f, 1.0000f, 1.0000f, 8.3900f, 1.3900f, 1.0000f, 0.8760f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 3.1081f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 1.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_DIZZY \ + { 0.3645f, 0.6000f, 0.3162f, 0.6310f, 1.0000f, 17.2300f, 0.5600f, 1.0000f, 0.1392f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.4937f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.8100f, 0.3100f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_PSYCHOTIC \ + { 0.0625f, 0.5000f, 0.3162f, 0.8404f, 1.0000f, 7.5600f, 0.9100f, 1.0000f, 0.4864f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 2.4378f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 4.0000f, 1.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +/* Castle Presets */ + +#define EFX_REVERB_PRESET_CASTLE_SMALLROOM \ + { 1.0000f, 0.8900f, 0.3162f, 0.3981f, 0.1000f, 1.2200f, 0.8300f, 0.3100f, 0.8913f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_SHORTPASSAGE \ + { 1.0000f, 0.8900f, 0.3162f, 0.3162f, 0.1000f, 2.3200f, 0.8300f, 0.3100f, 0.8913f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_MEDIUMROOM \ + { 1.0000f, 0.9300f, 0.3162f, 0.2818f, 0.1000f, 2.0400f, 0.8300f, 0.4600f, 0.6310f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 1.5849f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1550f, 0.0300f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_LARGEROOM \ + { 1.0000f, 0.8200f, 0.3162f, 0.2818f, 0.1259f, 2.5300f, 0.8300f, 0.5000f, 0.4467f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.1850f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_LONGPASSAGE \ + { 1.0000f, 0.8900f, 0.3162f, 0.3981f, 0.1000f, 3.4200f, 0.8300f, 0.3100f, 0.8913f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_HALL \ + { 1.0000f, 0.8100f, 0.3162f, 0.2818f, 0.1778f, 3.1400f, 0.7900f, 0.6200f, 0.1778f, 0.0560f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_CUPBOARD \ + { 1.0000f, 0.8900f, 0.3162f, 0.2818f, 0.1000f, 0.6700f, 0.8700f, 0.3100f, 1.4125f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 3.5481f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_COURTYARD \ + { 1.0000f, 0.4200f, 0.3162f, 0.4467f, 0.1995f, 2.1300f, 0.6100f, 0.2300f, 0.2239f, 0.1600f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0360f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.3700f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_CASTLE_ALCOVE \ + { 1.0000f, 0.8900f, 0.3162f, 0.5012f, 0.1000f, 1.6400f, 0.8700f, 0.3100f, 1.0000f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +/* Factory Presets */ + +#define EFX_REVERB_PRESET_FACTORY_SMALLROOM \ + { 0.3645f, 0.8200f, 0.3162f, 0.7943f, 0.5012f, 1.7200f, 0.6500f, 1.3100f, 0.7079f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.7783f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.1190f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_SHORTPASSAGE \ + { 0.3645f, 0.6400f, 0.2512f, 0.7943f, 0.5012f, 2.5300f, 0.6500f, 1.3100f, 1.0000f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.1350f, 0.2300f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_MEDIUMROOM \ + { 0.4287f, 0.8200f, 0.2512f, 0.7943f, 0.5012f, 2.7600f, 0.6500f, 1.3100f, 0.2818f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1740f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_LARGEROOM \ + { 0.4287f, 0.7500f, 0.2512f, 0.7079f, 0.6310f, 4.2400f, 0.5100f, 1.3100f, 0.1778f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.2310f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_LONGPASSAGE \ + { 0.3645f, 0.6400f, 0.2512f, 0.7943f, 0.5012f, 4.0600f, 0.6500f, 1.3100f, 1.0000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0370f, { 0.0000f, 0.0000f, 0.0000f }, 0.1350f, 0.2300f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_HALL \ + { 0.4287f, 0.7500f, 0.3162f, 0.7079f, 0.6310f, 7.4300f, 0.5100f, 1.3100f, 0.0631f, 0.0730f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0270f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_CUPBOARD \ + { 0.3071f, 0.6300f, 0.2512f, 0.7943f, 0.5012f, 0.4900f, 0.6500f, 1.3100f, 1.2589f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.1070f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_COURTYARD \ + { 0.3071f, 0.5700f, 0.3162f, 0.3162f, 0.6310f, 2.3200f, 0.2900f, 0.5600f, 0.2239f, 0.1400f, { 0.0000f, 0.0000f, 0.0000f }, 0.3981f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2900f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_ALCOVE \ + { 0.3645f, 0.5900f, 0.2512f, 0.7943f, 0.5012f, 3.1400f, 0.6500f, 1.3100f, 1.4125f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.1140f, 0.1000f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +/* Ice Palace Presets */ + +#define EFX_REVERB_PRESET_ICEPALACE_SMALLROOM \ + { 1.0000f, 0.8400f, 0.3162f, 0.5623f, 0.2818f, 1.5100f, 1.5300f, 0.2700f, 0.8913f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1640f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_SHORTPASSAGE \ + { 1.0000f, 0.7500f, 0.3162f, 0.5623f, 0.2818f, 1.7900f, 1.4600f, 0.2800f, 0.5012f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0190f, { 0.0000f, 0.0000f, 0.0000f }, 0.1770f, 0.0900f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_MEDIUMROOM \ + { 1.0000f, 0.8700f, 0.3162f, 0.5623f, 0.4467f, 2.2200f, 1.5300f, 0.3200f, 0.3981f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0270f, { 0.0000f, 0.0000f, 0.0000f }, 0.1860f, 0.1200f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_LARGEROOM \ + { 1.0000f, 0.8100f, 0.3162f, 0.5623f, 0.4467f, 3.1400f, 1.5300f, 0.3200f, 0.2512f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0270f, { 0.0000f, 0.0000f, 0.0000f }, 0.2140f, 0.1100f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_LONGPASSAGE \ + { 1.0000f, 0.7700f, 0.3162f, 0.5623f, 0.3981f, 3.0100f, 1.4600f, 0.2800f, 0.7943f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0250f, { 0.0000f, 0.0000f, 0.0000f }, 0.1860f, 0.0400f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_HALL \ + { 1.0000f, 0.7600f, 0.3162f, 0.4467f, 0.5623f, 5.4900f, 1.5300f, 0.3800f, 0.1122f, 0.0540f, { 0.0000f, 0.0000f, 0.0000f }, 0.6310f, 0.0520f, { 0.0000f, 0.0000f, 0.0000f }, 0.2260f, 0.1100f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_CUPBOARD \ + { 1.0000f, 0.8300f, 0.3162f, 0.5012f, 0.2239f, 0.7600f, 1.5300f, 0.2600f, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.1430f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_COURTYARD \ + { 1.0000f, 0.5900f, 0.3162f, 0.2818f, 0.3162f, 2.0400f, 1.2000f, 0.3800f, 0.3162f, 0.1730f, { 0.0000f, 0.0000f, 0.0000f }, 0.3162f, 0.0430f, { 0.0000f, 0.0000f, 0.0000f }, 0.2350f, 0.4800f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_ALCOVE \ + { 1.0000f, 0.8400f, 0.3162f, 0.5623f, 0.2818f, 2.7600f, 1.4600f, 0.2800f, 1.1220f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1610f, 0.0900f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +/* Space Station Presets */ + +#define EFX_REVERB_PRESET_SPACESTATION_SMALLROOM \ + { 0.2109f, 0.7000f, 0.3162f, 0.7079f, 0.8913f, 1.7200f, 0.8200f, 0.5500f, 0.7943f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0130f, { 0.0000f, 0.0000f, 0.0000f }, 0.1880f, 0.2600f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_SHORTPASSAGE \ + { 0.2109f, 0.8700f, 0.3162f, 0.6310f, 0.8913f, 3.5700f, 0.5000f, 0.5500f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.1720f, 0.2000f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_MEDIUMROOM \ + { 0.2109f, 0.7500f, 0.3162f, 0.6310f, 0.8913f, 3.0100f, 0.5000f, 0.5500f, 0.3981f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0350f, { 0.0000f, 0.0000f, 0.0000f }, 0.2090f, 0.3100f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_LARGEROOM \ + { 0.3645f, 0.8100f, 0.3162f, 0.6310f, 0.8913f, 3.8900f, 0.3800f, 0.6100f, 0.3162f, 0.0560f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0350f, { 0.0000f, 0.0000f, 0.0000f }, 0.2330f, 0.2800f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_LONGPASSAGE \ + { 0.4287f, 0.8200f, 0.3162f, 0.6310f, 0.8913f, 4.6200f, 0.6200f, 0.5500f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0310f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2300f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_HALL \ + { 0.4287f, 0.8700f, 0.3162f, 0.6310f, 0.8913f, 7.1100f, 0.3800f, 0.6100f, 0.1778f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.6310f, 0.0470f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2500f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_CUPBOARD \ + { 0.1715f, 0.5600f, 0.3162f, 0.7079f, 0.8913f, 0.7900f, 0.8100f, 0.5500f, 1.4125f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.7783f, 0.0180f, { 0.0000f, 0.0000f, 0.0000f }, 0.1810f, 0.3100f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_ALCOVE \ + { 0.2109f, 0.7800f, 0.3162f, 0.7079f, 0.8913f, 1.1600f, 0.8100f, 0.5500f, 1.4125f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0180f, { 0.0000f, 0.0000f, 0.0000f }, 0.1920f, 0.2100f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +/* Wooden Galleon Presets */ + +#define EFX_REVERB_PRESET_WOODEN_SMALLROOM \ + { 1.0000f, 1.0000f, 0.3162f, 0.1122f, 0.3162f, 0.7900f, 0.3200f, 0.8700f, 1.0000f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_SHORTPASSAGE \ + { 1.0000f, 1.0000f, 0.3162f, 0.1259f, 0.3162f, 1.7500f, 0.5000f, 0.8700f, 0.8913f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.6310f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_MEDIUMROOM \ + { 1.0000f, 1.0000f, 0.3162f, 0.1000f, 0.2818f, 1.4700f, 0.4200f, 0.8200f, 0.8913f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_LARGEROOM \ + { 1.0000f, 1.0000f, 0.3162f, 0.0891f, 0.2818f, 2.6500f, 0.3300f, 0.8200f, 0.8913f, 0.0660f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_LONGPASSAGE \ + { 1.0000f, 1.0000f, 0.3162f, 0.1000f, 0.3162f, 1.9900f, 0.4000f, 0.7900f, 1.0000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.4467f, 0.0360f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_HALL \ + { 1.0000f, 1.0000f, 0.3162f, 0.0794f, 0.2818f, 3.4500f, 0.3000f, 0.8200f, 0.8913f, 0.0880f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0630f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_CUPBOARD \ + { 1.0000f, 1.0000f, 0.3162f, 0.1413f, 0.3162f, 0.5600f, 0.4600f, 0.9100f, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0280f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_COURTYARD \ + { 1.0000f, 0.6500f, 0.3162f, 0.0794f, 0.3162f, 1.7900f, 0.3500f, 0.7900f, 0.5623f, 0.1230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1000f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_ALCOVE \ + { 1.0000f, 1.0000f, 0.3162f, 0.1259f, 0.3162f, 1.2200f, 0.6200f, 0.9100f, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +/* Sports Presets */ + +#define EFX_REVERB_PRESET_SPORT_EMPTYSTADIUM \ + { 1.0000f, 1.0000f, 0.3162f, 0.4467f, 0.7943f, 6.2600f, 0.5100f, 1.1000f, 0.0631f, 0.1830f, { 0.0000f, 0.0000f, 0.0000f }, 0.3981f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPORT_SQUASHCOURT \ + { 1.0000f, 0.7500f, 0.3162f, 0.3162f, 0.7943f, 2.2200f, 0.9100f, 1.1600f, 0.4467f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1260f, 0.1900f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPORT_SMALLSWIMMINGPOOL \ + { 1.0000f, 0.7000f, 0.3162f, 0.7943f, 0.8913f, 2.7600f, 1.2500f, 1.1400f, 0.6310f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1790f, 0.1500f, 0.8950f, 0.1900f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_SPORT_LARGESWIMMINGPOOL \ + { 1.0000f, 0.8200f, 0.3162f, 0.7943f, 1.0000f, 5.4900f, 1.3100f, 1.1400f, 0.4467f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 0.5012f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2220f, 0.5500f, 1.1590f, 0.2100f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_SPORT_GYMNASIUM \ + { 1.0000f, 0.8100f, 0.3162f, 0.4467f, 0.8913f, 3.1400f, 1.0600f, 1.3500f, 0.3981f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.5623f, 0.0450f, { 0.0000f, 0.0000f, 0.0000f }, 0.1460f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPORT_FULLSTADIUM \ + { 1.0000f, 1.0000f, 0.3162f, 0.0708f, 0.7943f, 5.2500f, 0.1700f, 0.8000f, 0.1000f, 0.1880f, { 0.0000f, 0.0000f, 0.0000f }, 0.2818f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPORT_STADIUMTANNOY \ + { 1.0000f, 0.7800f, 0.3162f, 0.5623f, 0.5012f, 2.5300f, 0.8800f, 0.6800f, 0.2818f, 0.2300f, { 0.0000f, 0.0000f, 0.0000f }, 0.5012f, 0.0630f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +/* Prefab Presets */ + +#define EFX_REVERB_PRESET_PREFAB_WORKSHOP \ + { 0.4287f, 1.0000f, 0.3162f, 0.1413f, 0.3981f, 0.7600f, 1.0000f, 1.0000f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_PREFAB_SCHOOLROOM \ + { 0.4022f, 0.6900f, 0.3162f, 0.6310f, 0.5012f, 0.9800f, 0.4500f, 0.1800f, 1.4125f, 0.0170f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.0950f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PREFAB_PRACTISEROOM \ + { 0.4022f, 0.8700f, 0.3162f, 0.3981f, 0.5012f, 1.1200f, 0.5600f, 0.1800f, 1.2589f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.0950f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PREFAB_OUTHOUSE \ + { 1.0000f, 0.8200f, 0.3162f, 0.1122f, 0.1585f, 1.3800f, 0.3800f, 0.3500f, 0.8913f, 0.0240f, { 0.0000f, 0.0000f, -0.0000f }, 0.6310f, 0.0440f, { 0.0000f, 0.0000f, 0.0000f }, 0.1210f, 0.1700f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_PREFAB_CARAVAN \ + { 1.0000f, 1.0000f, 0.3162f, 0.0891f, 0.1259f, 0.4300f, 1.5000f, 1.0000f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +/* Dome and Pipe Presets */ + +#define EFX_REVERB_PRESET_DOME_TOMB \ + { 1.0000f, 0.7900f, 0.3162f, 0.3548f, 0.2239f, 4.1800f, 0.2100f, 0.1000f, 0.3868f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 1.6788f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.1770f, 0.1900f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_PIPE_SMALL \ + { 1.0000f, 1.0000f, 0.3162f, 0.3548f, 0.2239f, 5.0400f, 0.1000f, 0.1000f, 0.5012f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 2.5119f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DOME_SAINTPAULS \ + { 1.0000f, 0.8700f, 0.3162f, 0.3548f, 0.2239f, 10.4800f, 0.1900f, 0.1000f, 0.1778f, 0.0900f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0420f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.1200f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PIPE_LONGTHIN \ + { 0.2560f, 0.9100f, 0.3162f, 0.4467f, 0.2818f, 9.2100f, 0.1800f, 0.1000f, 0.7079f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_PIPE_LARGE \ + { 1.0000f, 1.0000f, 0.3162f, 0.3548f, 0.2239f, 8.4500f, 0.1000f, 0.1000f, 0.3981f, 0.0460f, { 0.0000f, 0.0000f, 0.0000f }, 1.5849f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PIPE_RESONANT \ + { 0.1373f, 0.9100f, 0.3162f, 0.4467f, 0.2818f, 6.8100f, 0.1800f, 0.1000f, 0.7079f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x0 } + +/* Outdoors Presets */ + +#define EFX_REVERB_PRESET_OUTDOORS_BACKYARD \ + { 1.0000f, 0.4500f, 0.3162f, 0.2512f, 0.5012f, 1.1200f, 0.3400f, 0.4600f, 0.4467f, 0.0690f, { 0.0000f, 0.0000f, -0.0000f }, 0.7079f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.2180f, 0.3400f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_OUTDOORS_ROLLINGPLAINS \ + { 1.0000f, 0.0000f, 0.3162f, 0.0112f, 0.6310f, 2.1300f, 0.2100f, 0.4600f, 0.1778f, 0.3000f, { 0.0000f, 0.0000f, -0.0000f }, 0.4467f, 0.0190f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_OUTDOORS_DEEPCANYON \ + { 1.0000f, 0.7400f, 0.3162f, 0.1778f, 0.6310f, 3.8900f, 0.2100f, 0.4600f, 0.3162f, 0.2230f, { 0.0000f, 0.0000f, -0.0000f }, 0.3548f, 0.0190f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_OUTDOORS_CREEK \ + { 1.0000f, 0.3500f, 0.3162f, 0.1778f, 0.5012f, 2.1300f, 0.2100f, 0.4600f, 0.3981f, 0.1150f, { 0.0000f, 0.0000f, -0.0000f }, 0.1995f, 0.0310f, { 0.0000f, 0.0000f, 0.0000f }, 0.2180f, 0.3400f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_OUTDOORS_VALLEY \ + { 1.0000f, 0.2800f, 0.3162f, 0.0282f, 0.1585f, 2.8800f, 0.2600f, 0.3500f, 0.1413f, 0.2630f, { 0.0000f, 0.0000f, -0.0000f }, 0.3981f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.3400f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 } + +/* Mood Presets */ + +#define EFX_REVERB_PRESET_MOOD_HEAVEN \ + { 1.0000f, 0.9400f, 0.3162f, 0.7943f, 0.4467f, 5.0400f, 1.1200f, 0.5600f, 0.2427f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0800f, 2.7420f, 0.0500f, 0.9977f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_MOOD_HELL \ + { 1.0000f, 0.5700f, 0.3162f, 0.3548f, 0.4467f, 3.5700f, 0.4900f, 2.0000f, 0.0000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1100f, 0.0400f, 2.1090f, 0.5200f, 0.9943f, 5000.0000f, 139.5000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_MOOD_MEMORY \ + { 1.0000f, 0.8500f, 0.3162f, 0.6310f, 0.3548f, 4.0600f, 0.8200f, 0.5600f, 0.0398f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.4740f, 0.4500f, 0.9886f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +/* Driving Presets */ + +#define EFX_REVERB_PRESET_DRIVING_COMMENTATOR \ + { 1.0000f, 0.0000f, 3.1623f, 0.5623f, 0.5012f, 2.4200f, 0.8800f, 0.6800f, 0.1995f, 0.0930f, { 0.0000f, 0.0000f, 0.0000f }, 0.2512f, 0.0170f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9886f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DRIVING_PITGARAGE \ + { 0.4287f, 0.5900f, 0.3162f, 0.7079f, 0.5623f, 1.7200f, 0.9300f, 0.8700f, 0.5623f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.1100f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_DRIVING_INCAR_RACER \ + { 0.0832f, 0.8000f, 0.3162f, 1.0000f, 0.7943f, 0.1700f, 2.0000f, 0.4100f, 1.7783f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10268.2002f, 251.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DRIVING_INCAR_SPORTS \ + { 0.0832f, 0.8000f, 0.3162f, 0.6310f, 1.0000f, 0.1700f, 0.7500f, 0.4100f, 1.0000f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.5623f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10268.2002f, 251.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DRIVING_INCAR_LUXURY \ + { 0.2560f, 1.0000f, 0.3162f, 0.1000f, 0.5012f, 0.1300f, 0.4100f, 0.4600f, 0.7943f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.5849f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10268.2002f, 251.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DRIVING_FULLGRANDSTAND \ + { 1.0000f, 1.0000f, 0.3162f, 0.2818f, 0.6310f, 3.0100f, 1.3700f, 1.2800f, 0.3548f, 0.0900f, { 0.0000f, 0.0000f, 0.0000f }, 0.1778f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10420.2002f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_DRIVING_EMPTYGRANDSTAND \ + { 1.0000f, 1.0000f, 0.3162f, 1.0000f, 0.7943f, 4.6200f, 1.7500f, 1.4000f, 0.2082f, 0.0900f, { 0.0000f, 0.0000f, 0.0000f }, 0.2512f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10420.2002f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_DRIVING_TUNNEL \ + { 1.0000f, 0.8100f, 0.3162f, 0.3981f, 0.8913f, 3.4200f, 0.9400f, 1.3100f, 0.7079f, 0.0510f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0470f, { 0.0000f, 0.0000f, 0.0000f }, 0.2140f, 0.0500f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 155.3000f, 0.0000f, 0x1 } + +/* City Presets */ + +#define EFX_REVERB_PRESET_CITY_STREETS \ + { 1.0000f, 0.7800f, 0.3162f, 0.7079f, 0.8913f, 1.7900f, 1.1200f, 0.9100f, 0.2818f, 0.0460f, { 0.0000f, 0.0000f, 0.0000f }, 0.1995f, 0.0280f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CITY_SUBWAY \ + { 1.0000f, 0.7400f, 0.3162f, 0.7079f, 0.8913f, 3.0100f, 1.2300f, 0.9100f, 0.7079f, 0.0460f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0280f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 0.2100f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CITY_MUSEUM \ + { 1.0000f, 0.8200f, 0.3162f, 0.1778f, 0.1778f, 3.2800f, 1.4000f, 0.5700f, 0.2512f, 0.0390f, { 0.0000f, 0.0000f, -0.0000f }, 0.8913f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 0.1300f, 0.1700f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_CITY_LIBRARY \ + { 1.0000f, 0.8200f, 0.3162f, 0.2818f, 0.0891f, 2.7600f, 0.8900f, 0.4100f, 0.3548f, 0.0290f, { 0.0000f, 0.0000f, -0.0000f }, 0.8913f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.1300f, 0.1700f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_CITY_UNDERPASS \ + { 1.0000f, 0.8200f, 0.3162f, 0.4467f, 0.8913f, 3.5700f, 1.1200f, 0.9100f, 0.3981f, 0.0590f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0370f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.1400f, 0.2500f, 0.0000f, 0.9920f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CITY_ABANDONED \ + { 1.0000f, 0.6900f, 0.3162f, 0.7943f, 0.8913f, 3.2800f, 1.1700f, 0.9100f, 0.4467f, 0.0440f, { 0.0000f, 0.0000f, 0.0000f }, 0.2818f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2000f, 0.2500f, 0.0000f, 0.9966f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +/* Misc. Presets */ + +#define EFX_REVERB_PRESET_DUSTYROOM \ + { 0.3645f, 0.5600f, 0.3162f, 0.7943f, 0.7079f, 1.7900f, 0.3800f, 0.2100f, 0.5012f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0060f, { 0.0000f, 0.0000f, 0.0000f }, 0.2020f, 0.0500f, 0.2500f, 0.0000f, 0.9886f, 13046.0000f, 163.3000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CHAPEL \ + { 1.0000f, 0.8400f, 0.3162f, 0.5623f, 1.0000f, 4.6200f, 0.6400f, 1.2300f, 0.4467f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.1100f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SMALLWATERROOM \ + { 1.0000f, 0.7000f, 0.3162f, 0.4477f, 1.0000f, 1.5100f, 1.2500f, 1.1400f, 0.8913f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1790f, 0.1500f, 0.8950f, 0.1900f, 0.9920f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#endif /* EFX_PRESETS_H */ diff --git a/Externals/OpenAL/include/efx.h b/Externals/OpenAL/include/efx.h index fece1608de..57766983f6 100644 --- a/Externals/OpenAL/include/efx.h +++ b/Externals/OpenAL/include/efx.h @@ -1,737 +1,761 @@ -#ifndef __efx_h_ -#define __efx_h_ +#ifndef AL_EFX_H +#define AL_EFX_H +#include "alc.h" +#include "al.h" + #ifdef __cplusplus extern "C" { #endif -#define ALC_EXT_EFX_NAME "ALC_EXT_EFX" +#define ALC_EXT_EFX_NAME "ALC_EXT_EFX" -/** - * Context definitions to be used with alcCreateContext. - * These values must be unique and not conflict with other - * al context values. - */ -#define ALC_EFX_MAJOR_VERSION 0x20001 -#define ALC_EFX_MINOR_VERSION 0x20002 -#define ALC_MAX_AUXILIARY_SENDS 0x20003 +#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 -/** - * Listener definitions to be used with alListener functions. - * These values must be unique and not conflict with other - * al listener values. - */ -#define AL_METERS_PER_UNIT 0x20004 +/* 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 -/** - * Source definitions to be used with alSource functions. - * These values must be unique and not conflict with other - * al source values. - */ -#define AL_DIRECT_FILTER 0x20005 -#define AL_AUXILIARY_SEND_FILTER 0x20006 -#define AL_AIR_ABSORPTION_FACTOR 0x20007 -#define AL_ROOM_ROLLOFF_FACTOR 0x20008 -#define AL_CONE_OUTER_GAINHF 0x20009 -#define AL_DIRECT_FILTER_GAINHF_AUTO 0x2000A -#define AL_AUXILIARY_SEND_FILTER_GAIN_AUTO 0x2000B -#define AL_AUXILIARY_SEND_FILTER_GAINHF_AUTO 0x2000C +/* 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 -/** - * Effect object definitions to be used with alEffect functions. - * - * Effect parameter value definitions, ranges, and defaults - * appear farther down in this file. - */ +/* 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 -/* Reverb Parameters */ -#define AL_REVERB_DENSITY 0x0001 -#define AL_REVERB_DIFFUSION 0x0002 -#define AL_REVERB_GAIN 0x0003 -#define AL_REVERB_GAINHF 0x0004 -#define AL_REVERB_DECAY_TIME 0x0005 -#define AL_REVERB_DECAY_HFRATIO 0x0006 -#define AL_REVERB_REFLECTIONS_GAIN 0x0007 -#define AL_REVERB_REFLECTIONS_DELAY 0x0008 -#define AL_REVERB_LATE_REVERB_GAIN 0x0009 -#define AL_REVERB_LATE_REVERB_DELAY 0x000A -#define AL_REVERB_AIR_ABSORPTION_GAINHF 0x000B -#define AL_REVERB_ROOM_ROLLOFF_FACTOR 0x000C -#define AL_REVERB_DECAY_HFLIMIT 0x000D +/* Pitchshifter effect parameters */ +#define AL_PITCH_SHIFTER_COARSE_TUNE 0x0001 +#define AL_PITCH_SHIFTER_FINE_TUNE 0x0002 -/* Chorus Parameters */ -#define AL_CHORUS_WAVEFORM 0x0001 -#define AL_CHORUS_PHASE 0x0002 -#define AL_CHORUS_RATE 0x0003 -#define AL_CHORUS_DEPTH 0x0004 -#define AL_CHORUS_FEEDBACK 0x0005 -#define AL_CHORUS_DELAY 0x0006 +/* Ringmodulator effect parameters */ +#define AL_RING_MODULATOR_FREQUENCY 0x0001 +#define AL_RING_MODULATOR_HIGHPASS_CUTOFF 0x0002 +#define AL_RING_MODULATOR_WAVEFORM 0x0003 -/* Distortion Parameters */ -#define AL_DISTORTION_EDGE 0x0001 -#define AL_DISTORTION_GAIN 0x0002 -#define AL_DISTORTION_LOWPASS_CUTOFF 0x0003 -#define AL_DISTORTION_EQCENTER 0x0004 -#define AL_DISTORTION_EQBANDWIDTH 0x0005 +/* 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 -/* Echo Parameters */ -#define AL_ECHO_DELAY 0x0001 -#define AL_ECHO_LRDELAY 0x0002 -#define AL_ECHO_DAMPING 0x0003 -#define AL_ECHO_FEEDBACK 0x0004 -#define AL_ECHO_SPREAD 0x0005 +/* Compressor effect parameters */ +#define AL_COMPRESSOR_ONOFF 0x0001 -/* Flanger Parameters */ -#define AL_FLANGER_WAVEFORM 0x0001 -#define AL_FLANGER_PHASE 0x0002 -#define AL_FLANGER_RATE 0x0003 -#define AL_FLANGER_DEPTH 0x0004 -#define AL_FLANGER_FEEDBACK 0x0005 -#define AL_FLANGER_DELAY 0x0006 - -/* Frequencyshifter Parameters */ -#define AL_FREQUENCY_SHIFTER_FREQUENCY 0x0001 -#define AL_FREQUENCY_SHIFTER_LEFT_DIRECTION 0x0002 -#define AL_FREQUENCY_SHIFTER_RIGHT_DIRECTION 0x0003 - -/* Vocalmorpher Parameters */ -#define AL_VOCAL_MORPHER_PHONEMEA 0x0001 -#define AL_VOCAL_MORPHER_PHONEMEA_COARSE_TUNING 0x0002 -#define AL_VOCAL_MORPHER_PHONEMEB 0x0003 -#define AL_VOCAL_MORPHER_PHONEMEB_COARSE_TUNING 0x0004 -#define AL_VOCAL_MORPHER_WAVEFORM 0x0005 -#define AL_VOCAL_MORPHER_RATE 0x0006 - -/* Pitchshifter Parameters */ -#define AL_PITCH_SHIFTER_COARSE_TUNE 0x0001 -#define AL_PITCH_SHIFTER_FINE_TUNE 0x0002 - -/* Ringmodulator Parameters */ -#define AL_RING_MODULATOR_FREQUENCY 0x0001 -#define AL_RING_MODULATOR_HIGHPASS_CUTOFF 0x0002 -#define AL_RING_MODULATOR_WAVEFORM 0x0003 - -/* Autowah Parameters */ -#define AL_AUTOWAH_ATTACK_TIME 0x0001 -#define AL_AUTOWAH_RELEASE_TIME 0x0002 -#define AL_AUTOWAH_RESONANCE 0x0003 -#define AL_AUTOWAH_PEAK_GAIN 0x0004 - -/* Compressor Parameters */ -#define AL_COMPRESSOR_ONOFF 0x0001 - -/* Equalizer Parameters */ -#define AL_EQUALIZER_LOW_GAIN 0x0001 -#define AL_EQUALIZER_LOW_CUTOFF 0x0002 -#define AL_EQUALIZER_MID1_GAIN 0x0003 -#define AL_EQUALIZER_MID1_CENTER 0x0004 -#define AL_EQUALIZER_MID1_WIDTH 0x0005 -#define AL_EQUALIZER_MID2_GAIN 0x0006 -#define AL_EQUALIZER_MID2_CENTER 0x0007 -#define AL_EQUALIZER_MID2_WIDTH 0x0008 -#define AL_EQUALIZER_HIGH_GAIN 0x0009 -#define AL_EQUALIZER_HIGH_CUTOFF 0x000A +/* 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 +#define AL_EFFECT_FIRST_PARAMETER 0x0000 +#define AL_EFFECT_LAST_PARAMETER 0x8000 +#define AL_EFFECT_TYPE 0x8001 -/* Effect type definitions to be used with AL_EFFECT_TYPE. */ -#define AL_EFFECT_NULL 0x0000 /* Can also be used as an Effect Object ID */ -#define AL_EFFECT_REVERB 0x0001 -#define AL_EFFECT_CHORUS 0x0002 -#define AL_EFFECT_DISTORTION 0x0003 -#define AL_EFFECT_ECHO 0x0004 -#define AL_EFFECT_FLANGER 0x0005 -#define AL_EFFECT_FREQUENCY_SHIFTER 0x0006 -#define AL_EFFECT_VOCAL_MORPHER 0x0007 -#define AL_EFFECT_PITCH_SHIFTER 0x0008 -#define AL_EFFECT_RING_MODULATOR 0x0009 -#define AL_EFFECT_AUTOWAH 0x000A -#define AL_EFFECT_COMPRESSOR 0x000B -#define AL_EFFECT_EQUALIZER 0x000C +/* 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 Slot object definitions to be used with alAuxiliaryEffectSlot functions. - */ -#define AL_EFFECTSLOT_EFFECT 0x0001 -#define AL_EFFECTSLOT_GAIN 0x0002 -#define AL_EFFECTSLOT_AUXILIARY_SEND_AUTO 0x0003 +/* Auxiliary Effect Slot properties. */ +#define AL_EFFECTSLOT_EFFECT 0x0001 +#define AL_EFFECTSLOT_GAIN 0x0002 +#define AL_EFFECTSLOT_AUXILIARY_SEND_AUTO 0x0003 -/** - * Value to be used as an Auxiliary Slot ID to disable a source send.. - */ -#define AL_EFFECTSLOT_NULL 0x0000 +/* NULL Auxiliary Slot ID to disable a source send. */ +#define AL_EFFECTSLOT_NULL 0x0000 +/* Filter properties. */ -/** - * Filter object definitions to be used with alFilter functions. - */ +/* Lowpass filter parameters */ +#define AL_LOWPASS_GAIN 0x0001 +#define AL_LOWPASS_GAINHF 0x0002 -/* Lowpass parameters. */ -#define AL_LOWPASS_GAIN 0x0001 -#define AL_LOWPASS_GAINHF 0x0002 +/* Highpass filter parameters */ +#define AL_HIGHPASS_GAIN 0x0001 +#define AL_HIGHPASS_GAINLF 0x0002 -/* Highpass Parameters */ -#define AL_HIGHPASS_GAIN 0x0001 -#define AL_HIGHPASS_GAINLF 0x0002 - -/* Bandpass Parameters */ -#define AL_BANDPASS_GAIN 0x0001 -#define AL_BANDPASS_GAINLF 0x0002 -#define AL_BANDPASS_GAINHF 0x0003 +/* 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 +#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, const ALuint*); +typedef ALboolean (AL_APIENTRY *LPALISEFFECT)(ALuint); +typedef void (AL_APIENTRY *LPALEFFECTI)(ALuint, ALenum, ALint); +typedef void (AL_APIENTRY *LPALEFFECTIV)(ALuint, ALenum, const ALint*); +typedef void (AL_APIENTRY *LPALEFFECTF)(ALuint, ALenum, ALfloat); +typedef void (AL_APIENTRY *LPALEFFECTFV)(ALuint, ALenum, const 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, const ALuint*); +typedef ALboolean (AL_APIENTRY *LPALISFILTER)(ALuint); +typedef void (AL_APIENTRY *LPALFILTERI)(ALuint, ALenum, ALint); +typedef void (AL_APIENTRY *LPALFILTERIV)(ALuint, ALenum, const ALint*); +typedef void (AL_APIENTRY *LPALFILTERF)(ALuint, ALenum, ALfloat); +typedef void (AL_APIENTRY *LPALFILTERFV)(ALuint, ALenum, const 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, const ALuint*); +typedef ALboolean (AL_APIENTRY *LPALISAUXILIARYEFFECTSLOT)(ALuint); +typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTI)(ALuint, ALenum, ALint); +typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTIV)(ALuint, ALenum, const ALint*); +typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTF)(ALuint, ALenum, ALfloat); +typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTFV)(ALuint, ALenum, const 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, const 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, const ALint *piValues); +AL_API ALvoid AL_APIENTRY alEffectf(ALuint effect, ALenum param, ALfloat flValue); +AL_API ALvoid AL_APIENTRY alEffectfv(ALuint effect, ALenum param, const 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, const 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, const ALint *piValues); +AL_API ALvoid AL_APIENTRY alFilterf(ALuint filter, ALenum param, ALfloat flValue); +AL_API ALvoid AL_APIENTRY alFilterfv(ALuint filter, ALenum param, const 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, const 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, const ALint *piValues); +AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat flValue); +AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, const 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 AL_LOWPASS_MIN_GAIN (0.0f) +#define AL_LOWPASS_MAX_GAIN (1.0f) +#define AL_LOWPASS_DEFAULT_GAIN (1.0f) + +#define AL_LOWPASS_MIN_GAINHF (0.0f) +#define AL_LOWPASS_MAX_GAINHF (1.0f) +#define AL_LOWPASS_DEFAULT_GAINHF (1.0f) + +/* Highpass filter */ +#define AL_HIGHPASS_MIN_GAIN (0.0f) +#define AL_HIGHPASS_MAX_GAIN (1.0f) +#define AL_HIGHPASS_DEFAULT_GAIN (1.0f) + +#define AL_HIGHPASS_MIN_GAINLF (0.0f) +#define AL_HIGHPASS_MAX_GAINLF (1.0f) +#define AL_HIGHPASS_DEFAULT_GAINLF (1.0f) + +/* Bandpass filter */ +#define AL_BANDPASS_MIN_GAIN (0.0f) +#define AL_BANDPASS_MAX_GAIN (1.0f) +#define AL_BANDPASS_DEFAULT_GAIN (1.0f) + +#define AL_BANDPASS_MIN_GAINHF (0.0f) +#define AL_BANDPASS_MAX_GAINHF (1.0f) +#define AL_BANDPASS_DEFAULT_GAINHF (1.0f) + +#define AL_BANDPASS_MIN_GAINLF (0.0f) +#define AL_BANDPASS_MAX_GAINLF (1.0f) +#define AL_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) -/* Filter type definitions to be used with AL_FILTER_TYPE. */ -#define AL_FILTER_NULL 0x0000 /* Can also be used as a Filter Object ID */ -#define AL_FILTER_LOWPASS 0x0001 -#define AL_FILTER_HIGHPASS 0x0002 -#define AL_FILTER_BANDPASS 0x0003 +#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) -/** - * Effect object functions. - */ +#define AL_EAXREVERB_MIN_GAINHF (0.0f) +#define AL_EAXREVERB_MAX_GAINHF (1.0f) +#define AL_EAXREVERB_DEFAULT_GAINHF (0.89f) -/* Create Effect objects. */ -typedef void (__cdecl *LPALGENEFFECTS)( ALsizei n, ALuint* effects ); +#define AL_EAXREVERB_MIN_GAINLF (0.0f) +#define AL_EAXREVERB_MAX_GAINLF (1.0f) +#define AL_EAXREVERB_DEFAULT_GAINLF (1.0f) -/* Delete Effect objects. */ -typedef void (__cdecl *LPALDELETEEFFECTS)( ALsizei n, ALuint* effects ); +#define AL_EAXREVERB_MIN_DECAY_TIME (0.1f) +#define AL_EAXREVERB_MAX_DECAY_TIME (20.0f) +#define AL_EAXREVERB_DEFAULT_DECAY_TIME (1.49f) -/* Verify a handle is a valid Effect. */ -typedef ALboolean (__cdecl *LPALISEFFECT)( ALuint eid ); +#define AL_EAXREVERB_MIN_DECAY_HFRATIO (0.1f) +#define AL_EAXREVERB_MAX_DECAY_HFRATIO (2.0f) +#define AL_EAXREVERB_DEFAULT_DECAY_HFRATIO (0.83f) -/* Set an integer parameter for an Effect object. */ -typedef void (__cdecl *LPALEFFECTI)( ALuint eid, ALenum param, ALint value); -typedef void (__cdecl *LPALEFFECTIV)( ALuint eid, ALenum param, ALint* values ); +#define AL_EAXREVERB_MIN_DECAY_LFRATIO (0.1f) +#define AL_EAXREVERB_MAX_DECAY_LFRATIO (2.0f) +#define AL_EAXREVERB_DEFAULT_DECAY_LFRATIO (1.0f) -/* Set a floating point parameter for an Effect object. */ -typedef void (__cdecl *LPALEFFECTF)( ALuint eid, ALenum param, ALfloat value); -typedef void (__cdecl *LPALEFFECTFV)( ALuint eid, ALenum param, ALfloat* values ); +#define AL_EAXREVERB_MIN_REFLECTIONS_GAIN (0.0f) +#define AL_EAXREVERB_MAX_REFLECTIONS_GAIN (3.16f) +#define AL_EAXREVERB_DEFAULT_REFLECTIONS_GAIN (0.05f) -/* Get an integer parameter for an Effect object. */ -typedef void (__cdecl *LPALGETEFFECTI)( ALuint eid, ALenum pname, ALint* value ); -typedef void (__cdecl *LPALGETEFFECTIV)( ALuint eid, ALenum pname, ALint* values ); +#define AL_EAXREVERB_MIN_REFLECTIONS_DELAY (0.0f) +#define AL_EAXREVERB_MAX_REFLECTIONS_DELAY (0.3f) +#define AL_EAXREVERB_DEFAULT_REFLECTIONS_DELAY (0.007f) -/* Get a floating point parameter for an Effect object. */ -typedef void (__cdecl *LPALGETEFFECTF)( ALuint eid, ALenum pname, ALfloat* value ); -typedef void (__cdecl *LPALGETEFFECTFV)( ALuint eid, ALenum pname, ALfloat* values ); +#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) -/** - * Filter object functions - */ +#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) -/* Create Filter objects. */ -typedef void (__cdecl *LPALGENFILTERS)( ALsizei n, ALuint* filters ); +#define AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ (0.0f) -/* Delete Filter objects. */ -typedef void (__cdecl *LPALDELETEFILTERS)( ALsizei n, ALuint* filters ); +#define AL_EAXREVERB_MIN_ECHO_TIME (0.075f) +#define AL_EAXREVERB_MAX_ECHO_TIME (0.25f) +#define AL_EAXREVERB_DEFAULT_ECHO_TIME (0.25f) -/* Verify a handle is a valid Filter. */ -typedef ALboolean (__cdecl *LPALISFILTER)( ALuint fid ); +#define AL_EAXREVERB_MIN_ECHO_DEPTH (0.0f) +#define AL_EAXREVERB_MAX_ECHO_DEPTH (1.0f) +#define AL_EAXREVERB_DEFAULT_ECHO_DEPTH (0.0f) -/* Set an integer parameter for a Filter object. */ -typedef void (__cdecl *LPALFILTERI)( ALuint fid, ALenum param, ALint value ); -typedef void (__cdecl *LPALFILTERIV)( ALuint fid, ALenum param, ALint* values ); +#define AL_EAXREVERB_MIN_MODULATION_TIME (0.04f) +#define AL_EAXREVERB_MAX_MODULATION_TIME (4.0f) +#define AL_EAXREVERB_DEFAULT_MODULATION_TIME (0.25f) -/* Set a floating point parameter for an Filter object. */ -typedef void (__cdecl *LPALFILTERF)( ALuint fid, ALenum param, ALfloat value); -typedef void (__cdecl *LPALFILTERFV)( ALuint fid, ALenum param, ALfloat* values ); +#define AL_EAXREVERB_MIN_MODULATION_DEPTH (0.0f) +#define AL_EAXREVERB_MAX_MODULATION_DEPTH (1.0f) +#define AL_EAXREVERB_DEFAULT_MODULATION_DEPTH (0.0f) -/* Get an integer parameter for a Filter object. */ -typedef void (__cdecl *LPALGETFILTERI)( ALuint fid, ALenum pname, ALint* value ); -typedef void (__cdecl *LPALGETFILTERIV)( ALuint fid, ALenum pname, ALint* values ); +#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) -/* Get a floating point parameter for a Filter object. */ -typedef void (__cdecl *LPALGETFILTERF)( ALuint fid, ALenum pname, ALfloat* value ); -typedef void (__cdecl *LPALGETFILTERFV)( ALuint fid, ALenum pname, ALfloat* values ); +#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) -/** - * Auxiliary Slot object functions - */ +#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) -/* Create Auxiliary Slot objects. */ -typedef void (__cdecl *LPALGENAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots ); +#define AL_EAXREVERB_MIN_DECAY_HFLIMIT AL_FALSE +#define AL_EAXREVERB_MAX_DECAY_HFLIMIT AL_TRUE +#define AL_EAXREVERB_DEFAULT_DECAY_HFLIMIT AL_TRUE -/* Delete Auxiliary Slot objects. */ -typedef void (__cdecl *LPALDELETEAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots ); +/* Chorus effect */ +#define AL_CHORUS_WAVEFORM_SINUSOID (0) +#define AL_CHORUS_WAVEFORM_TRIANGLE (1) -/* Verify a handle is a valid Auxiliary Slot. */ -typedef ALboolean (__cdecl *LPALISAUXILIARYEFFECTSLOT)( ALuint slot ); +#define AL_CHORUS_MIN_WAVEFORM (0) +#define AL_CHORUS_MAX_WAVEFORM (1) +#define AL_CHORUS_DEFAULT_WAVEFORM (1) -/* Set an integer parameter for a Auxiliary Slot object. */ -typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum param, ALint value ); -typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTIV)( ALuint asid, ALenum param, ALint* values ); +#define AL_CHORUS_MIN_PHASE (-180) +#define AL_CHORUS_MAX_PHASE (180) +#define AL_CHORUS_DEFAULT_PHASE (90) -/* Set a floating point parameter for an Auxiliary Slot object. */ -typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum param, ALfloat value ); -typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTFV)( ALuint asid, ALenum param, ALfloat* values ); +#define AL_CHORUS_MIN_RATE (0.0f) +#define AL_CHORUS_MAX_RATE (10.0f) +#define AL_CHORUS_DEFAULT_RATE (1.1f) -/* Get an integer parameter for a Auxiliary Slot object. */ -typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum pname, ALint* value ); -typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTIV)( ALuint asid, ALenum pname, ALint* values ); +#define AL_CHORUS_MIN_DEPTH (0.0f) +#define AL_CHORUS_MAX_DEPTH (1.0f) +#define AL_CHORUS_DEFAULT_DEPTH (0.1f) -/* Get a floating point parameter for a Auxiliary Slot object. */ -typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum pname, ALfloat* value ); -typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTFV)( ALuint asid, ALenum pname, ALfloat* values ); +#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) -/********************************************************** - * Filter ranges and defaults. - */ +/* 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) -/** - * Lowpass filter - */ +#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 LOWPASS_MIN_GAIN 0.0f -#define LOWPASS_MAX_GAIN 1.0f -#define LOWPASS_DEFAULT_GAIN 1.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 LOWPASS_MIN_GAINHF 0.0f -#define LOWPASS_MAX_GAINHF 1.0f -#define LOWPASS_DEFAULT_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 -/** - * Highpass filter - */ +#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 HIGHPASS_MIN_GAIN 0.0f -#define HIGHPASS_MAX_GAIN 1.0f -#define HIGHPASS_DEFAULT_GAIN 1.0f +#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 -#define HIGHPASS_MIN_GAINLF 0.0f -#define HIGHPASS_MAX_GAINLF 1.0f -#define HIGHPASS_DEFAULT_GAINLF 1.0f -/** - * Bandpass filter - */ - -#define BANDPASS_MIN_GAIN 0.0f -#define BANDPASS_MAX_GAIN 1.0f -#define BANDPASS_DEFAULT_GAIN 1.0f - -#define BANDPASS_MIN_GAINHF 0.0f -#define BANDPASS_MAX_GAINHF 1.0f -#define BANDPASS_DEFAULT_GAINHF 1.0f - -#define BANDPASS_MIN_GAINLF 0.0f -#define BANDPASS_MAX_GAINLF 1.0f -#define BANDPASS_DEFAULT_GAINLF 1.0f - - - - - /********************************************************** - * Effect parameter structures, value definitions, ranges and defaults. - */ - -/** - * AL reverb effect parameter ranges and defaults - */ -#define AL_REVERB_MIN_DENSITY 0.0f -#define AL_REVERB_MAX_DENSITY 1.0f -#define AL_REVERB_DEFAULT_DENSITY 1.0f - -#define AL_REVERB_MIN_DIFFUSION 0.0f -#define AL_REVERB_MAX_DIFFUSION 1.0f -#define AL_REVERB_DEFAULT_DIFFUSION 1.0f - -#define AL_REVERB_MIN_GAIN 0.0f -#define AL_REVERB_MAX_GAIN 1.0f -#define AL_REVERB_DEFAULT_GAIN 0.32f - -#define AL_REVERB_MIN_GAINHF 0.0f -#define AL_REVERB_MAX_GAINHF 1.0f -#define AL_REVERB_DEFAULT_GAINHF 0.89f - -#define AL_REVERB_MIN_DECAY_TIME 0.1f -#define AL_REVERB_MAX_DECAY_TIME 20.0f -#define AL_REVERB_DEFAULT_DECAY_TIME 1.49f - -#define AL_REVERB_MIN_DECAY_HFRATIO 0.1f -#define AL_REVERB_MAX_DECAY_HFRATIO 2.0f -#define AL_REVERB_DEFAULT_DECAY_HFRATIO 0.83f - -#define AL_REVERB_MIN_REFLECTIONS_GAIN 0.0f -#define AL_REVERB_MAX_REFLECTIONS_GAIN 3.16f -#define AL_REVERB_DEFAULT_REFLECTIONS_GAIN 0.05f - -#define AL_REVERB_MIN_REFLECTIONS_DELAY 0.0f -#define AL_REVERB_MAX_REFLECTIONS_DELAY 0.3f -#define AL_REVERB_DEFAULT_REFLECTIONS_DELAY 0.007f - -#define AL_REVERB_MIN_LATE_REVERB_GAIN 0.0f -#define AL_REVERB_MAX_LATE_REVERB_GAIN 10.0f -#define AL_REVERB_DEFAULT_LATE_REVERB_GAIN 1.26f - -#define AL_REVERB_MIN_LATE_REVERB_DELAY 0.0f -#define AL_REVERB_MAX_LATE_REVERB_DELAY 0.1f -#define AL_REVERB_DEFAULT_LATE_REVERB_DELAY 0.011f - -#define AL_REVERB_MIN_AIR_ABSORPTION_GAINHF 0.892f -#define AL_REVERB_MAX_AIR_ABSORPTION_GAINHF 1.0f -#define AL_REVERB_DEFAULT_AIR_ABSORPTION_GAINHF 0.994f - -#define AL_REVERB_MIN_ROOM_ROLLOFF_FACTOR 0.0f -#define AL_REVERB_MAX_ROOM_ROLLOFF_FACTOR 10.0f -#define AL_REVERB_DEFAULT_ROOM_ROLLOFF_FACTOR 0.0f - -#define AL_REVERB_MIN_DECAY_HFLIMIT AL_FALSE -#define AL_REVERB_MAX_DECAY_HFLIMIT AL_TRUE -#define AL_REVERB_DEFAULT_DECAY_HFLIMIT AL_TRUE - -/** - * AL chorus effect parameter ranges and defaults - */ -#define AL_CHORUS_MIN_WAVEFORM 0 -#define AL_CHORUS_MAX_WAVEFORM 1 -#define AL_CHORUS_DEFAULT_WAVEFORM 1 - -#define AL_CHORUS_WAVEFORM_SINUSOID 0 -#define AL_CHORUS_WAVEFORM_TRIANGLE 1 - -#define AL_CHORUS_MIN_PHASE (-180) -#define AL_CHORUS_MAX_PHASE 180 -#define AL_CHORUS_DEFAULT_PHASE 90 - -#define AL_CHORUS_MIN_RATE 0.0f -#define AL_CHORUS_MAX_RATE 10.0f -#define AL_CHORUS_DEFAULT_RATE 1.1f - -#define AL_CHORUS_MIN_DEPTH 0.0f -#define AL_CHORUS_MAX_DEPTH 1.0f -#define AL_CHORUS_DEFAULT_DEPTH 0.1f - -#define AL_CHORUS_MIN_FEEDBACK (-1.0f) -#define AL_CHORUS_MAX_FEEDBACK 1.0f -#define AL_CHORUS_DEFAULT_FEEDBACK 0.25f - -#define AL_CHORUS_MIN_DELAY 0.0f -#define AL_CHORUS_MAX_DELAY 0.016f -#define AL_CHORUS_DEFAULT_DELAY 0.016f - -/** - * AL distortion effect parameter ranges and defaults - */ -#define AL_DISTORTION_MIN_EDGE 0.0f -#define AL_DISTORTION_MAX_EDGE 1.0f -#define AL_DISTORTION_DEFAULT_EDGE 0.2f - -#define AL_DISTORTION_MIN_GAIN 0.01f -#define AL_DISTORTION_MAX_GAIN 1.0f -#define AL_DISTORTION_DEFAULT_GAIN 0.05f - -#define AL_DISTORTION_MIN_LOWPASS_CUTOFF 80.0f -#define AL_DISTORTION_MAX_LOWPASS_CUTOFF 24000.0f -#define AL_DISTORTION_DEFAULT_LOWPASS_CUTOFF 8000.0f - -#define AL_DISTORTION_MIN_EQCENTER 80.0f -#define AL_DISTORTION_MAX_EQCENTER 24000.0f -#define AL_DISTORTION_DEFAULT_EQCENTER 3600.0f - -#define AL_DISTORTION_MIN_EQBANDWIDTH 80.0f -#define AL_DISTORTION_MAX_EQBANDWIDTH 24000.0f -#define AL_DISTORTION_DEFAULT_EQBANDWIDTH 3600.0f - -/** - * AL echo effect parameter ranges and defaults - */ -#define AL_ECHO_MIN_DELAY 0.0f -#define AL_ECHO_MAX_DELAY 0.207f -#define AL_ECHO_DEFAULT_DELAY 0.1f - -#define AL_ECHO_MIN_LRDELAY 0.0f -#define AL_ECHO_MAX_LRDELAY 0.404f -#define AL_ECHO_DEFAULT_LRDELAY 0.1f - -#define AL_ECHO_MIN_DAMPING 0.0f -#define AL_ECHO_MAX_DAMPING 0.99f -#define AL_ECHO_DEFAULT_DAMPING 0.5f - -#define AL_ECHO_MIN_FEEDBACK 0.0f -#define AL_ECHO_MAX_FEEDBACK 1.0f -#define AL_ECHO_DEFAULT_FEEDBACK 0.5f - -#define AL_ECHO_MIN_SPREAD (-1.0f) -#define AL_ECHO_MAX_SPREAD 1.0f -#define AL_ECHO_DEFAULT_SPREAD (-1.0f) - -/** - * AL flanger effect parameter ranges and defaults - */ -#define AL_FLANGER_MIN_WAVEFORM 0 -#define AL_FLANGER_MAX_WAVEFORM 1 -#define AL_FLANGER_DEFAULT_WAVEFORM 1 - -#define AL_FLANGER_WAVEFORM_SINUSOID 0 -#define AL_FLANGER_WAVEFORM_TRIANGLE 1 - -#define AL_FLANGER_MIN_PHASE (-180) -#define AL_FLANGER_MAX_PHASE 180 -#define AL_FLANGER_DEFAULT_PHASE 0 - -#define AL_FLANGER_MIN_RATE 0.0f -#define AL_FLANGER_MAX_RATE 10.0f -#define AL_FLANGER_DEFAULT_RATE 0.27f - -#define AL_FLANGER_MIN_DEPTH 0.0f -#define AL_FLANGER_MAX_DEPTH 1.0f -#define AL_FLANGER_DEFAULT_DEPTH 1.0f - -#define AL_FLANGER_MIN_FEEDBACK (-1.0f) -#define AL_FLANGER_MAX_FEEDBACK 1.0f -#define AL_FLANGER_DEFAULT_FEEDBACK (-0.5f) - -#define AL_FLANGER_MIN_DELAY 0.0f -#define AL_FLANGER_MAX_DELAY 0.004f -#define AL_FLANGER_DEFAULT_DELAY 0.002f - -/** - * AL frequency shifter effect parameter ranges and defaults - */ -#define AL_FREQUENCY_SHIFTER_MIN_FREQUENCY 0.0f -#define AL_FREQUENCY_SHIFTER_MAX_FREQUENCY 24000.0f -#define AL_FREQUENCY_SHIFTER_DEFAULT_FREQUENCY 0.0f - -#define AL_FREQUENCY_SHIFTER_MIN_LEFT_DIRECTION 0 -#define AL_FREQUENCY_SHIFTER_MAX_LEFT_DIRECTION 2 -#define AL_FREQUENCY_SHIFTER_DEFAULT_LEFT_DIRECTION 0 - -#define AL_FREQUENCY_SHIFTER_MIN_RIGHT_DIRECTION 0 -#define AL_FREQUENCY_SHIFTER_MAX_RIGHT_DIRECTION 2 -#define AL_FREQUENCY_SHIFTER_DEFAULT_RIGHT_DIRECTION 0 - -#define AL_FREQUENCY_SHIFTER_DIRECTION_DOWN 0 -#define AL_FREQUENCY_SHIFTER_DIRECTION_UP 1 -#define AL_FREQUENCY_SHIFTER_DIRECTION_OFF 2 - -/** - * AL vocal morpher effect parameter ranges and defaults - */ -#define AL_VOCAL_MORPHER_MIN_PHONEMEA 0 -#define AL_VOCAL_MORPHER_MAX_PHONEMEA 29 -#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA 0 - -#define AL_VOCAL_MORPHER_MIN_PHONEMEA_COARSE_TUNING (-24) -#define AL_VOCAL_MORPHER_MAX_PHONEMEA_COARSE_TUNING 24 -#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA_COARSE_TUNING 0 - -#define AL_VOCAL_MORPHER_MIN_PHONEMEB 0 -#define AL_VOCAL_MORPHER_MAX_PHONEMEB 29 -#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB 10 - -#define AL_VOCAL_MORPHER_PHONEME_A 0 -#define AL_VOCAL_MORPHER_PHONEME_E 1 -#define AL_VOCAL_MORPHER_PHONEME_I 2 -#define AL_VOCAL_MORPHER_PHONEME_O 3 -#define AL_VOCAL_MORPHER_PHONEME_U 4 -#define AL_VOCAL_MORPHER_PHONEME_AA 5 -#define AL_VOCAL_MORPHER_PHONEME_AE 6 -#define AL_VOCAL_MORPHER_PHONEME_AH 7 -#define AL_VOCAL_MORPHER_PHONEME_AO 8 -#define AL_VOCAL_MORPHER_PHONEME_EH 9 -#define AL_VOCAL_MORPHER_PHONEME_ER 10 -#define AL_VOCAL_MORPHER_PHONEME_IH 11 -#define AL_VOCAL_MORPHER_PHONEME_IY 12 -#define AL_VOCAL_MORPHER_PHONEME_UH 13 -#define AL_VOCAL_MORPHER_PHONEME_UW 14 -#define AL_VOCAL_MORPHER_PHONEME_B 15 -#define AL_VOCAL_MORPHER_PHONEME_D 16 -#define AL_VOCAL_MORPHER_PHONEME_F 17 -#define AL_VOCAL_MORPHER_PHONEME_G 18 -#define AL_VOCAL_MORPHER_PHONEME_J 19 -#define AL_VOCAL_MORPHER_PHONEME_K 20 -#define AL_VOCAL_MORPHER_PHONEME_L 21 -#define AL_VOCAL_MORPHER_PHONEME_M 22 -#define AL_VOCAL_MORPHER_PHONEME_N 23 -#define AL_VOCAL_MORPHER_PHONEME_P 24 -#define AL_VOCAL_MORPHER_PHONEME_R 25 -#define AL_VOCAL_MORPHER_PHONEME_S 26 -#define AL_VOCAL_MORPHER_PHONEME_T 27 -#define AL_VOCAL_MORPHER_PHONEME_V 28 -#define AL_VOCAL_MORPHER_PHONEME_Z 29 - -#define AL_VOCAL_MORPHER_MIN_PHONEMEB_COARSE_TUNING (-24) -#define AL_VOCAL_MORPHER_MAX_PHONEMEB_COARSE_TUNING 24 -#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB_COARSE_TUNING 0 - -#define AL_VOCAL_MORPHER_MIN_WAVEFORM 0 -#define AL_VOCAL_MORPHER_MAX_WAVEFORM 2 -#define AL_VOCAL_MORPHER_DEFAULT_WAVEFORM 0 - -#define AL_VOCAL_MORPHER_WAVEFORM_SINUSOID 0 -#define AL_VOCAL_MORPHER_WAVEFORM_TRIANGLE 1 -#define AL_VOCAL_MORPHER_WAVEFORM_SAWTOOTH 2 - -#define AL_VOCAL_MORPHER_MIN_RATE 0.0f -#define AL_VOCAL_MORPHER_MAX_RATE 10.0f -#define AL_VOCAL_MORPHER_DEFAULT_RATE 1.41f - -/** - * AL pitch shifter effect parameter ranges and defaults - */ -#define AL_PITCH_SHIFTER_MIN_COARSE_TUNE (-12) -#define AL_PITCH_SHIFTER_MAX_COARSE_TUNE 12 -#define AL_PITCH_SHIFTER_DEFAULT_COARSE_TUNE 12 - -#define AL_PITCH_SHIFTER_MIN_FINE_TUNE (-50) -#define AL_PITCH_SHIFTER_MAX_FINE_TUNE 50 -#define AL_PITCH_SHIFTER_DEFAULT_FINE_TUNE 0 - -/** - * AL ring modulator effect parameter ranges and defaults - */ -#define AL_RING_MODULATOR_MIN_FREQUENCY 0.0f -#define AL_RING_MODULATOR_MAX_FREQUENCY 8000.0f -#define AL_RING_MODULATOR_DEFAULT_FREQUENCY 440.0f - -#define AL_RING_MODULATOR_MIN_HIGHPASS_CUTOFF 0.0f -#define AL_RING_MODULATOR_MAX_HIGHPASS_CUTOFF 24000.0f -#define AL_RING_MODULATOR_DEFAULT_HIGHPASS_CUTOFF 800.0f - -#define AL_RING_MODULATOR_MIN_WAVEFORM 0 -#define AL_RING_MODULATOR_MAX_WAVEFORM 2 -#define AL_RING_MODULATOR_DEFAULT_WAVEFORM 0 - -#define AL_RING_MODULATOR_SINUSOID 0 -#define AL_RING_MODULATOR_SAWTOOTH 1 -#define AL_RING_MODULATOR_SQUARE 2 - -/** - * AL autowah effect parameter ranges and defaults - */ -#define AL_AUTOWAH_MIN_ATTACK_TIME 0.0001f -#define AL_AUTOWAH_MAX_ATTACK_TIME 1.0f -#define AL_AUTOWAH_DEFAULT_ATTACK_TIME 0.06f - -#define AL_AUTOWAH_MIN_RELEASE_TIME 0.0001f -#define AL_AUTOWAH_MAX_RELEASE_TIME 1.0f -#define AL_AUTOWAH_DEFAULT_RELEASE_TIME 0.06f - -#define AL_AUTOWAH_MIN_RESONANCE 2.0f -#define AL_AUTOWAH_MAX_RESONANCE 1000.0f -#define AL_AUTOWAH_DEFAULT_RESONANCE 1000.0f - -#define AL_AUTOWAH_MIN_PEAK_GAIN 0.00003f -#define AL_AUTOWAH_MAX_PEAK_GAIN 31621.0f -#define AL_AUTOWAH_DEFAULT_PEAK_GAIN 11.22f - -/** - * AL compressor effect parameter ranges and defaults - */ -#define AL_COMPRESSOR_MIN_ONOFF 0 -#define AL_COMPRESSOR_MAX_ONOFF 1 -#define AL_COMPRESSOR_DEFAULT_ONOFF 1 - -/** - * AL equalizer effect parameter ranges and defaults - */ -#define AL_EQUALIZER_MIN_LOW_GAIN 0.126f -#define AL_EQUALIZER_MAX_LOW_GAIN 7.943f -#define AL_EQUALIZER_DEFAULT_LOW_GAIN 1.0f - -#define AL_EQUALIZER_MIN_LOW_CUTOFF 50.0f -#define AL_EQUALIZER_MAX_LOW_CUTOFF 800.0f -#define AL_EQUALIZER_DEFAULT_LOW_CUTOFF 200.0f - -#define AL_EQUALIZER_MIN_MID1_GAIN 0.126f -#define AL_EQUALIZER_MAX_MID1_GAIN 7.943f -#define AL_EQUALIZER_DEFAULT_MID1_GAIN 1.0f - -#define AL_EQUALIZER_MIN_MID1_CENTER 200.0f -#define AL_EQUALIZER_MAX_MID1_CENTER 3000.0f -#define AL_EQUALIZER_DEFAULT_MID1_CENTER 500.0f - -#define AL_EQUALIZER_MIN_MID1_WIDTH 0.01f -#define AL_EQUALIZER_MAX_MID1_WIDTH 1.0f -#define AL_EQUALIZER_DEFAULT_MID1_WIDTH 1.0f - -#define AL_EQUALIZER_MIN_MID2_GAIN 0.126f -#define AL_EQUALIZER_MAX_MID2_GAIN 7.943f -#define AL_EQUALIZER_DEFAULT_MID2_GAIN 1.0f - -#define AL_EQUALIZER_MIN_MID2_CENTER 1000.0f -#define AL_EQUALIZER_MAX_MID2_CENTER 8000.0f -#define AL_EQUALIZER_DEFAULT_MID2_CENTER 3000.0f - -#define AL_EQUALIZER_MIN_MID2_WIDTH 0.01f -#define AL_EQUALIZER_MAX_MID2_WIDTH 1.0f -#define AL_EQUALIZER_DEFAULT_MID2_WIDTH 1.0f - -#define AL_EQUALIZER_MIN_HIGH_GAIN 0.126f -#define AL_EQUALIZER_MAX_HIGH_GAIN 7.943f -#define AL_EQUALIZER_DEFAULT_HIGH_GAIN 1.0f - -#define AL_EQUALIZER_MIN_HIGH_CUTOFF 4000.0f -#define AL_EQUALIZER_MAX_HIGH_CUTOFF 16000.0f -#define AL_EQUALIZER_DEFAULT_HIGH_CUTOFF 6000.0f - - - - -/********************************************************** - * Source parameter value definitions, ranges and defaults. - */ -#define AL_MIN_AIR_ABSORPTION_FACTOR 0.0f -#define AL_MAX_AIR_ABSORPTION_FACTOR 10.0f -#define AL_DEFAULT_AIR_ABSORPTION_FACTOR 0.0f - -#define AL_MIN_ROOM_ROLLOFF_FACTOR 0.0f -#define AL_MAX_ROOM_ROLLOFF_FACTOR 10.0f -#define AL_DEFAULT_ROOM_ROLLOFF_FACTOR 0.0f - -#define AL_MIN_CONE_OUTER_GAINHF 0.0f -#define AL_MAX_CONE_OUTER_GAINHF 1.0f -#define AL_DEFAULT_CONE_OUTER_GAINHF 1.0f - -#define AL_MIN_DIRECT_FILTER_GAINHF_AUTO AL_FALSE -#define AL_MAX_DIRECT_FILTER_GAINHF_AUTO AL_TRUE -#define AL_DEFAULT_DIRECT_FILTER_GAINHF_AUTO AL_TRUE - -#define AL_MIN_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_FALSE -#define AL_MAX_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE -#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE - -#define AL_MIN_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_FALSE -#define AL_MAX_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE -#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE - - - - -/********************************************************** - * Listener parameter value definitions, ranges and defaults. - */ -#define AL_MIN_METERS_PER_UNIT FLT_MIN -#define AL_MAX_METERS_PER_UNIT FLT_MAX -#define AL_DEFAULT_METERS_PER_UNIT 1.0f +/* 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 /* __efx_h_ */ +#endif /* AL_EFX_H */ diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj b/Source/Core/AudioCommon/AudioCommon.vcxproj index 2e13aedb46..a983005318 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcxproj +++ b/Source/Core/AudioCommon/AudioCommon.vcxproj @@ -109,7 +109,7 @@ - ..\Common\Src;%(AdditionalIncludeDirectories) + ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) true @@ -121,7 +121,7 @@ - ..\Common\Src;%(AdditionalIncludeDirectories) + ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) true @@ -147,7 +147,7 @@ - ..\Common\Src;%(AdditionalIncludeDirectories) + ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) true @@ -175,7 +175,7 @@ - ..\Common\Src;%(AdditionalIncludeDirectories) + ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) true @@ -192,6 +192,7 @@ + @@ -204,6 +205,7 @@ + diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj.filters b/Source/Core/AudioCommon/AudioCommon.vcxproj.filters index 7e098ecb85..af5fe12220 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcxproj.filters +++ b/Source/Core/AudioCommon/AudioCommon.vcxproj.filters @@ -21,6 +21,7 @@ SoundStreams + @@ -44,6 +45,7 @@ SoundStreams + diff --git a/Source/Core/AudioCommon/CMakeLists.txt b/Source/Core/AudioCommon/CMakeLists.txt index 93547681b0..0e610bd847 100644 --- a/Source/Core/AudioCommon/CMakeLists.txt +++ b/Source/Core/AudioCommon/CMakeLists.txt @@ -1,5 +1,6 @@ set(SRCS Src/AudioCommon.cpp Src/AudioCommonConfig.cpp + Src/DPL2Decoder.cpp Src/Mixer.cpp Src/WaveFile.cpp Src/NullSoundStream.cpp) diff --git a/Source/Core/AudioCommon/Src/DPL2Decoder.cpp b/Source/Core/AudioCommon/Src/DPL2Decoder.cpp new file mode 100644 index 0000000000..4efedc4b44 --- /dev/null +++ b/Source/Core/AudioCommon/Src/DPL2Decoder.cpp @@ -0,0 +1,397 @@ +// Copyright (C) 2003 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program 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 General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +// Dolby Pro Logic 2 decoder from ffdshow-tryout +// * Copyright 2001 Anders Johansson ajh@atri.curtin.edu.au +// * Copyright (c) 2004-2006 Milan Cutka +// * based on mplayer HRTF plugin by ylai + +#include +#include +#include "DPL2Decoder.h" + +#define M_PI 3.14159265358979323846 +#define M_SQRT1_2 0.70710678118654752440 + +int olddelay = -1; +unsigned int oldfreq = 0; +unsigned int dlbuflen; +int cyc_pos; +float l_fwr, r_fwr, lpr_fwr, lmr_fwr; +std::vector fwrbuf_l, fwrbuf_r; +float adapt_l_gain, adapt_r_gain, adapt_lpr_gain, adapt_lmr_gain; +std::vector lf, rf, lr, rr, cf, cr; +float LFE_buf[256]; +unsigned int lfe_pos; +float *filter_coefs_lfe; +unsigned int len125; + +template static _ftype_t dotproduct(int count,const T *buf,const _ftype_t *coefficients) +{ + float sum0=0,sum1=0,sum2=0,sum3=0; + for (;count>=4;buf+=4,coefficients+=4,count-=4) + { + sum0+=buf[0]*coefficients[0]; + sum1+=buf[1]*coefficients[1]; + sum2+=buf[2]*coefficients[2]; + sum3+=buf[3]*coefficients[3]; + } + while (count--) sum0+= *buf++ * *coefficients++; + return sum0+sum1+sum2+sum3; +} + +template static T firfilter(const T *buf, int pos, int len, int count, const float *coefficients) +{ + int count1, count2; + + if (pos >= count) + { + pos -= count; + count1 = count; count2 = 0; + } + else + { + count2 = pos; + count1 = count - pos; + pos = len - count1; + } + + // high part of window + const T *ptr = &buf[pos]; + + float r1=dotproduct(count1,ptr,coefficients);coefficients+=count1; + float r2=dotproduct(count2,buf,coefficients); + return T(r1+r2); +} + +template inline const T& limit(const T& val, const T& min, const T& max) +{ + if (val < min) { + return min; + } else if (val > max) { + return max; + } else { + return val; + } +} + +/* +// Hamming +// 2*pi*k +// w(k) = 0.54 - 0.46*cos(------), where 0 <= k < N +// N-1 +// +// n window length +// w buffer for the window parameters +*/ +void hamming(int n, float* w) +{ + int i; + float k = float(2*M_PI/((float)(n-1))); // 2*pi/(N-1) + + // Calculate window coefficients + for (i=0; i Fs/2 +flags window and filter type as defined in filter.h +variables are ored together: i.e. LP|HAMMING will give a +low pass filter designed using a hamming window +opt beta constant used only when designing using kaiser windows + +returns 0 if OK, -1 if fail +*/ +float* design_fir(unsigned int *n, float* fc, float opt) +{ + unsigned int o = *n & 1; // Indicator for odd filter length + unsigned int end = ((*n + 1) >> 1) - o; // Loop end + unsigned int i; // Loop index + + float k1 = 2 * float(M_PI); // 2*pi*fc1 + float k2 = 0.5f * (float)(1 - o);// Constant used if the filter has even length + float g = 0.0f; // Gain + float t1; // Temporary variables + float fc1; // Cutoff frequencies + + // Sanity check + if(*n==0) return NULL; + fc[0]=limit(fc[0],float(0.001),float(1)); + + float *w=(float*)calloc(sizeof(float),*n); + + // Get window coefficients + hamming(*n,w); + + fc1=*fc; + // Cutoff frequency must be < 0.5 where 0.5 <=> Fs/2 + fc1 = ((fc1 <= 1.0) && (fc1 > 0.0)) ? fc1/2 : 0.25f; + k1 *= fc1; + + // Low pass filter + + // If the filter length is odd, there is one point which is exactly + // in the middle. The value at this point is 2*fCutoff*sin(x)/x, + // where x is zero. To make sure nothing strange happens, we set this + // value separately. + if (o) + { + w[end] = fc1 * w[end] * 2.0f; + g=w[end]; + } + + // Create filter + for (i=0 ; i M9_03DB * lpr_fwr ? lmr_fwr : M9_03DB * lpr_fwr; + float lpr_gain = (lpr_fwr + lmr_lim_fwr) / (1 + lpr_fwr + lpr_fwr); + float lmr_gain = (lpr_fwr + lmr_lim_fwr) / (1 + lmr_lim_fwr + lmr_lim_fwr); + float lmr_unlim_gain = (lpr_fwr + lmr_fwr) / (1 + lmr_fwr + lmr_fwr); + float lpr, lmr; + float l_agc, r_agc, lpr_agc, lmr_agc; + float f, d_gain, c_gain, c_agc_cfk; + + /*** AXIS NO. 1: (Lt, Rt) -> (C, Ls, Rs) ***/ + /* AGC adaption */ + d_gain = (fabs(l_gain - *adapt_l_gain) + fabs(r_gain - *adapt_r_gain)) * 0.5f; + f = d_gain * (1.0f / MATAGCTRIG); + f = MATAGCDECAY - MATAGCDECAY / (1 + f * f); + *adapt_l_gain = (1 - f) * *adapt_l_gain + f * l_gain; + *adapt_r_gain = (1 - f) * *adapt_r_gain + f * r_gain; + /* Matrix */ + l_agc = in[il] * passive_lock(*adapt_l_gain); + r_agc = in[ir] * passive_lock(*adapt_r_gain); + cf[k] = (l_agc + r_agc) * (float)M_SQRT1_2; + if (decode_rear) + { + lr[kr] = rr[kr] = (l_agc - r_agc) * (float)M_SQRT1_2; + /* Stereo rear channel is steered with the same AGC steering as + the decoding matrix. Note this requires a fast updating AGC + at the order of 20 ms (which is the case here). */ + lr[kr] *= (l_fwr + l_fwr) / (1 + l_fwr + r_fwr); + rr[kr] *= (r_fwr + r_fwr) / (1 + l_fwr + r_fwr); + } + + /*** AXIS NO. 2: (Lt + Rt, Lt - Rt) -> (L, R) ***/ + lpr = (in[il] + in[ir]) * (float)M_SQRT1_2; + lmr = (in[il] - in[ir]) * (float)M_SQRT1_2; + /* AGC adaption */ + d_gain = fabs(lmr_unlim_gain - *adapt_lmr_gain); + f = d_gain * (1.0f / MATAGCTRIG); + f = MATAGCDECAY - MATAGCDECAY / (1 + f * f); + *adapt_lpr_gain = (1 - f) * *adapt_lpr_gain + f * lpr_gain; + *adapt_lmr_gain = (1 - f) * *adapt_lmr_gain + f * lmr_gain; + /* Matrix */ + lpr_agc = lpr * passive_lock(*adapt_lpr_gain); + lmr_agc = lmr * passive_lock(*adapt_lmr_gain); + lf[k] = (lpr_agc + lmr_agc) * (float)M_SQRT1_2; + rf[k] = (lpr_agc - lmr_agc) * (float)M_SQRT1_2; + + /*** CENTER FRONT CANCELLATION ***/ + /* A heuristic approach exploits that Lt + Rt gain contains the + information about Lt, Rt correlation. This effectively reshapes + the front and rear "cones" to concentrate Lt + Rt to C and + introduce Lt - Rt in L, R. */ + /* 0.67677 is the empirical lower bound for lpr_gain. */ + c_gain = 8 * (*adapt_lpr_gain - 0.67677f); + c_gain = c_gain > 0 ? c_gain : 0; + /* c_gain should not be too high, not even reaching full + cancellation (~ 0.50 - 0.55 at current AGC implementation), or + the center will sound too narrow. */ + c_gain = MATCOMPGAIN / (1 + c_gain * c_gain); + c_agc_cfk = c_gain * cf[k]; + lf[k] -= c_agc_cfk; + rf[k] -= c_agc_cfk; + cf[k] += c_agc_cfk + c_agc_cfk; +} + +void dpl2decode(float *samples, int numsamples, float *out) +{ + static const unsigned int FWRDURATION = 240; /* FWR average duration (samples) */ + static const unsigned int cfg_delay = 0; + static const unsigned int fmt_freq = 48000; + static const unsigned int fmt_nchannels = 2; // input channels + + int cur = 0; + + if (olddelay != cfg_delay || oldfreq != fmt_freq) + { + done(); + olddelay = cfg_delay; + oldfreq = fmt_freq; + dlbuflen = std::max(FWRDURATION, (fmt_freq * cfg_delay / 1000)); //+(len7000-1); + cyc_pos = dlbuflen - 1; + fwrbuf_l.resize(dlbuflen); + fwrbuf_r.resize(dlbuflen); + lf.resize(dlbuflen); + rf.resize(dlbuflen); + lr.resize(dlbuflen); + rr.resize(dlbuflen); + cf.resize(dlbuflen); + cr.resize(dlbuflen); + filter_coefs_lfe = calc_coefficients_125Hz_lowpass(fmt_freq); + lfe_pos = 0; + memset(LFE_buf, 0, sizeof(LFE_buf)); + } + + float *in = samples; // Input audio data + float *end = in + numsamples * fmt_nchannels; // Loop end + + while (in < end) + { + const int k = cyc_pos; + + const int fwr_pos = (k + FWRDURATION) % dlbuflen; + /* Update the full wave rectified total amplitude */ + /* Input matrix decoder */ + l_fwr += fabs(in[0]) - fabs(fwrbuf_l[fwr_pos]); + r_fwr += fabs(in[1]) - fabs(fwrbuf_r[fwr_pos]); + lpr_fwr += fabs(in[0] + in[1]) - fabs(fwrbuf_l[fwr_pos] + fwrbuf_r[fwr_pos]); + lmr_fwr += fabs(in[0] - in[1]) - fabs(fwrbuf_l[fwr_pos] - fwrbuf_r[fwr_pos]); + + /* Matrix encoded 2 channel sources */ + fwrbuf_l[k] = in[0]; + fwrbuf_r[k] = in[1]; + matrix_decode(in, k, 0, 1, true, dlbuflen, + l_fwr, r_fwr, + lpr_fwr, lmr_fwr, + &adapt_l_gain, &adapt_r_gain, + &adapt_lpr_gain, &adapt_lmr_gain, + &lf[0], &rf[0], &lr[0], &rr[0], &cf[0]); + + out[cur + 0] = lf[k]; + out[cur + 1] = rf[k]; + out[cur + 2] = cf[k]; + LFE_buf[lfe_pos] = (out[0] + out[1]) / 2; + out[cur + 3] = firfilter(LFE_buf, lfe_pos, len125, len125, filter_coefs_lfe); + lfe_pos++; + if (lfe_pos == len125) + { + lfe_pos = 0; + } + out[cur + 4] = lr[k]; + out[cur + 5] = rr[k]; + // Next sample... + in += 2; + cur += 6; + cyc_pos--; + if (cyc_pos < 0) + { + cyc_pos += dlbuflen; + } + } +} + +void dpl2reset() +{ + olddelay = -1; + oldfreq = 0; + filter_coefs_lfe = NULL; +} diff --git a/Source/Core/AudioCommon/Src/DPL2Decoder.h b/Source/Core/AudioCommon/Src/DPL2Decoder.h new file mode 100644 index 0000000000..eee8fbf15e --- /dev/null +++ b/Source/Core/AudioCommon/Src/DPL2Decoder.h @@ -0,0 +1,24 @@ +// Copyright (C) 2003 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program 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 General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _DPL2DECODER_H_ +#define _DPL2DECODER_H_ + +void dpl2decode(float *samples, int numsamples, float *out); +void dpl2reset(); + +#endif // _DPL2DECODER_H_ diff --git a/Source/Core/AudioCommon/Src/OpenALStream.cpp b/Source/Core/AudioCommon/Src/OpenALStream.cpp index b0c856dcad..8fb1f1b2c5 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.cpp +++ b/Source/Core/AudioCommon/Src/OpenALStream.cpp @@ -15,10 +15,9 @@ // Official SVN repository and contact information can be found at // http://code.google.com/p/dolphin-emu/ -#include - #include "aldlist.h" #include "OpenALStream.h" +#include "DPL2Decoder.h" #if defined HAVE_OPENAL && HAVE_OPENAL @@ -37,8 +36,10 @@ bool OpenALStream::Start() pDeviceList = new ALDeviceList(); if ((pDeviceList) && (pDeviceList->GetNumDevices())) { - char *defDevName = pDeviceList-> \ - GetDeviceName(pDeviceList->GetDefaultDevice()); + char *defDevName = pDeviceList->GetDeviceName(pDeviceList->GetDefaultDevice()); + + WARN_LOG(AUDIO, "Found OpenAL device %s", defDevName); + pDevice = alcOpenDevice(defDevName); if (pDevice) { @@ -52,8 +53,7 @@ bool OpenALStream::Start() else { alcCloseDevice(pDevice); - PanicAlertT("OpenAL: can't create context " - "for device %s", defDevName); + PanicAlertT("OpenAL: can't create context for device %s", defDevName); } } else @@ -67,6 +67,9 @@ bool OpenALStream::Start() PanicAlertT("OpenAL: can't find sound devices"); } + // Initialise DPL2 parameters + dpl2reset(); + soundTouch.clear(); return bReturn; } @@ -76,6 +79,7 @@ void OpenALStream::Stop() threadData = 1; // kick the thread if it's waiting soundSyncEvent.Set(); + mainSyncEvent.Set(); soundTouch.clear(); @@ -141,10 +145,15 @@ void OpenALStream::SoundLoop() alGenSources(1, &uiSource); // Short Silence - memset(sampleBuffer, 0, OAL_MAX_SAMPLES * 4 * OAL_NUM_BUFFERS); + memset(sampleBuffer, 0, OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_NUM_BUFFERS); memset(realtimeBuffer, 0, OAL_MAX_SAMPLES * 4); for (int i = 0; i < OAL_NUM_BUFFERS; i++) - alBufferData(uiBuffers[i], AL_FORMAT_STEREO16, realtimeBuffer, OAL_MAX_SAMPLES * 4, ulFrequency); + { + if (Core::g_CoreStartupParameter.bDPL2Decoder) + alBufferData(uiBuffers[i], AL_FORMAT_51CHN32, sampleBuffer, OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_NUM_BUFFERS, ulFrequency); + else + alBufferData(uiBuffers[i], AL_FORMAT_STEREO16, realtimeBuffer, OAL_MAX_SAMPLES * 4, ulFrequency); + } alSourceQueueBuffers(uiSource, OAL_NUM_BUFFERS, uiBuffers); alSourcePlay(uiSource); @@ -166,6 +175,8 @@ void OpenALStream::SoundLoop() soundTouch.setSetting(SETTING_SEEKWINDOW_MS, 28); soundTouch.setSetting(SETTING_OVERLAP_MS, 12); + bool surround_capable = Core::g_CoreStartupParameter.bDPL2Decoder; + while (!threadData) { // num_samples_to_render in this update - depends on SystemTimers::AUDIO_DMA_PERIOD. @@ -201,18 +212,72 @@ void OpenALStream::SoundLoop() soundTouch.setSetting(SETTING_SEQUENCE_MS, (int)(1 / (rate * rate))); soundTouch.setTempo(rate); } - unsigned int nSamples = soundTouch.receiveSamples(sampleBuffer, OAL_MAX_SAMPLES * 2 * OAL_NUM_BUFFERS); + unsigned int nSamples = soundTouch.receiveSamples(sampleBuffer, OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_NUM_BUFFERS); if (nSamples > 0) { // Remove the Buffer from the Queue. (uiBuffer contains the Buffer ID for the unqueued Buffer) if (iBuffersFilled == 0) + { alSourceUnqueueBuffers(uiSource, iBuffersProcessed, uiBufferTemp); - alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_STEREO16, sampleBuffer, nSamples * 4, ulFrequency); + ALenum err = alGetError(); + if (err != 0) + { + ERROR_LOG(AUDIO, "Error unqueuing buffers: %08x", err); + } + } +#if defined(__APPLE__) + // OSX does not have the alext AL_FORMAT_51CHN32 yet. + surround_capable = false; +#else + if (surround_capable) + { + // Convert the samples from short to float for the dpl2 decoder + float dest[OAL_MAX_SAMPLES * 2 * OAL_NUM_BUFFERS]; + for (u32 i = 0; i < nSamples; ++i) + { + dest[i * 2 + 0] = (float)sampleBuffer[i * 2 + 0] / (1<<16); + dest[i * 2 + 1] = (float)sampleBuffer[i * 2 + 1] / (1<<16); + } + + float dpl2[OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_NUM_BUFFERS]; + dpl2decode(dest, nSamples, dpl2); + + alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_51CHN32, dpl2, nSamples * SIZE_FLOAT * SURROUND_CHANNELS, ulFrequency); + ALenum err = alGetError(); + if (err == AL_INVALID_ENUM) + { + // 5.1 is not supported by the host, fallback to stereo + WARN_LOG(AUDIO, "Unable set 5.1 surround mode. Updating OpenAL Soft might fix this issue."); + surround_capable = false; + } + else if (err != 0) + { + ERROR_LOG(AUDIO, "Error occurred while buffering data: %08x", err); + } + } +#endif + if (!surround_capable) + { + alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_STEREO16, sampleBuffer, nSamples * 2 * 2, ulFrequency); + } + alSourceQueueBuffers(uiSource, 1, &uiBufferTemp[iBuffersFilled]); + ALenum err = alGetError(); + if (err != 0) + { + ERROR_LOG(AUDIO, "Error queuing buffers: %08x", err); + } iBuffersFilled++; if (iBuffersFilled == OAL_NUM_BUFFERS) + { alSourcePlay(uiSource); + ALenum err = alGetError(); + if (err != 0) + { + ERROR_LOG(AUDIO, "Error occurred during playback: %08x", err); + } + } } } else diff --git a/Source/Core/AudioCommon/Src/OpenALStream.h b/Source/Core/AudioCommon/Src/OpenALStream.h index c775d31cf2..b342e0a49e 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.h +++ b/Source/Core/AudioCommon/Src/OpenALStream.h @@ -26,12 +26,14 @@ #ifdef _WIN32 #include #include +#include #elif defined __APPLE__ #include #include #else #include #include +#include #endif #include "Core.h" @@ -44,6 +46,8 @@ #define SFX_MAX_SOURCE 1 #define OAL_NUM_BUFFERS 16 #define OAL_MAX_SAMPLES 512 +#define SURROUND_CHANNELS 6 // number of channels in surround mode +#define SIZE_FLOAT 4 // size of a float in bytes #endif class OpenALStream: public SoundStream @@ -72,7 +76,7 @@ private: Common::Event mainSyncEvent; short realtimeBuffer[OAL_MAX_SAMPLES * 2]; - soundtouch::SAMPLETYPE sampleBuffer[OAL_MAX_SAMPLES * 2 * OAL_NUM_BUFFERS]; + soundtouch::SAMPLETYPE sampleBuffer[OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_NUM_BUFFERS]; ALuint uiBuffers[OAL_NUM_BUFFERS]; ALuint uiSource; ALfloat fVolume; diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp index 180e6c981d..d4b79774ef 100644 --- a/Source/Core/Core/Src/ConfigManager.cpp +++ b/Source/Core/Core/Src/ConfigManager.cpp @@ -227,6 +227,7 @@ void SConfig::SaveSettings() ini.Set("Core", "Apploader", m_LocalCoreStartupParameter.m_strApploader); ini.Set("Core", "EnableCheats", m_LocalCoreStartupParameter.bEnableCheats); ini.Set("Core", "SelectedLanguage", m_LocalCoreStartupParameter.SelectedLanguage); + ini.Set("Core", "DPL2Decoder", m_LocalCoreStartupParameter.bDPL2Decoder); ini.Set("Core", "MemcardA", m_strMemoryCardA); ini.Set("Core", "MemcardB", m_strMemoryCardB); ini.Set("Core", "SlotA", m_EXIDevice[0]); @@ -367,6 +368,7 @@ void SConfig::LoadSettings() ini.Get("Core", "Apploader", &m_LocalCoreStartupParameter.m_strApploader); ini.Get("Core", "EnableCheats", &m_LocalCoreStartupParameter.bEnableCheats, false); ini.Get("Core", "SelectedLanguage", &m_LocalCoreStartupParameter.SelectedLanguage, 0); + ini.Get("Core", "DPL2Decoder", &m_LocalCoreStartupParameter.bDPL2Decoder, true); ini.Get("Core", "MemcardA", &m_strMemoryCardA); ini.Get("Core", "MemcardB", &m_strMemoryCardB); ini.Get("Core", "SlotA", (int*)&m_EXIDevice[0], EXIDEVICE_MEMORYCARD); diff --git a/Source/Core/Core/Src/CoreParameter.cpp b/Source/Core/Core/Src/CoreParameter.cpp index dee2452cb3..64a3fc54d8 100644 --- a/Source/Core/Core/Src/CoreParameter.cpp +++ b/Source/Core/Core/Src/CoreParameter.cpp @@ -49,6 +49,7 @@ SCoreStartupParameter::SCoreStartupParameter() bEnableCheats(false), bMergeBlocks(false), bRunCompareServer(false), bRunCompareClient(false), + bDPL2Decoder(true), bMMU(false), bMMUBAT(false), iTLBHack(0), bVBeam(false), bFastDiscSpeed(false), SelectedLanguage(0), bWii(false), bDisableWiimoteSpeaker(false), @@ -84,6 +85,7 @@ void SCoreStartupParameter::LoadDefaults() bMergeBlocks = false; SelectedLanguage = 0; bWii = false; + bDPL2Decoder = true; iPosX = 100; iPosY = 100; diff --git a/Source/Core/Core/Src/CoreParameter.h b/Source/Core/Core/Src/CoreParameter.h index e67935906b..b67bf24b20 100644 --- a/Source/Core/Core/Src/CoreParameter.h +++ b/Source/Core/Core/Src/CoreParameter.h @@ -107,6 +107,8 @@ struct SCoreStartupParameter bool bEnableCheats; bool bMergeBlocks; + bool bDPL2Decoder; + bool bRunCompareServer; bool bRunCompareClient; diff --git a/Source/Core/DolphinWX/Src/ConfigMain.cpp b/Source/Core/DolphinWX/Src/ConfigMain.cpp index ce4cd9cb22..9f38c5db69 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.cpp +++ b/Source/Core/DolphinWX/Src/ConfigMain.cpp @@ -120,6 +120,7 @@ EVT_RADIOBOX(ID_DSPENGINE, CConfigMain::AudioSettingsChanged) EVT_CHECKBOX(ID_DSPTHREAD, CConfigMain::AudioSettingsChanged) EVT_CHECKBOX(ID_ENABLE_THROTTLE, CConfigMain::AudioSettingsChanged) EVT_CHECKBOX(ID_DUMP_AUDIO, CConfigMain::AudioSettingsChanged) +EVT_CHECKBOX(ID_DPL2DECODER, CConfigMain::AudioSettingsChanged) EVT_CHOICE(ID_FREQUENCY, CConfigMain::AudioSettingsChanged) EVT_CHOICE(ID_BACKEND, CConfigMain::AudioSettingsChanged) EVT_SLIDER(ID_VOLUME, CConfigMain::AudioSettingsChanged) @@ -363,6 +364,7 @@ void CConfigMain::InitializeGUIValues() VolumeText->SetLabel(wxString::Format(wxT("%d %%"), ac_Config.m_Volume)); DSPThread->SetValue(startup_params.bDSPThread); DumpAudio->SetValue(ac_Config.m_DumpAudio ? true : false); + DPL2Decoder->SetValue(startup_params.bDPL2Decoder); FrequencySelection->SetSelection( FrequencySelection->FindString(wxString::Format(_("%d Hz"), ac_Config.iFrequency))); // add backends to the list @@ -517,6 +519,14 @@ void CConfigMain::InitializeGUITooltips() // Wii - Devices WiiKeyboard->SetToolTip(_("This could cause slow down in Wii Menu and some games.")); + +#if defined(__APPLE__) + DPL2Decoder->SetToolTip(_("Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on OSX.")); +#elif defined(__linux__) + DPL2Decoder->SetToolTip(_("Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only.")); +#elif defined(_WIN32) + DPL2Decoder->SetToolTip(_("Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only. May need to rename soft_oal.dll to OpenAL32.dll to make it work.")); +#endif } void CConfigMain::CreateGUIControls() @@ -613,6 +623,7 @@ void CConfigMain::CreateGUIControls() DSPThread = new wxCheckBox(AudioPage, ID_DSPTHREAD, _("DSP LLE on Thread")); DumpAudio = new wxCheckBox(AudioPage, ID_DUMP_AUDIO, _("Dump Audio"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + DPL2Decoder = new wxCheckBox(AudioPage, ID_DPL2DECODER, _("Dolby Pro Logic II decoder")); VolumeSlider = new wxSlider(AudioPage, ID_VOLUME, 0, 1, 100, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL|wxSL_INVERSE); VolumeText = new wxStaticText(AudioPage, wxID_ANY, wxT(""), @@ -634,6 +645,7 @@ void CConfigMain::CreateGUIControls() sbAudioSettings->Add(DSPEngine, 0, wxALL | wxEXPAND, 5); sbAudioSettings->Add(DSPThread, 0, wxALL, 5); sbAudioSettings->Add(DumpAudio, 0, wxALL, 5); + sbAudioSettings->Add(DPL2Decoder, 0, wxALL, 5); wxStaticBoxSizer *sbVolume = new wxStaticBoxSizer(wxVERTICAL, AudioPage, _("Volume")); sbVolume->Add(VolumeSlider, 1, wxLEFT|wxRIGHT, 13); @@ -927,6 +939,10 @@ void CConfigMain::AudioSettingsChanged(wxCommandEvent& event) SConfig::GetInstance().m_LocalCoreStartupParameter.bDSPThread = DSPThread->IsChecked(); break; + case ID_DPL2DECODER: + SConfig::GetInstance().m_LocalCoreStartupParameter.bDPL2Decoder = DPL2Decoder->IsChecked(); + break; + case ID_BACKEND: VolumeSlider->Enable(SupportsVolumeChanges(std::string(BackendSelection->GetStringSelection().mb_str()))); ac_Config.sBackend = BackendSelection->GetStringSelection().mb_str(); diff --git a/Source/Core/DolphinWX/Src/ConfigMain.h b/Source/Core/DolphinWX/Src/ConfigMain.h index 9b5dbf4243..01a85fabeb 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.h +++ b/Source/Core/DolphinWX/Src/ConfigMain.h @@ -79,6 +79,7 @@ private: ID_ENABLE_HLE_AUDIO, ID_ENABLE_THROTTLE, ID_DUMP_AUDIO, + ID_DPL2DECODER, ID_FREQUENCY, ID_BACKEND, ID_VOLUME, @@ -157,6 +158,7 @@ private: wxSlider* VolumeSlider; wxStaticText* VolumeText; wxCheckBox* DumpAudio; + wxCheckBox* DPL2Decoder; wxArrayString wxArrayBackends; wxChoice* BackendSelection; wxChoice* FrequencySelection; From ed5a68a5040416fe744119069960d1e29b3518eb Mon Sep 17 00:00:00 2001 From: skidau Date: Fri, 11 Jan 2013 14:20:22 +1100 Subject: [PATCH 13/17] Build fix --- Source/Core/AudioCommon/Src/DPL2Decoder.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Source/Core/AudioCommon/Src/DPL2Decoder.cpp b/Source/Core/AudioCommon/Src/DPL2Decoder.cpp index 4efedc4b44..a5d2720878 100644 --- a/Source/Core/AudioCommon/Src/DPL2Decoder.cpp +++ b/Source/Core/AudioCommon/Src/DPL2Decoder.cpp @@ -22,6 +22,9 @@ #include #include +#include +#include +#include #include "DPL2Decoder.h" #define M_PI 3.14159265358979323846 @@ -315,7 +318,7 @@ void matrix_decode(const float *in, const int k, const int il, void dpl2decode(float *samples, int numsamples, float *out) { static const unsigned int FWRDURATION = 240; /* FWR average duration (samples) */ - static const unsigned int cfg_delay = 0; + static const int cfg_delay = 0; static const unsigned int fmt_freq = 48000; static const unsigned int fmt_nchannels = 2; // input channels From 3632ce6df5d3c948f5e4c603c48f2d3c4e190eca Mon Sep 17 00:00:00 2001 From: skidau Date: Fri, 11 Jan 2013 19:42:03 +1100 Subject: [PATCH 14/17] Removed the synchronisation between the CPU thread and the audio thread. Added code to detect and resume from buffer underruns. Disabled the ability to change the DPL2 option after the game has started. Fixed a memory leak that occurred in the DPL2 decoder. Fixed the OSX build. --- Source/Core/AudioCommon/Src/OpenALStream.cpp | 26 ++++++++++++++------ Source/Core/DolphinWX/Src/ConfigMain.cpp | 1 + 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Source/Core/AudioCommon/Src/OpenALStream.cpp b/Source/Core/AudioCommon/Src/OpenALStream.cpp index 8fb1f1b2c5..1895cd2199 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.cpp +++ b/Source/Core/AudioCommon/Src/OpenALStream.cpp @@ -79,7 +79,6 @@ void OpenALStream::Stop() threadData = 1; // kick the thread if it's waiting soundSyncEvent.Set(); - mainSyncEvent.Set(); soundTouch.clear(); @@ -112,7 +111,6 @@ void OpenALStream::SetVolume(int volume) void OpenALStream::Update() { soundSyncEvent.Set(); - mainSyncEvent.Wait(); } void OpenALStream::Clear(bool mute) @@ -149,10 +147,12 @@ void OpenALStream::SoundLoop() memset(realtimeBuffer, 0, OAL_MAX_SAMPLES * 4); for (int i = 0; i < OAL_NUM_BUFFERS; i++) { +#if !defined(__APPLE__) if (Core::g_CoreStartupParameter.bDPL2Decoder) - alBufferData(uiBuffers[i], AL_FORMAT_51CHN32, sampleBuffer, OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_NUM_BUFFERS, ulFrequency); + alBufferData(uiBuffers[i], AL_FORMAT_51CHN32, sampleBuffer, 4 * SIZE_FLOAT * SURROUND_CHANNELS, ulFrequency); else - alBufferData(uiBuffers[i], AL_FORMAT_STEREO16, realtimeBuffer, OAL_MAX_SAMPLES * 4, ulFrequency); +#endif + alBufferData(uiBuffers[i], AL_FORMAT_STEREO16, realtimeBuffer, 4 * 2 * 2, ulFrequency); } alSourceQueueBuffers(uiSource, OAL_NUM_BUFFERS, uiBuffers); alSourcePlay(uiSource); @@ -165,6 +165,7 @@ void OpenALStream::SoundLoop() ALint iBuffersFilled = 0; ALint iBuffersProcessed = 0; + ALint iState = 0; ALuint uiBufferTemp[OAL_NUM_BUFFERS] = {0}; soundTouch.setChannels(2); @@ -232,7 +233,7 @@ void OpenALStream::SoundLoop() if (surround_capable) { // Convert the samples from short to float for the dpl2 decoder - float dest[OAL_MAX_SAMPLES * 2 * OAL_NUM_BUFFERS]; + float dest[OAL_MAX_SAMPLES * 2 * 2 * OAL_NUM_BUFFERS]; for (u32 i = 0; i < nSamples; ++i) { dest[i * 2 + 0] = (float)sampleBuffer[i * 2 + 0] / (1<<16); @@ -247,7 +248,7 @@ void OpenALStream::SoundLoop() if (err == AL_INVALID_ENUM) { // 5.1 is not supported by the host, fallback to stereo - WARN_LOG(AUDIO, "Unable set 5.1 surround mode. Updating OpenAL Soft might fix this issue."); + WARN_LOG(AUDIO, "Unable to set 5.1 surround mode. Updating OpenAL Soft might fix this issue."); surround_capable = false; } else if (err != 0) @@ -278,13 +279,24 @@ void OpenALStream::SoundLoop() ERROR_LOG(AUDIO, "Error occurred during playback: %08x", err); } } + + alGetSourcei(uiSource, AL_SOURCE_STATE, &iState); + if (iState != AL_PLAYING) + { + // Buffer underrun occurred, resume playback + alSourcePlay(uiSource); + ALenum err = alGetError(); + if (err != 0) + { + ERROR_LOG(AUDIO, "Error occurred resuming playback: %08x", err); + } + } } } else { soundSyncEvent.Wait(); } - mainSyncEvent.Set(); } } diff --git a/Source/Core/DolphinWX/Src/ConfigMain.cpp b/Source/Core/DolphinWX/Src/ConfigMain.cpp index 9f38c5db69..78fc886c10 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.cpp +++ b/Source/Core/DolphinWX/Src/ConfigMain.cpp @@ -638,6 +638,7 @@ void CConfigMain::CreateGUIControls() { FrequencySelection->Disable(); BackendSelection->Disable(); + DPL2Decoder->Disable(); } // Create sizer and add items to dialog From 73140c7da75eae814c470c82a49c1a57d207032e Mon Sep 17 00:00:00 2001 From: skidau Date: Fri, 11 Jan 2013 23:06:20 +1100 Subject: [PATCH 15/17] Skipped timestretching if the emulator is running below 10% speed to prevent buffer overflows. --- Source/Core/AudioCommon/Src/OpenALStream.cpp | 5 ++++- Source/Core/AudioCommon/Src/OpenALStream.h | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/Core/AudioCommon/Src/OpenALStream.cpp b/Source/Core/AudioCommon/Src/OpenALStream.cpp index 1895cd2199..eefc62e346 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.cpp +++ b/Source/Core/AudioCommon/Src/OpenALStream.cpp @@ -207,7 +207,10 @@ void OpenALStream::SoundLoop() Core::RequestRefreshInfo(); rate = m_mixer->GetCurrentSpeed(); } - if (rate > 0) + + // Place a lower limit of 10% speed. When a game boots up, there will be + // many silence samples. These do not need to be timestretched. + if (rate > 0.10) { // Adjust SETTING_SEQUENCE_MS to balance between lag vs hollow audio soundTouch.setSetting(SETTING_SEQUENCE_MS, (int)(1 / (rate * rate))); diff --git a/Source/Core/AudioCommon/Src/OpenALStream.h b/Source/Core/AudioCommon/Src/OpenALStream.h index b342e0a49e..f325d6b63a 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.h +++ b/Source/Core/AudioCommon/Src/OpenALStream.h @@ -73,7 +73,6 @@ public: private: std::thread thread; Common::Event soundSyncEvent; - Common::Event mainSyncEvent; short realtimeBuffer[OAL_MAX_SAMPLES * 2]; soundtouch::SAMPLETYPE sampleBuffer[OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_NUM_BUFFERS]; From 1c462a1ecaa514912338735537284456f7cd835b Mon Sep 17 00:00:00 2001 From: skidau Date: Sun, 13 Jan 2013 00:05:30 +1100 Subject: [PATCH 16/17] Added a latency setting to the audio settings. Removed the Sample Rate setting. It is now hardcoded to 48000hz (accurate audio timing). Fixes issue 5672. --- .../AudioCommon/Src/AudioCommonConfig.cpp | 2 - .../Core/AudioCommon/Src/AudioCommonConfig.h | 1 - Source/Core/AudioCommon/Src/OpenALStream.cpp | 28 ++++++++------ Source/Core/AudioCommon/Src/OpenALStream.h | 10 +++-- Source/Core/Core/Src/ConfigManager.cpp | 2 + Source/Core/Core/Src/CoreParameter.cpp | 3 +- Source/Core/Core/Src/CoreParameter.h | 1 + Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp | 2 +- Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp | 2 +- Source/Core/DolphinWX/Src/ConfigMain.cpp | 38 +++++++++++-------- Source/Core/DolphinWX/Src/ConfigMain.h | 7 ++-- 11 files changed, 57 insertions(+), 39 deletions(-) diff --git a/Source/Core/AudioCommon/Src/AudioCommonConfig.cpp b/Source/Core/AudioCommon/Src/AudioCommonConfig.cpp index 08902e1c3f..49f50b6880 100644 --- a/Source/Core/AudioCommon/Src/AudioCommonConfig.cpp +++ b/Source/Core/AudioCommon/Src/AudioCommonConfig.cpp @@ -42,7 +42,6 @@ void AudioCommonConfig::Load() #else file.Get("Config", "Backend", &sBackend, BACKEND_NULLSOUND); #endif - file.Get("Config", "Frequency", &iFrequency, 48000); file.Get("Config", "Volume", &m_Volume, 100); } @@ -55,7 +54,6 @@ void AudioCommonConfig::SaveSettings() file.Set("Config", "EnableJIT", m_EnableJIT); file.Set("Config", "DumpAudio", m_DumpAudio); file.Set("Config", "Backend", sBackend); - file.Set("Config", "Frequency", iFrequency); file.Set("Config", "Volume", m_Volume); file.Save(File::GetUserPath(F_DSPCONFIG_IDX)); diff --git a/Source/Core/AudioCommon/Src/AudioCommonConfig.h b/Source/Core/AudioCommon/Src/AudioCommonConfig.h index 76c50c6408..48807b3ffd 100644 --- a/Source/Core/AudioCommon/Src/AudioCommonConfig.h +++ b/Source/Core/AudioCommon/Src/AudioCommonConfig.h @@ -37,7 +37,6 @@ struct AudioCommonConfig bool m_DumpAudio; int m_Volume; std::string sBackend; - int iFrequency; // Load from given file void Load(); diff --git a/Source/Core/AudioCommon/Src/OpenALStream.cpp b/Source/Core/AudioCommon/Src/OpenALStream.cpp index eefc62e346..94112c130d 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.cpp +++ b/Source/Core/AudioCommon/Src/OpenALStream.cpp @@ -46,6 +46,11 @@ bool OpenALStream::Start() pContext = alcCreateContext(pDevice, NULL); if (pContext) { + // Used to determine an appropriate period size (2x period = total buffer size) + //ALCint refresh; + //alcGetIntegerv(pDevice, ALC_REFRESH, 1, &refresh); + //period_size_in_millisec = 1000 / refresh; + alcMakeContextCurrent(pContext); thread = std::thread(std::mem_fun(&OpenALStream::SoundLoop), this); bReturn = true; @@ -90,7 +95,7 @@ void OpenALStream::Stop() // Clean up buffers and sources alDeleteSources(1, &uiSource); uiSource = 0; - alDeleteBuffers(OAL_NUM_BUFFERS, uiBuffers); + alDeleteBuffers(numBuffers, uiBuffers); ALCcontext *pContext = alcGetCurrentContext(); ALCdevice *pDevice = alcGetContextsDevice(pContext); @@ -133,19 +138,20 @@ void OpenALStream::SoundLoop() Common::SetCurrentThreadName("Audio thread - openal"); u32 ulFrequency = m_mixer->GetSampleRate(); + numBuffers = Core::g_CoreStartupParameter.iLatency + 2; // OpenAL requires a minimum of two buffers - memset(uiBuffers, 0, OAL_NUM_BUFFERS * sizeof(ALuint)); + memset(uiBuffers, 0, numBuffers * sizeof(ALuint)); uiSource = 0; // Generate some AL Buffers for streaming - alGenBuffers(OAL_NUM_BUFFERS, (ALuint *)uiBuffers); + alGenBuffers(numBuffers, (ALuint *)uiBuffers); // Generate a Source to playback the Buffers alGenSources(1, &uiSource); // Short Silence - memset(sampleBuffer, 0, OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_NUM_BUFFERS); + memset(sampleBuffer, 0, OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * numBuffers); memset(realtimeBuffer, 0, OAL_MAX_SAMPLES * 4); - for (int i = 0; i < OAL_NUM_BUFFERS; i++) + for (int i = 0; i < numBuffers; i++) { #if !defined(__APPLE__) if (Core::g_CoreStartupParameter.bDPL2Decoder) @@ -154,7 +160,7 @@ void OpenALStream::SoundLoop() #endif alBufferData(uiBuffers[i], AL_FORMAT_STEREO16, realtimeBuffer, 4 * 2 * 2, ulFrequency); } - alSourceQueueBuffers(uiSource, OAL_NUM_BUFFERS, uiBuffers); + alSourceQueueBuffers(uiSource, numBuffers, uiBuffers); alSourcePlay(uiSource); // Set the default sound volume as saved in the config file. @@ -166,7 +172,7 @@ void OpenALStream::SoundLoop() ALint iBuffersFilled = 0; ALint iBuffersProcessed = 0; ALint iState = 0; - ALuint uiBufferTemp[OAL_NUM_BUFFERS] = {0}; + ALuint uiBufferTemp[OAL_MAX_BUFFERS] = {0}; soundTouch.setChannels(2); soundTouch.setSampleRate(ulFrequency); @@ -216,7 +222,7 @@ void OpenALStream::SoundLoop() soundTouch.setSetting(SETTING_SEQUENCE_MS, (int)(1 / (rate * rate))); soundTouch.setTempo(rate); } - unsigned int nSamples = soundTouch.receiveSamples(sampleBuffer, OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_NUM_BUFFERS); + unsigned int nSamples = soundTouch.receiveSamples(sampleBuffer, OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_MAX_BUFFERS); if (nSamples > 0) { // Remove the Buffer from the Queue. (uiBuffer contains the Buffer ID for the unqueued Buffer) @@ -236,14 +242,14 @@ void OpenALStream::SoundLoop() if (surround_capable) { // Convert the samples from short to float for the dpl2 decoder - float dest[OAL_MAX_SAMPLES * 2 * 2 * OAL_NUM_BUFFERS]; + float dest[OAL_MAX_SAMPLES * 2 * 2 * OAL_MAX_BUFFERS]; for (u32 i = 0; i < nSamples; ++i) { dest[i * 2 + 0] = (float)sampleBuffer[i * 2 + 0] / (1<<16); dest[i * 2 + 1] = (float)sampleBuffer[i * 2 + 1] / (1<<16); } - float dpl2[OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_NUM_BUFFERS]; + float dpl2[OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_MAX_BUFFERS]; dpl2decode(dest, nSamples, dpl2); alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_51CHN32, dpl2, nSamples * SIZE_FLOAT * SURROUND_CHANNELS, ulFrequency); @@ -273,7 +279,7 @@ void OpenALStream::SoundLoop() } iBuffersFilled++; - if (iBuffersFilled == OAL_NUM_BUFFERS) + if (iBuffersFilled == numBuffers) { alSourcePlay(uiSource); ALenum err = alGetError(); diff --git a/Source/Core/AudioCommon/Src/OpenALStream.h b/Source/Core/AudioCommon/Src/OpenALStream.h index f325d6b63a..a808fcefc9 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.h +++ b/Source/Core/AudioCommon/Src/OpenALStream.h @@ -44,8 +44,8 @@ // 16 bit Stereo #define SFX_MAX_SOURCE 1 -#define OAL_NUM_BUFFERS 16 -#define OAL_MAX_SAMPLES 512 +#define OAL_MAX_BUFFERS 32 +#define OAL_MAX_SAMPLES 256 #define SURROUND_CHANNELS 6 // number of channels in surround mode #define SIZE_FLOAT 4 // size of a float in bytes #endif @@ -75,10 +75,12 @@ private: Common::Event soundSyncEvent; short realtimeBuffer[OAL_MAX_SAMPLES * 2]; - soundtouch::SAMPLETYPE sampleBuffer[OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_NUM_BUFFERS]; - ALuint uiBuffers[OAL_NUM_BUFFERS]; + soundtouch::SAMPLETYPE sampleBuffer[OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_MAX_BUFFERS]; + ALuint uiBuffers[OAL_MAX_BUFFERS]; ALuint uiSource; ALfloat fVolume; + + u8 numBuffers; #else public: OpenALStream(CMixer *mixer, void *hWnd = NULL): SoundStream(mixer) {} diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp index d4b79774ef..210769c8a5 100644 --- a/Source/Core/Core/Src/ConfigManager.cpp +++ b/Source/Core/Core/Src/ConfigManager.cpp @@ -228,6 +228,7 @@ void SConfig::SaveSettings() ini.Set("Core", "EnableCheats", m_LocalCoreStartupParameter.bEnableCheats); ini.Set("Core", "SelectedLanguage", m_LocalCoreStartupParameter.SelectedLanguage); ini.Set("Core", "DPL2Decoder", m_LocalCoreStartupParameter.bDPL2Decoder); + ini.Set("Core", "Latency", m_LocalCoreStartupParameter.iLatency); ini.Set("Core", "MemcardA", m_strMemoryCardA); ini.Set("Core", "MemcardB", m_strMemoryCardB); ini.Set("Core", "SlotA", m_EXIDevice[0]); @@ -369,6 +370,7 @@ void SConfig::LoadSettings() ini.Get("Core", "EnableCheats", &m_LocalCoreStartupParameter.bEnableCheats, false); ini.Get("Core", "SelectedLanguage", &m_LocalCoreStartupParameter.SelectedLanguage, 0); ini.Get("Core", "DPL2Decoder", &m_LocalCoreStartupParameter.bDPL2Decoder, true); + ini.Get("Core", "Latency", &m_LocalCoreStartupParameter.iLatency, 14); ini.Get("Core", "MemcardA", &m_strMemoryCardA); ini.Get("Core", "MemcardB", &m_strMemoryCardB); ini.Get("Core", "SlotA", (int*)&m_EXIDevice[0], EXIDEVICE_MEMORYCARD); diff --git a/Source/Core/Core/Src/CoreParameter.cpp b/Source/Core/Core/Src/CoreParameter.cpp index 64a3fc54d8..b8294ce815 100644 --- a/Source/Core/Core/Src/CoreParameter.cpp +++ b/Source/Core/Core/Src/CoreParameter.cpp @@ -49,7 +49,7 @@ SCoreStartupParameter::SCoreStartupParameter() bEnableCheats(false), bMergeBlocks(false), bRunCompareServer(false), bRunCompareClient(false), - bDPL2Decoder(true), + bDPL2Decoder(true), iLatency(14), bMMU(false), bMMUBAT(false), iTLBHack(0), bVBeam(false), bFastDiscSpeed(false), SelectedLanguage(0), bWii(false), bDisableWiimoteSpeaker(false), @@ -86,6 +86,7 @@ void SCoreStartupParameter::LoadDefaults() SelectedLanguage = 0; bWii = false; bDPL2Decoder = true; + iLatency = 14; iPosX = 100; iPosY = 100; diff --git a/Source/Core/Core/Src/CoreParameter.h b/Source/Core/Core/Src/CoreParameter.h index b67bf24b20..0dd8b68f22 100644 --- a/Source/Core/Core/Src/CoreParameter.h +++ b/Source/Core/Core/Src/CoreParameter.h @@ -108,6 +108,7 @@ struct SCoreStartupParameter bool bMergeBlocks; bool bDPL2Decoder; + int iLatency; bool bRunCompareServer; bool bRunCompareClient; diff --git a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp index 817610ea0f..7981c677a8 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.cpp @@ -251,7 +251,7 @@ void DSPHLE::InitMixer() unsigned int AISampleRate, DACSampleRate; AudioInterface::Callback_GetSampleRate(AISampleRate, DACSampleRate); delete soundStream; - soundStream = AudioCommon::InitSoundStream(new HLEMixer(this, AISampleRate, DACSampleRate, ac_Config.iFrequency), m_hWnd); + soundStream = AudioCommon::InitSoundStream(new HLEMixer(this, AISampleRate, DACSampleRate, 48000), m_hWnd); if(!soundStream) PanicAlert("Error starting up sound stream"); // Mixer is initialized m_InitMixer = true; diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp index a44ff65f21..b5ca788e72 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.cpp @@ -204,7 +204,7 @@ void DSPLLE::InitMixer() unsigned int AISampleRate, DACSampleRate; AudioInterface::Callback_GetSampleRate(AISampleRate, DACSampleRate); delete soundStream; - soundStream = AudioCommon::InitSoundStream(new CMixer(AISampleRate, DACSampleRate, ac_Config.iFrequency), m_hWnd); + soundStream = AudioCommon::InitSoundStream(new CMixer(AISampleRate, DACSampleRate, 48000), m_hWnd); if(!soundStream) PanicAlert("Error starting up sound stream"); // Mixer is initialized m_InitMixer = true; diff --git a/Source/Core/DolphinWX/Src/ConfigMain.cpp b/Source/Core/DolphinWX/Src/ConfigMain.cpp index 78fc886c10..ddc8025d88 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.cpp +++ b/Source/Core/DolphinWX/Src/ConfigMain.cpp @@ -121,7 +121,7 @@ EVT_CHECKBOX(ID_DSPTHREAD, CConfigMain::AudioSettingsChanged) EVT_CHECKBOX(ID_ENABLE_THROTTLE, CConfigMain::AudioSettingsChanged) EVT_CHECKBOX(ID_DUMP_AUDIO, CConfigMain::AudioSettingsChanged) EVT_CHECKBOX(ID_DPL2DECODER, CConfigMain::AudioSettingsChanged) -EVT_CHOICE(ID_FREQUENCY, CConfigMain::AudioSettingsChanged) +EVT_SLIDER(ID_LATENCY, CConfigMain::AudioSettingsChanged) EVT_CHOICE(ID_BACKEND, CConfigMain::AudioSettingsChanged) EVT_SLIDER(ID_VOLUME, CConfigMain::AudioSettingsChanged) @@ -218,6 +218,8 @@ void CConfigMain::UpdateGUI() // Disable stuff on AudioPage DSPEngine->Disable(); DSPThread->Disable(); + DPL2Decoder->Disable(); + LatencySlider->Disable(); // Disable stuff on GamecubePage GCSystemLang->Disable(); @@ -365,8 +367,9 @@ void CConfigMain::InitializeGUIValues() DSPThread->SetValue(startup_params.bDSPThread); DumpAudio->SetValue(ac_Config.m_DumpAudio ? true : false); DPL2Decoder->SetValue(startup_params.bDPL2Decoder); - FrequencySelection->SetSelection( - FrequencySelection->FindString(wxString::Format(_("%d Hz"), ac_Config.iFrequency))); + LatencySlider->Enable(std::string(ac_Config.sBackend) == BACKEND_OPENAL); + LatencySlider->SetValue(startup_params.iLatency); + LatencyText->SetLabel(wxString::Format(wxT("%d"), startup_params.iLatency)); // add backends to the list AddAudioBackends(); @@ -511,7 +514,6 @@ void CConfigMain::InitializeGUITooltips() // Audio tooltips DSPThread->SetToolTip(_("Run DSP LLE on a dedicated thread (not recommended).")); - FrequencySelection->SetToolTip(_("Changing this will have no effect while the emulator is running!")); BackendSelection->SetToolTip(_("Changing this will have no effect while the emulator is running!")); // Gamecube - Devices @@ -527,6 +529,8 @@ void CConfigMain::InitializeGUITooltips() #elif defined(_WIN32) DPL2Decoder->SetToolTip(_("Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only. May need to rename soft_oal.dll to OpenAL32.dll to make it work.")); #endif + + LatencySlider->SetToolTip(_("Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL backend only.")); } void CConfigMain::CreateGUIControls() @@ -630,13 +634,14 @@ void CConfigMain::CreateGUIControls() wxDefaultPosition, wxDefaultSize, 0); BackendSelection = new wxChoice(AudioPage, ID_BACKEND, wxDefaultPosition, wxDefaultSize, wxArrayBackends, 0, wxDefaultValidator, wxEmptyString); - FrequencySelection = new wxChoice(AudioPage, ID_FREQUENCY); - FrequencySelection->Append(wxString::Format(_("%d Hz"), 48000)); - FrequencySelection->Append(wxString::Format(_("%d Hz"), 32000)); + LatencySlider = new wxSlider(AudioPage, ID_LATENCY, 0, 0, 30, + wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL); + LatencyText = new wxStaticText(AudioPage, wxID_ANY, wxT(""), + wxDefaultPosition, wxDefaultSize, 0); if (Core::GetState() != Core::CORE_UNINITIALIZED) { - FrequencySelection->Disable(); + LatencySlider->Disable(); BackendSelection->Disable(); DPL2Decoder->Disable(); } @@ -655,8 +660,9 @@ void CConfigMain::CreateGUIControls() wxGridBagSizer *sBackend = new wxGridBagSizer(); sBackend->Add(TEXT_BOX(AudioPage, _("Audio Backend:")), wxGBPosition(0, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL|wxALL, 5); sBackend->Add(BackendSelection, wxGBPosition(0, 1), wxDefaultSpan, wxALL, 5); - sBackend->Add(TEXT_BOX(AudioPage, _("Sample Rate:")), wxGBPosition(1, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL|wxALL, 5); - sBackend->Add(FrequencySelection, wxGBPosition(1, 1), wxDefaultSpan, wxALL, 5); + sBackend->Add(TEXT_BOX(AudioPage, _("Latency:")), wxGBPosition(1, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL|wxALL, 5); + sBackend->Add(LatencySlider, wxGBPosition(1, 1), wxDefaultSpan, wxALL, 5); + sBackend->Add(LatencyText, wxGBPosition(1, 2), wxDefaultSpan, wxALL, 5); wxStaticBoxSizer *sbBackend = new wxStaticBoxSizer(wxHORIZONTAL, AudioPage, _("Backend Settings")); sbBackend->Add(sBackend, 0, wxEXPAND); @@ -946,17 +952,19 @@ void CConfigMain::AudioSettingsChanged(wxCommandEvent& event) case ID_BACKEND: VolumeSlider->Enable(SupportsVolumeChanges(std::string(BackendSelection->GetStringSelection().mb_str()))); + LatencySlider->Enable(std::string(BackendSelection->GetStringSelection().mb_str()) == BACKEND_OPENAL); + DPL2Decoder->Enable(std::string(BackendSelection->GetStringSelection().mb_str()) == BACKEND_OPENAL); ac_Config.sBackend = BackendSelection->GetStringSelection().mb_str(); ac_Config.Update(); break; + case ID_LATENCY: + SConfig::GetInstance().m_LocalCoreStartupParameter.iLatency = LatencySlider->GetValue(); + LatencyText->SetLabel(wxString::Format(wxT("%d"), LatencySlider->GetValue())); + break; + default: ac_Config.m_DumpAudio = DumpAudio->GetValue(); - - long int frequency; - FrequencySelection->GetStringSelection().ToLong(&frequency); - ac_Config.iFrequency = frequency; - ac_Config.Update(); break; } } diff --git a/Source/Core/DolphinWX/Src/ConfigMain.h b/Source/Core/DolphinWX/Src/ConfigMain.h index 01a85fabeb..c0cdd632e4 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.h +++ b/Source/Core/DolphinWX/Src/ConfigMain.h @@ -80,7 +80,7 @@ private: ID_ENABLE_THROTTLE, ID_DUMP_AUDIO, ID_DPL2DECODER, - ID_FREQUENCY, + ID_LATENCY, ID_BACKEND, ID_VOLUME, @@ -156,12 +156,13 @@ private: wxBoxSizer* sAudioPage; // GC settings wxRadioBox* DSPEngine; wxSlider* VolumeSlider; - wxStaticText* VolumeText; + wxStaticText* VolumeText; wxCheckBox* DumpAudio; wxCheckBox* DPL2Decoder; wxArrayString wxArrayBackends; wxChoice* BackendSelection; - wxChoice* FrequencySelection; + wxSlider* LatencySlider; + wxStaticText* LatencyText; // Interface wxCheckBox* ConfirmStop; From 6d4a566bc49ba29f52d58ec1bdbc020c67537bef Mon Sep 17 00:00:00 2001 From: skidau Date: Tue, 15 Jan 2013 22:29:26 +1100 Subject: [PATCH 17/17] Changed SoundTouch to use float samples, allowing SSE to be used. Made the DPL2 decoder disabled by default. Re-added the audio hack used by the Accurate VBeam emulation option. --- Externals/soundtouch/STTypes.h | 4 +-- Source/Core/AudioCommon/Src/OpenALStream.cpp | 35 ++++++++++++++------ Source/Core/Core/Src/ConfigManager.cpp | 2 +- Source/Core/Core/Src/CoreParameter.cpp | 4 +-- Source/Core/Core/Src/HW/SystemTimers.cpp | 3 +- Source/Core/DolphinWX/Src/ConfigMain.cpp | 1 + 6 files changed, 32 insertions(+), 17 deletions(-) diff --git a/Externals/soundtouch/STTypes.h b/Externals/soundtouch/STTypes.h index 28f0ee9110..9855939119 100644 --- a/Externals/soundtouch/STTypes.h +++ b/Externals/soundtouch/STTypes.h @@ -103,8 +103,8 @@ namespace soundtouch /// However, if you still prefer to select the sample format here /// also in GNU environment, then please #undef the INTEGER_SAMPLE /// and FLOAT_SAMPLE defines first as in comments above. - #define SOUNDTOUCH_INTEGER_SAMPLES 1 //< 16bit integer samples - //#define SOUNDTOUCH_FLOAT_SAMPLES 1 //< 32bit float samples + //#define SOUNDTOUCH_INTEGER_SAMPLES 1 //< 16bit integer samples + #define SOUNDTOUCH_FLOAT_SAMPLES 1 //< 32bit float samples #endif diff --git a/Source/Core/AudioCommon/Src/OpenALStream.cpp b/Source/Core/AudioCommon/Src/OpenALStream.cpp index 94112c130d..489954e351 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.cpp +++ b/Source/Core/AudioCommon/Src/OpenALStream.cpp @@ -176,6 +176,7 @@ void OpenALStream::SoundLoop() soundTouch.setChannels(2); soundTouch.setSampleRate(ulFrequency); + soundTouch.setTempo(1.0); soundTouch.setSetting(SETTING_USE_QUICKSEEK, 0); soundTouch.setSetting(SETTING_USE_AA_FILTER, 0); soundTouch.setSetting(SETTING_SEQUENCE_MS, 1); @@ -197,7 +198,16 @@ void OpenALStream::SoundLoop() numSamples = (numSamples > OAL_MAX_SAMPLES) ? OAL_MAX_SAMPLES : numSamples; numSamples = m_mixer->Mix(realtimeBuffer, numSamples); - soundTouch.putSamples(realtimeBuffer, numSamples); + + // Convert the samples from short to float + float dest[OAL_MAX_SAMPLES * 2 * 2 * OAL_MAX_BUFFERS]; + for (u32 i = 0; i < numSamples; ++i) + { + dest[i * 2 + 0] = (float)realtimeBuffer[i * 2 + 0] / (1 << 16); + dest[i * 2 + 1] = (float)realtimeBuffer[i * 2 + 1] / (1 << 16); + } + + soundTouch.putSamples(dest, numSamples); if (iBuffersProcessed == iBuffersFilled) { @@ -241,16 +251,8 @@ void OpenALStream::SoundLoop() #else if (surround_capable) { - // Convert the samples from short to float for the dpl2 decoder - float dest[OAL_MAX_SAMPLES * 2 * 2 * OAL_MAX_BUFFERS]; - for (u32 i = 0; i < nSamples; ++i) - { - dest[i * 2 + 0] = (float)sampleBuffer[i * 2 + 0] / (1<<16); - dest[i * 2 + 1] = (float)sampleBuffer[i * 2 + 1] / (1<<16); - } - float dpl2[OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_MAX_BUFFERS]; - dpl2decode(dest, nSamples, dpl2); + dpl2decode(sampleBuffer, nSamples, dpl2); alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_51CHN32, dpl2, nSamples * SIZE_FLOAT * SURROUND_CHANNELS, ulFrequency); ALenum err = alGetError(); @@ -268,7 +270,18 @@ void OpenALStream::SoundLoop() #endif if (!surround_capable) { - alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_STEREO16, sampleBuffer, nSamples * 2 * 2, ulFrequency); +#if defined(__APPLE__) + // Convert the samples from float to short + short stereo[OAL_MAX_SAMPLES * 2 * 2 * OAL_MAX_BUFFERS]; + for (u32 i = 0; i < nSamples; ++i) + { + stereo[i * 2 + 0] = (short)((float)sampleBuffer[i * 2 + 0] * (1 << 16)); + stereo[i * 2 + 1] = (short)((float)sampleBuffer[i * 2 + 1] * (1 << 16)); + } + alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_STEREO16, stereo, nSamples * 2 * 2, ulFrequency); +#else + alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_STEREO_FLOAT32, sampleBuffer, nSamples * 4 * 2, ulFrequency); +#endif } alSourceQueueBuffers(uiSource, 1, &uiBufferTemp[iBuffersFilled]); diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp index 210769c8a5..3bec0a8df3 100644 --- a/Source/Core/Core/Src/ConfigManager.cpp +++ b/Source/Core/Core/Src/ConfigManager.cpp @@ -369,7 +369,7 @@ void SConfig::LoadSettings() ini.Get("Core", "Apploader", &m_LocalCoreStartupParameter.m_strApploader); ini.Get("Core", "EnableCheats", &m_LocalCoreStartupParameter.bEnableCheats, false); ini.Get("Core", "SelectedLanguage", &m_LocalCoreStartupParameter.SelectedLanguage, 0); - ini.Get("Core", "DPL2Decoder", &m_LocalCoreStartupParameter.bDPL2Decoder, true); + ini.Get("Core", "DPL2Decoder", &m_LocalCoreStartupParameter.bDPL2Decoder, false); ini.Get("Core", "Latency", &m_LocalCoreStartupParameter.iLatency, 14); ini.Get("Core", "MemcardA", &m_strMemoryCardA); ini.Get("Core", "MemcardB", &m_strMemoryCardB); diff --git a/Source/Core/Core/Src/CoreParameter.cpp b/Source/Core/Core/Src/CoreParameter.cpp index b8294ce815..d44bd136f7 100644 --- a/Source/Core/Core/Src/CoreParameter.cpp +++ b/Source/Core/Core/Src/CoreParameter.cpp @@ -49,7 +49,7 @@ SCoreStartupParameter::SCoreStartupParameter() bEnableCheats(false), bMergeBlocks(false), bRunCompareServer(false), bRunCompareClient(false), - bDPL2Decoder(true), iLatency(14), + bDPL2Decoder(false), iLatency(14), bMMU(false), bMMUBAT(false), iTLBHack(0), bVBeam(false), bFastDiscSpeed(false), SelectedLanguage(0), bWii(false), bDisableWiimoteSpeaker(false), @@ -85,7 +85,7 @@ void SCoreStartupParameter::LoadDefaults() bMergeBlocks = false; SelectedLanguage = 0; bWii = false; - bDPL2Decoder = true; + bDPL2Decoder = false; iLatency = 14; iPosX = 100; diff --git a/Source/Core/Core/Src/HW/SystemTimers.cpp b/Source/Core/Core/Src/HW/SystemTimers.cpp index b520c51b39..b9f9fe0107 100644 --- a/Source/Core/Core/Src/HW/SystemTimers.cpp +++ b/Source/Core/Core/Src/HW/SystemTimers.cpp @@ -160,7 +160,8 @@ void DSPCallback(u64 userdata, int cyclesLate) void AudioDMACallback(u64 userdata, int cyclesLate) { - int period = CPU_CORE_CLOCK / (AudioInterface::GetAIDSampleRate() * 4 / 32); + int fields = SConfig::GetInstance().m_LocalCoreStartupParameter.bVBeam?2:1; + int period = CPU_CORE_CLOCK / (AudioInterface::GetAIDSampleRate() * 4 / 32 * fields); DSP::UpdateAudioDMA(); // Push audio to speakers. CoreTiming::ScheduleEvent(period - cyclesLate, et_AudioDMA); } diff --git a/Source/Core/DolphinWX/Src/ConfigMain.cpp b/Source/Core/DolphinWX/Src/ConfigMain.cpp index ddc8025d88..687176ce0d 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.cpp +++ b/Source/Core/DolphinWX/Src/ConfigMain.cpp @@ -366,6 +366,7 @@ void CConfigMain::InitializeGUIValues() VolumeText->SetLabel(wxString::Format(wxT("%d %%"), ac_Config.m_Volume)); DSPThread->SetValue(startup_params.bDSPThread); DumpAudio->SetValue(ac_Config.m_DumpAudio ? true : false); + DPL2Decoder->Enable(std::string(ac_Config.sBackend) == BACKEND_OPENAL); DPL2Decoder->SetValue(startup_params.bDPL2Decoder); LatencySlider->Enable(std::string(ac_Config.sBackend) == BACKEND_OPENAL); LatencySlider->SetValue(startup_params.iLatency);

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 gg3Q<^ucz`NbX0qr~MwvPBXyMui|* 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 J!2eSO{tJOSHnIQ! literal 0 HcmV?d00001 diff --git a/Externals/OpenAL/include/EFX-Util.h b/Externals/OpenAL/include/EFX-Util.h new file mode 100644 index 0000000000..b4a6b4e2d8 --- /dev/null +++ b/Externals/OpenAL/include/EFX-Util.h @@ -0,0 +1,422 @@ +/*******************************************************************\ +* * +* EFX-UTIL.H - EFX Utilities functions and Reverb Presets * +* * +* File revision 1.0 * +* * +\*******************************************************************/ + +#ifndef EAXVECTOR_DEFINED +#define EAXVECTOR_DEFINED +typedef struct _EAXVECTOR { + float x; + float y; + float z; +} EAXVECTOR; +#endif + +#ifndef EAXREVERBPROPERTIES_DEFINED +#define EAXREVERBPROPERTIES_DEFINED +typedef struct _EAXREVERBPROPERTIES +{ + unsigned long ulEnvironment; + float flEnvironmentSize; + float flEnvironmentDiffusion; + long lRoom; + long lRoomHF; + long lRoomLF; + float flDecayTime; + float flDecayHFRatio; + float flDecayLFRatio; + long lReflections; + float flReflectionsDelay; + EAXVECTOR vReflectionsPan; + long lReverb; + float flReverbDelay; + EAXVECTOR vReverbPan; + float flEchoTime; + float flEchoDepth; + float flModulationTime; + float flModulationDepth; + float flAirAbsorptionHF; + float flHFReference; + float flLFReference; + float flRoomRolloffFactor; + unsigned long ulFlags; +} EAXREVERBPROPERTIES, *LPEAXREVERBPROPERTIES; +#endif + +#ifndef EFXEAXREVERBPROPERTIES_DEFINED +#define EFXEAXREVERBPROPERTIES_DEFINED +typedef struct +{ + float flDensity; + float flDiffusion; + float flGain; + float flGainHF; + float flGainLF; + float flDecayTime; + float flDecayHFRatio; + float flDecayLFRatio; + float flReflectionsGain; + float flReflectionsDelay; + float flReflectionsPan[3]; + float flLateReverbGain; + float flLateReverbDelay; + float flLateReverbPan[3]; + float flEchoTime; + float flEchoDepth; + float flModulationTime; + float flModulationDepth; + float flAirAbsorptionGainHF; + float flHFReference; + float flLFReference; + float flRoomRolloffFactor; + int iDecayHFLimit; +} EFXEAXREVERBPROPERTIES, *LPEFXEAXREVERBPROPERTIES; +#endif + +#ifndef EAXOBSTRUCTIONPROPERTIES_DEFINED +#define EAXOBSTRUCTIONPROPERTIES_DEFINED +typedef struct _EAXOBSTRUCTIONPROPERTIES +{ + long lObstruction; + float flObstructionLFRatio; +} EAXOBSTRUCTIONPROPERTIES, *LPEAXOBSTRUCTIONPROPERTIES; +#endif + +#ifndef EAXOCCLUSIONPROPERTIES_DEFINED +#define EAXOCCLUSIONPROPERTIES_DEFINED +typedef struct _EAXOCCLUSIONPROPERTIES +{ + long lOcclusion; + float flOcclusionLFRatio; + float flOcclusionRoomRatio; + float flOcclusionDirectRatio; +} EAXOCCLUSIONPROPERTIES, *LPEAXOCCLUSIONPROPERTIES; +#endif + +#ifndef EAXEXCLUSIONPROPERTIES_DEFINED +#define EAXEXCLUSIONPROPERTIES_DEFINED +typedef struct _EAXEXCLUSIONPROPERTIES +{ + long lExclusion; + float flExclusionLFRatio; +} EAXEXCLUSIONPROPERTIES, *LPEAXEXCLUSIONPROPERTIES; +#endif + +#ifndef EFXLOWPASSFILTER_DEFINED +#define EFXLOWPASSFILTER_DEFINED +typedef struct _EFXLOWPASSFILTER +{ + float flGain; + float flGainHF; +} EFXLOWPASSFILTER, *LPEFXLOWPASSFILTER; +#endif + +void ConvertReverbParameters(EAXREVERBPROPERTIES *pEAXProp, EFXEAXREVERBPROPERTIES *pEFXEAXReverb); +void ConvertObstructionParameters(EAXOBSTRUCTIONPROPERTIES *pObProp, EFXLOWPASSFILTER *pDirectLowPassFilter); +void ConvertExclusionParameters(EAXEXCLUSIONPROPERTIES *pExProp, EFXLOWPASSFILTER *pSendLowPassFilter); +void ConvertOcclusionParameters(EAXOCCLUSIONPROPERTIES *pOcProp, EFXLOWPASSFILTER *pDirectLowPassFilter, EFXLOWPASSFILTER *pSendLowPassFilter); + + +/***********************************************************************************************\ +* +* EAX Reverb Presets in legacy format - use ConvertReverbParameters() to convert to +* EFX EAX Reverb Presets for use with the OpenAL Effects Extension. +* +************************************************************************************************/ + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_GENERIC \ + {0, 7.5f, 1.000f, -1000, -100, 0, 1.49f, 0.83f, 1.00f, -2602, 0.007f, 0.00f,0.00f,0.00f, 200, 0.011f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_PADDEDCELL \ + {1, 1.4f, 1.000f, -1000, -6000, 0, 0.17f, 0.10f, 1.00f, -1204, 0.001f, 0.00f,0.00f,0.00f, 207, 0.002f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_ROOM \ + {2, 1.9f, 1.000f, -1000, -454, 0, 0.40f, 0.83f, 1.00f, -1646, 0.002f, 0.00f,0.00f,0.00f, 53, 0.003f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_BATHROOM \ + {3, 1.4f, 1.000f, -1000, -1200, 0, 1.49f, 0.54f, 1.00f, -370, 0.007f, 0.00f,0.00f,0.00f, 1030, 0.011f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_LIVINGROOM \ + {4, 2.5f, 1.000f, -1000, -6000, 0, 0.50f, 0.10f, 1.00f, -1376, 0.003f, 0.00f,0.00f,0.00f, -1104, 0.004f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_STONEROOM \ + {5, 11.6f, 1.000f, -1000, -300, 0, 2.31f, 0.64f, 1.00f, -711, 0.012f, 0.00f,0.00f,0.00f, 83, 0.017f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_AUDITORIUM \ + {6, 21.6f, 1.000f, -1000, -476, 0, 4.32f, 0.59f, 1.00f, -789, 0.020f, 0.00f,0.00f,0.00f, -289, 0.030f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_CONCERTHALL \ + {7, 19.6f, 1.000f, -1000, -500, 0, 3.92f, 0.70f, 1.00f, -1230, 0.020f, 0.00f,0.00f,0.00f, -02, 0.029f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_CAVE \ + {8, 14.6f, 1.000f, -1000, 0, 0, 2.91f, 1.30f, 1.00f, -602, 0.015f, 0.00f,0.00f,0.00f, -302, 0.022f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f } +#define REVERB_PRESET_ARENA \ + {9, 36.2f, 1.000f, -1000, -698, 0, 7.24f, 0.33f, 1.00f, -1166, 0.020f, 0.00f,0.00f,0.00f, 16, 0.030f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_HANGAR \ + {10, 50.3f, 1.000f, -1000, -1000, 0, 10.05f, 0.23f, 1.00f, -602, 0.020f, 0.00f,0.00f,0.00f, 198, 0.030f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_CARPETTEDHALLWAY \ + {11, 1.9f, 1.000f, -1000, -4000, 0, 0.30f, 0.10f, 1.00f, -1831, 0.002f, 0.00f,0.00f,0.00f, -1630, 0.030f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_HALLWAY \ + {12, 1.8f, 1.000f, -1000, -300, 0, 1.49f, 0.59f, 1.00f, -1219, 0.007f, 0.00f,0.00f,0.00f, 441, 0.011f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_STONECORRIDOR \ + {13, 13.5f, 1.000f, -1000, -237, 0, 2.70f, 0.79f, 1.00f, -1214, 0.013f, 0.00f,0.00f,0.00f, 395, 0.020f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_ALLEY \ + {14, 7.5f, 0.300f, -1000, -270, 0, 1.49f, 0.86f, 1.00f, -1204, 0.007f, 0.00f,0.00f,0.00f, -4, 0.011f, 0.00f,0.00f,0.00f, 0.125f, 0.950f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_FOREST \ + {15, 38.0f, 0.300f, -1000, -3300, 0, 1.49f, 0.54f, 1.00f, -2560, 0.162f, 0.00f,0.00f,0.00f, -229, 0.088f, 0.00f,0.00f,0.00f, 0.125f, 1.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_CITY \ + {16, 7.5f, 0.500f, -1000, -800, 0, 1.49f, 0.67f, 1.00f, -2273, 0.007f, 0.00f,0.00f,0.00f, -1691, 0.011f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_MOUNTAINS \ + {17, 100.0f, 0.270f, -1000, -2500, 0, 1.49f, 0.21f, 1.00f, -2780, 0.300f, 0.00f,0.00f,0.00f, -1434, 0.100f, 0.00f,0.00f,0.00f, 0.250f, 1.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f } +#define REVERB_PRESET_QUARRY \ + {18, 17.5f, 1.000f, -1000, -1000, 0, 1.49f, 0.83f, 1.00f, -10000, 0.061f, 0.00f,0.00f,0.00f, 500, 0.025f, 0.00f,0.00f,0.00f, 0.125f, 0.700f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_PLAIN \ + {19, 42.5f, 0.210f, -1000, -2000, 0, 1.49f, 0.50f, 1.00f, -2466, 0.179f, 0.00f,0.00f,0.00f, -1926, 0.100f, 0.00f,0.00f,0.00f, 0.250f, 1.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_PARKINGLOT \ + {20, 8.3f, 1.000f, -1000, 0, 0, 1.65f, 1.50f, 1.00f, -1363, 0.008f, 0.00f,0.00f,0.00f, -1153, 0.012f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f } +#define REVERB_PRESET_SEWERPIPE \ + {21, 1.7f, 0.800f, -1000, -1000, 0, 2.81f, 0.14f, 1.00f, 429, 0.014f, 0.00f,0.00f,0.00f, 1023, 0.021f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_UNDERWATER \ + {22, 1.8f, 1.000f, -1000, -4000, 0, 1.49f, 0.10f, 1.00f, -449, 0.007f, 0.00f,0.00f,0.00f, 1700, 0.011f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 1.180f, 0.348f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_DRUGGED \ + {23, 1.9f, 0.500f, -1000, 0, 0, 8.39f, 1.39f, 1.00f, -115, 0.002f, 0.00f,0.00f,0.00f, 985, 0.030f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 1.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f } +#define REVERB_PRESET_DIZZY \ + {24, 1.8f, 0.600f, -1000, -400, 0, 17.23f, 0.56f, 1.00f, -1713, 0.020f, 0.00f,0.00f,0.00f, -613, 0.030f, 0.00f,0.00f,0.00f, 0.250f, 1.000f, 0.810f, 0.310f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f } +#define REVERB_PRESET_PSYCHOTIC \ + {25, 1.0f, 0.500f, -1000, -151, 0, 7.56f, 0.91f, 1.00f, -626, 0.020f, 0.00f,0.00f,0.00f, 774, 0.030f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 4.000f, 1.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f } + + +// CASTLE PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_CASTLE_SMALLROOM \ + { 26, 8.3f, 0.890f, -1000, -800, -2000, 1.22f, 0.83f, 0.31f, -100, 0.022f, 0.00f,0.00f,0.00f, 600, 0.011f, 0.00f,0.00f,0.00f, 0.138f, 0.080f, 0.250f, 0.000f, -5.0f, 5168.6f, 139.5f, 0.00f, 0x20 } +#define REVERB_PRESET_CASTLE_SHORTPASSAGE \ + { 26, 8.3f, 0.890f, -1000, -1000, -2000, 2.32f, 0.83f, 0.31f, -100, 0.007f, 0.00f,0.00f,0.00f, 200, 0.023f, 0.00f,0.00f,0.00f, 0.138f, 0.080f, 0.250f, 0.000f, -5.0f, 5168.6f, 139.5f, 0.00f, 0x20 } +#define REVERB_PRESET_CASTLE_MEDIUMROOM \ + { 26, 8.3f, 0.930f, -1000, -1100, -2000, 2.04f, 0.83f, 0.46f, -400, 0.022f, 0.00f,0.00f,0.00f, 400, 0.011f, 0.00f,0.00f,0.00f, 0.155f, 0.030f, 0.250f, 0.000f, -5.0f, 5168.6f, 139.5f, 0.00f, 0x20 } +#define REVERB_PRESET_CASTLE_LONGPASSAGE \ + { 26, 8.3f, 0.890f, -1000, -800, -2000, 3.42f, 0.83f, 0.31f, -100, 0.007f, 0.00f,0.00f,0.00f, 300, 0.023f, 0.00f,0.00f,0.00f, 0.138f, 0.080f, 0.250f, 0.000f, -5.0f, 5168.6f, 139.5f, 0.00f, 0x20 } +#define REVERB_PRESET_CASTLE_LARGEROOM \ + { 26, 8.3f, 0.820f, -1000, -1100, -1800, 2.53f, 0.83f, 0.50f, -700, 0.034f, 0.00f,0.00f,0.00f, 200, 0.016f, 0.00f,0.00f,0.00f, 0.185f, 0.070f, 0.250f, 0.000f, -5.0f, 5168.6f, 139.5f, 0.00f, 0x20 } +#define REVERB_PRESET_CASTLE_HALL \ + { 26, 8.3f, 0.810f, -1000, -1100, -1500, 3.14f, 0.79f, 0.62f, -1500, 0.056f, 0.00f,0.00f,0.00f, 100, 0.024f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5168.6f, 139.5f, 0.00f, 0x20 } +#define REVERB_PRESET_CASTLE_CUPBOARD \ + { 26, 8.3f, 0.890f, -1000, -1100, -2000, 0.67f, 0.87f, 0.31f, 300, 0.010f, 0.00f,0.00f,0.00f, 1100, 0.007f, 0.00f,0.00f,0.00f, 0.138f, 0.080f, 0.250f, 0.000f, -5.0f, 5168.6f, 139.5f, 0.00f, 0x20 } +#define REVERB_PRESET_CASTLE_COURTYARD \ + { 26, 8.3f, 0.420f, -1000, -700, -1400, 2.13f, 0.61f, 0.23f, -1300, 0.160f, 0.00f,0.00f,0.00f, -300, 0.036f, 0.00f,0.00f,0.00f, 0.250f, 0.370f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f } +#define REVERB_PRESET_CASTLE_ALCOVE \ + { 26, 8.3f, 0.890f, -1000, -600, -2000, 1.64f, 0.87f, 0.31f, 00, 0.007f, 0.00f,0.00f,0.00f, 300, 0.034f, 0.00f,0.00f,0.00f, 0.138f, 0.080f, 0.250f, 0.000f, -5.0f, 5168.6f, 139.5f, 0.00f, 0x20 } + + +// FACTORY PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_FACTORY_ALCOVE \ + { 26, 1.8f, 0.590f, -1200, -200, -600, 3.14f, 0.65f, 1.31f, 300, 0.010f, 0.00f,0.00f,0.00f, 000, 0.038f, 0.00f,0.00f,0.00f, 0.114f, 0.100f, 0.250f, 0.000f, -5.0f, 3762.6f, 362.5f, 0.00f, 0x20 } +#define REVERB_PRESET_FACTORY_SHORTPASSAGE \ + { 26, 1.8f, 0.640f, -1200, -200, -600, 2.53f, 0.65f, 1.31f, 0, 0.010f, 0.00f,0.00f,0.00f, 200, 0.038f, 0.00f,0.00f,0.00f, 0.135f, 0.230f, 0.250f, 0.000f, -5.0f, 3762.6f, 362.5f, 0.00f, 0x20 } +#define REVERB_PRESET_FACTORY_MEDIUMROOM \ + { 26, 1.9f, 0.820f, -1200, -200, -600, 2.76f, 0.65f, 1.31f, -1100, 0.022f, 0.00f,0.00f,0.00f, 300, 0.023f, 0.00f,0.00f,0.00f, 0.174f, 0.070f, 0.250f, 0.000f, -5.0f, 3762.6f, 362.5f, 0.00f, 0x20 } +#define REVERB_PRESET_FACTORY_LONGPASSAGE \ + { 26, 1.8f, 0.640f, -1200, -200, -600, 4.06f, 0.65f, 1.31f, 0, 0.020f, 0.00f,0.00f,0.00f, 200, 0.037f, 0.00f,0.00f,0.00f, 0.135f, 0.230f, 0.250f, 0.000f, -5.0f, 3762.6f, 362.5f, 0.00f, 0x20 } +#define REVERB_PRESET_FACTORY_LARGEROOM \ + { 26, 1.9f, 0.750f, -1200, -300, -400, 4.24f, 0.51f, 1.31f, -1500, 0.039f, 0.00f,0.00f,0.00f, 100, 0.023f, 0.00f,0.00f,0.00f, 0.231f, 0.070f, 0.250f, 0.000f, -5.0f, 3762.6f, 362.5f, 0.00f, 0x20 } +#define REVERB_PRESET_FACTORY_HALL \ + { 26, 1.9f, 0.750f, -1000, -300, -400, 7.43f, 0.51f, 1.31f, -2400, 0.073f, 0.00f,0.00f,0.00f, -100, 0.027f, 0.00f,0.00f,0.00f, 0.250f, 0.070f, 0.250f, 0.000f, -5.0f, 3762.6f, 362.5f, 0.00f, 0x20 } +#define REVERB_PRESET_FACTORY_CUPBOARD \ + { 26, 1.7f, 0.630f, -1200, -200, -600, 0.49f, 0.65f, 1.31f, 200, 0.010f, 0.00f,0.00f,0.00f, 600, 0.032f, 0.00f,0.00f,0.00f, 0.107f, 0.070f, 0.250f, 0.000f, -5.0f, 3762.6f, 362.5f, 0.00f, 0x20 } +#define REVERB_PRESET_FACTORY_COURTYARD \ + { 26, 1.7f, 0.570f, -1000, -1000, -400, 2.32f, 0.29f, 0.56f, -1300, 0.140f, 0.00f,0.00f,0.00f, -800, 0.039f, 0.00f,0.00f,0.00f, 0.250f, 0.290f, 0.250f, 0.000f, -5.0f, 3762.6f, 362.5f, 0.00f, 0x20 } +#define REVERB_PRESET_FACTORY_SMALLROOM \ + { 26, 1.8f, 0.820f, -1000, -200, -600, 1.72f, 0.65f, 1.31f, -300, 0.010f, 0.00f,0.00f,0.00f, 500, 0.024f, 0.00f,0.00f,0.00f, 0.119f, 0.070f, 0.250f, 0.000f, -5.0f, 3762.6f, 362.5f, 0.00f, 0x20 } + + +// ICE PALACE PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_ICEPALACE_ALCOVE \ + { 26, 2.7f, 0.840f, -1000, -500, -1100, 2.76f, 1.46f, 0.28f, 100, 0.010f, 0.00f,0.00f,0.00f, -100, 0.030f, 0.00f,0.00f,0.00f, 0.161f, 0.090f, 0.250f, 0.000f, -5.0f, 12428.5f, 99.6f, 0.00f, 0x20 } +#define REVERB_PRESET_ICEPALACE_SHORTPASSAGE \ + { 26, 2.7f, 0.750f, -1000, -500, -1100, 1.79f, 1.46f, 0.28f, -600, 0.010f, 0.00f,0.00f,0.00f, 100, 0.019f, 0.00f,0.00f,0.00f, 0.177f, 0.090f, 0.250f, 0.000f, -5.0f, 12428.5f, 99.6f, 0.00f, 0x20 } +#define REVERB_PRESET_ICEPALACE_MEDIUMROOM \ + { 26, 2.7f, 0.870f, -1000, -500, -700, 2.22f, 1.53f, 0.32f, -800, 0.039f, 0.00f,0.00f,0.00f, 100, 0.027f, 0.00f,0.00f,0.00f, 0.186f, 0.120f, 0.250f, 0.000f, -5.0f, 12428.5f, 99.6f, 0.00f, 0x20 } +#define REVERB_PRESET_ICEPALACE_LONGPASSAGE \ + { 26, 2.7f, 0.770f, -1000, -500, -800, 3.01f, 1.46f, 0.28f, -200, 0.012f, 0.00f,0.00f,0.00f, 200, 0.025f, 0.00f,0.00f,0.00f, 0.186f, 0.040f, 0.250f, 0.000f, -5.0f, 12428.5f, 99.6f, 0.00f, 0x20 } +#define REVERB_PRESET_ICEPALACE_LARGEROOM \ + { 26, 2.9f, 0.810f, -1000, -500, -700, 3.14f, 1.53f, 0.32f, -1200, 0.039f, 0.00f,0.00f,0.00f, 000, 0.027f, 0.00f,0.00f,0.00f, 0.214f, 0.110f, 0.250f, 0.000f, -5.0f, 12428.5f, 99.6f, 0.00f, 0x20 } +#define REVERB_PRESET_ICEPALACE_HALL \ + { 26, 2.9f, 0.760f, -1000, -700, -500, 5.49f, 1.53f, 0.38f, -1900, 0.054f, 0.00f,0.00f,0.00f, -400, 0.052f, 0.00f,0.00f,0.00f, 0.226f, 0.110f, 0.250f, 0.000f, -5.0f, 12428.5f, 99.6f, 0.00f, 0x20 } +#define REVERB_PRESET_ICEPALACE_CUPBOARD \ + { 26, 2.7f, 0.830f, -1000, -600, -1300, 0.76f, 1.53f, 0.26f, 100, 0.012f, 0.00f,0.00f,0.00f, 600, 0.016f, 0.00f,0.00f,0.00f, 0.143f, 0.080f, 0.250f, 0.000f, -5.0f, 12428.5f, 99.6f, 0.00f, 0x20 } +#define REVERB_PRESET_ICEPALACE_COURTYARD \ + { 26, 2.9f, 0.590f, -1000, -1100, -1000, 2.04f, 1.20f, 0.38f, -1000, 0.173f, 0.00f,0.00f,0.00f, -1000, 0.043f, 0.00f,0.00f,0.00f, 0.235f, 0.480f, 0.250f, 0.000f, -5.0f, 12428.5f, 99.6f, 0.00f, 0x20 } +#define REVERB_PRESET_ICEPALACE_SMALLROOM \ + { 26, 2.7f, 0.840f, -1000, -500, -1100, 1.51f, 1.53f, 0.27f, -100, 0.010f, 0.00f,0.00f,0.00f, 300, 0.011f, 0.00f,0.00f,0.00f, 0.164f, 0.140f, 0.250f, 0.000f, -5.0f, 12428.5f, 99.6f, 0.00f, 0x20 } + + +// SPACE STATION PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_SPACESTATION_ALCOVE \ + { 26, 1.5f, 0.780f, -1000, -300, -100, 1.16f, 0.81f, 0.55f, 300, 0.007f, 0.00f,0.00f,0.00f, 000, 0.018f, 0.00f,0.00f,0.00f, 0.192f, 0.210f, 0.250f, 0.000f, -5.0f, 3316.1f, 458.2f, 0.00f, 0x20 } +#define REVERB_PRESET_SPACESTATION_MEDIUMROOM \ + { 26, 1.5f, 0.750f, -1000, -400, -100, 3.01f, 0.50f, 0.55f, -800, 0.034f, 0.00f,0.00f,0.00f, 100, 0.035f, 0.00f,0.00f,0.00f, 0.209f, 0.310f, 0.250f, 0.000f, -5.0f, 3316.1f, 458.2f, 0.00f, 0x20 } +#define REVERB_PRESET_SPACESTATION_SHORTPASSAGE \ + { 26, 1.5f, 0.870f, -1000, -400, -100, 3.57f, 0.50f, 0.55f, 0, 0.012f, 0.00f,0.00f,0.00f, 100, 0.016f, 0.00f,0.00f,0.00f, 0.172f, 0.200f, 0.250f, 0.000f, -5.0f, 3316.1f, 458.2f, 0.00f, 0x20 } +#define REVERB_PRESET_SPACESTATION_LONGPASSAGE \ + { 26, 1.9f, 0.820f, -1000, -400, -100, 4.62f, 0.62f, 0.55f, 0, 0.012f, 0.00f,0.00f,0.00f, 200, 0.031f, 0.00f,0.00f,0.00f, 0.250f, 0.230f, 0.250f, 0.000f, -5.0f, 3316.1f, 458.2f, 0.00f, 0x20 } +#define REVERB_PRESET_SPACESTATION_LARGEROOM \ + { 26, 1.8f, 0.810f, -1000, -400, -100, 3.89f, 0.38f, 0.61f, -1000, 0.056f, 0.00f,0.00f,0.00f, -100, 0.035f, 0.00f,0.00f,0.00f, 0.233f, 0.280f, 0.250f, 0.000f, -5.0f, 3316.1f, 458.2f, 0.00f, 0x20 } +#define REVERB_PRESET_SPACESTATION_HALL \ + { 26, 1.9f, 0.870f, -1000, -400, -100, 7.11f, 0.38f, 0.61f, -1500, 0.100f, 0.00f,0.00f,0.00f, -400, 0.047f, 0.00f,0.00f,0.00f, 0.250f, 0.250f, 0.250f, 0.000f, -5.0f, 3316.1f, 458.2f, 0.00f, 0x20 } +#define REVERB_PRESET_SPACESTATION_CUPBOARD \ + { 26, 1.4f, 0.560f, -1000, -300, -100, 0.79f, 0.81f, 0.55f, 300, 0.007f, 0.00f,0.00f,0.00f, 500, 0.018f, 0.00f,0.00f,0.00f, 0.181f, 0.310f, 0.250f, 0.000f, -5.0f, 3316.1f, 458.2f, 0.00f, 0x20 } +#define REVERB_PRESET_SPACESTATION_SMALLROOM \ + { 26, 1.5f, 0.700f, -1000, -300, -100, 1.72f, 0.82f, 0.55f, -200, 0.007f, 0.00f,0.00f,0.00f, 300, 0.013f, 0.00f,0.00f,0.00f, 0.188f, 0.260f, 0.250f, 0.000f, -5.0f, 3316.1f, 458.2f, 0.00f, 0x20 } + + +// WOODEN GALLEON PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_WOODEN_ALCOVE \ + { 26, 7.5f, 1.000f, -1000, -1800, -1000, 1.22f, 0.62f, 0.91f, 100, 0.012f, 0.00f,0.00f,0.00f, -300, 0.024f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 4705.0f, 99.6f, 0.00f, 0x3f } +#define REVERB_PRESET_WOODEN_SHORTPASSAGE \ + { 26, 7.5f, 1.000f, -1000, -1800, -1000, 1.75f, 0.50f, 0.87f, -100, 0.012f, 0.00f,0.00f,0.00f, -400, 0.024f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 4705.0f, 99.6f, 0.00f, 0x3f } +#define REVERB_PRESET_WOODEN_MEDIUMROOM \ + { 26, 7.5f, 1.000f, -1000, -2000, -1100, 1.47f, 0.42f, 0.82f, -100, 0.049f, 0.00f,0.00f,0.00f, -100, 0.029f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 4705.0f, 99.6f, 0.00f, 0x3f } +#define REVERB_PRESET_WOODEN_LONGPASSAGE \ + { 26, 7.5f, 1.000f, -1000, -2000, -1000, 1.99f, 0.40f, 0.79f, 000, 0.020f, 0.00f,0.00f,0.00f, -700, 0.036f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 4705.0f, 99.6f, 0.00f, 0x3f } +#define REVERB_PRESET_WOODEN_LARGEROOM \ + { 26, 7.5f, 1.000f, -1000, -2100, -1100, 2.65f, 0.33f, 0.82f, -100, 0.066f, 0.00f,0.00f,0.00f, -200, 0.049f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 4705.0f, 99.6f, 0.00f, 0x3f } +#define REVERB_PRESET_WOODEN_HALL \ + { 26, 7.5f, 1.000f, -1000, -2200, -1100, 3.45f, 0.30f, 0.82f, -100, 0.088f, 0.00f,0.00f,0.00f, -200, 0.063f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 4705.0f, 99.6f, 0.00f, 0x3f } +#define REVERB_PRESET_WOODEN_CUPBOARD \ + { 26, 7.5f, 1.000f, -1000, -1700, -1000, 0.56f, 0.46f, 0.91f, 100, 0.012f, 0.00f,0.00f,0.00f, 100, 0.028f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 4705.0f, 99.6f, 0.00f, 0x3f } +#define REVERB_PRESET_WOODEN_SMALLROOM \ + { 26, 7.5f, 1.000f, -1000, -1900, -1000, 0.79f, 0.32f, 0.87f, 00, 0.032f, 0.00f,0.00f,0.00f, -100, 0.029f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 4705.0f, 99.6f, 0.00f, 0x3f } +#define REVERB_PRESET_WOODEN_COURTYARD \ + { 26, 7.5f, 0.650f, -1000, -2200, -1000, 1.79f, 0.35f, 0.79f, -500, 0.123f, 0.00f,0.00f,0.00f, -2000, 0.032f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 4705.0f, 99.6f, 0.00f, 0x3f } + + +// SPORTS PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_SPORT_EMPTYSTADIUM \ + { 26, 7.2f, 1.000f, -1000, -700, -200, 6.26f, 0.51f, 1.10f, -2400, 0.183f, 0.00f,0.00f,0.00f, -800, 0.038f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x20 } +#define REVERB_PRESET_SPORT_SQUASHCOURT \ + { 26, 7.5f, 0.750f, -1000, -1000, -200, 2.22f, 0.91f, 1.16f, -700, 0.007f, 0.00f,0.00f,0.00f, -200, 0.011f, 0.00f,0.00f,0.00f, 0.126f, 0.190f, 0.250f, 0.000f, -5.0f, 7176.9f, 211.2f, 0.00f, 0x20 } +#define REVERB_PRESET_SPORT_SMALLSWIMMINGPOOL \ + { 26, 36.2f, 0.700f, -1000, -200, -100, 2.76f, 1.25f, 1.14f, -400, 0.020f, 0.00f,0.00f,0.00f, -200, 0.030f, 0.00f,0.00f,0.00f, 0.179f, 0.150f, 0.895f, 0.190f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x0 } +#define REVERB_PRESET_SPORT_LARGESWIMMINGPOOL\ + { 26, 36.2f, 0.820f, -1000, -200, 0, 5.49f, 1.31f, 1.14f, -700, 0.039f, 0.00f,0.00f,0.00f, -600, 0.049f, 0.00f,0.00f,0.00f, 0.222f, 0.550f, 1.159f, 0.210f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x0 } +#define REVERB_PRESET_SPORT_GYMNASIUM \ + { 26, 7.5f, 0.810f, -1000, -700, -100, 3.14f, 1.06f, 1.35f, -800, 0.029f, 0.00f,0.00f,0.00f, -500, 0.045f, 0.00f,0.00f,0.00f, 0.146f, 0.140f, 0.250f, 0.000f, -5.0f, 7176.9f, 211.2f, 0.00f, 0x20 } +#define REVERB_PRESET_SPORT_FULLSTADIUM \ + { 26, 7.2f, 1.000f, -1000, -2300, -200, 5.25f, 0.17f, 0.80f, -2000, 0.188f, 0.00f,0.00f,0.00f, -1100, 0.038f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x20 } +#define REVERB_PRESET_SPORT_STADIUMTANNOY \ + { 26, 3.0f, 0.780f, -1000, -500, -600, 2.53f, 0.88f, 0.68f, -1100, 0.230f, 0.00f,0.00f,0.00f, -600, 0.063f, 0.00f,0.00f,0.00f, 0.250f, 0.200f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x20 } + + +// PREFAB PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_PREFAB_WORKSHOP \ + { 26, 1.9f, 1.000f, -1000, -1700, -800, 0.76f, 1.00f, 1.00f, 0, 0.012f, 0.00f,0.00f,0.00f, 100, 0.012f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x0 } +#define REVERB_PRESET_PREFAB_SCHOOLROOM \ + { 26, 1.86f, 0.690f, -1000, -400, -600, 0.98f, 0.45f, 0.18f, 300, 0.017f, 0.00f,0.00f,0.00f, 300, 0.015f, 0.00f,0.00f,0.00f, 0.095f, 0.140f, 0.250f, 0.000f, -5.0f, 7176.9f, 211.2f, 0.00f, 0x20 } +#define REVERB_PRESET_PREFAB_PRACTISEROOM \ + { 26, 1.86f, 0.870f, -1000, -800, -600, 1.12f, 0.56f, 0.18f, 200, 0.010f, 0.00f,0.00f,0.00f, 300, 0.011f, 0.00f,0.00f,0.00f, 0.095f, 0.140f, 0.250f, 0.000f, -5.0f, 7176.9f, 211.2f, 0.00f, 0x20 } +#define REVERB_PRESET_PREFAB_OUTHOUSE \ + { 26, 80.3f, 0.820f, -1000, -1900, -1600, 1.38f, 0.38f, 0.35f, -100, 0.024f, 0.00f,0.00f,-0.00f, -400, 0.044f, 0.00f,0.00f,0.00f, 0.121f, 0.170f, 0.250f, 0.000f, -5.0f, 2854.4f, 107.5f, 0.00f, 0x0 } +#define REVERB_PRESET_PREFAB_CARAVAN \ + { 26, 8.3f, 1.000f, -1000, -2100, -1800, 0.43f, 1.50f, 1.00f, 0, 0.012f, 0.00f,0.00f,0.00f, 600, 0.012f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x1f } + // for US developers, a caravan is the same as a trailer =o) + + +// DOME AND PIPE PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_DOME_TOMB \ + { 26, 51.8f, 0.790f, -1000, -900, -1300, 4.18f, 0.21f, 0.10f, -825, 0.030f, 0.00f,0.00f,0.00f, 450, 0.022f, 0.00f,0.00f,0.00f, 0.177f, 0.190f, 0.250f, 0.000f, -5.0f, 2854.4f, 20.0f, 0.00f, 0x0 } +#define REVERB_PRESET_PIPE_SMALL \ + { 26, 50.3f, 1.000f, -1000, -900, -1300, 5.04f, 0.10f, 0.10f, -600, 0.032f, 0.00f,0.00f,0.00f, 800, 0.015f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 2854.4f, 20.0f, 0.00f, 0x3f } +#define REVERB_PRESET_DOME_SAINTPAULS \ + { 26, 50.3f, 0.870f, -1000, -900, -1300, 10.48f, 0.19f, 0.10f, -1500, 0.090f, 0.00f,0.00f,0.00f, 200, 0.042f, 0.00f,0.00f,0.00f, 0.250f, 0.120f, 0.250f, 0.000f, -5.0f, 2854.4f, 20.0f, 0.00f, 0x3f } +#define REVERB_PRESET_PIPE_LONGTHIN \ + { 26, 1.6f, 0.910f, -1000, -700, -1100, 9.21f, 0.18f, 0.10f, -300, 0.010f, 0.00f,0.00f,0.00f, -300, 0.022f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 2854.4f, 20.0f, 0.00f, 0x0 } +#define REVERB_PRESET_PIPE_LARGE \ + { 26, 50.3f, 1.000f, -1000, -900, -1300, 8.45f, 0.10f, 0.10f, -800, 0.046f, 0.00f,0.00f,0.00f, 400, 0.032f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 2854.4f, 20.0f, 0.00f, 0x3f } +#define REVERB_PRESET_PIPE_RESONANT \ + { 26, 1.3f, 0.910f, -1000, -700, -1100, 6.81f, 0.18f, 0.10f, -300, 0.010f, 0.00f,0.00f,0.00f, 00, 0.022f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 2854.4f, 20.0f, 0.00f, 0x0 } + + +// OUTDOORS PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_OUTDOORS_BACKYARD \ + { 26, 80.3f, 0.450f, -1000, -1200, -600, 1.12f, 0.34f, 0.46f, -700, 0.069f, 0.00f,0.00f,-0.00f, -300, 0.023f, 0.00f,0.00f,0.00f, 0.218f, 0.340f, 0.250f, 0.000f, -5.0f, 4399.1f, 242.9f, 0.00f, 0x0 } +#define REVERB_PRESET_OUTDOORS_ROLLINGPLAINS \ + { 26, 80.3f, 0.000f, -1000, -3900, -400, 2.13f, 0.21f, 0.46f, -1500, 0.300f, 0.00f,0.00f,-0.00f, -700, 0.019f, 0.00f,0.00f,0.00f, 0.250f, 1.000f, 0.250f, 0.000f, -5.0f, 4399.1f, 242.9f, 0.00f, 0x0 } +#define REVERB_PRESET_OUTDOORS_DEEPCANYON \ + { 26, 80.3f, 0.740f, -1000, -1500, -400, 3.89f, 0.21f, 0.46f, -1000, 0.223f, 0.00f,0.00f,-0.00f, -900, 0.019f, 0.00f,0.00f,0.00f, 0.250f, 1.000f, 0.250f, 0.000f, -5.0f, 4399.1f, 242.9f, 0.00f, 0x0 } +#define REVERB_PRESET_OUTDOORS_CREEK \ + { 26, 80.3f, 0.350f, -1000, -1500, -600, 2.13f, 0.21f, 0.46f, -800, 0.115f, 0.00f,0.00f,-0.00f, -1400, 0.031f, 0.00f,0.00f,0.00f, 0.218f, 0.340f, 0.250f, 0.000f, -5.0f, 4399.1f, 242.9f, 0.00f, 0x0 } +#define REVERB_PRESET_OUTDOORS_VALLEY \ + { 26, 80.3f, 0.280f, -1000, -3100, -1600, 2.88f, 0.26f, 0.35f, -1700, 0.263f, 0.00f,0.00f,-0.00f, -800, 0.100f, 0.00f,0.00f,0.00f, 0.250f, 0.340f, 0.250f, 0.000f, -5.0f, 2854.4f, 107.5f, 0.00f, 0x0 } + + +// MOOD PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_MOOD_HEAVEN \ + { 26, 19.6f, 0.940f, -1000, -200, -700, 5.04f, 1.12f, 0.56f, -1230, 0.020f, 0.00f,0.00f,0.00f, 200, 0.029f, 0.00f,0.00f,0.00f, 0.250f, 0.080f, 2.742f, 0.050f, -2.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_MOOD_HELL \ + { 26, 100.0f, 0.570f, -1000, -900, -700, 3.57f, 0.49f, 2.00f, -10000, 0.020f, 0.00f,0.00f,0.00f, 300, 0.030f, 0.00f,0.00f,0.00f, 0.110f, 0.040f, 2.109f, 0.520f, -5.0f, 5000.0f, 139.5f, 0.00f, 0x40 } +#define REVERB_PRESET_MOOD_MEMORY \ + { 26, 8.0f, 0.850f, -1000, -400, -900, 4.06f, 0.82f, 0.56f, -2800, 0.000f, 0.00f,0.00f,0.00f, 100, 0.000f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.474f, 0.450f, -10.0f, 5000.0f, 250.0f, 0.00f, 0x0 } + + +// DRIVING SIMULATION PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_DRIVING_COMMENTATOR \ + { 26, 3.0f, 0.000f, 1000, -500, -600, 2.42f, 0.88f, 0.68f, -1400, 0.093f, 0.00f,0.00f,0.00f, -1200, 0.017f, 0.00f,0.00f,0.00f, 0.250f, 1.000f, 0.250f, 0.000f, -10.0f, 5000.0f, 250.0f, 0.00f, 0x20 } +#define REVERB_PRESET_DRIVING_PITGARAGE \ + { 26, 1.9f, 0.590f, -1000, -300, -500, 1.72f, 0.93f, 0.87f, -500, 0.000f, 0.00f,0.00f,0.00f, 200, 0.016f, 0.00f,0.00f,0.00f, 0.250f, 0.110f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x0 } +#define REVERB_PRESET_DRIVING_INCAR_RACER \ + { 26, 1.1f, 0.800f, -1000, 0, -200, 0.17f, 2.00f, 0.41f, 500, 0.007f, 0.00f,0.00f,0.00f, -300, 0.015f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 10268.2f, 251.0f, 0.00f, 0x20 } +#define REVERB_PRESET_DRIVING_INCAR_SPORTS \ + { 26, 1.1f, 0.800f, -1000, -400, 0, 0.17f, 0.75f, 0.41f, 0, 0.010f, 0.00f,0.00f,0.00f, -500, 0.000f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 10268.2f, 251.0f, 0.00f, 0x20 } +#define REVERB_PRESET_DRIVING_INCAR_LUXURY \ + { 26, 1.6f, 1.000f, -1000, -2000, -600, 0.13f, 0.41f, 0.46f, -200, 0.010f, 0.00f,0.00f,0.00f, 400, 0.010f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 10268.2f, 251.0f, 0.00f, 0x20 } +#define REVERB_PRESET_DRIVING_FULLGRANDSTAND \ + { 26, 8.3f, 1.000f, -1000, -1100, -400, 3.01f, 1.37f, 1.28f, -900, 0.090f, 0.00f,0.00f,0.00f, -1500, 0.049f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 10420.2f, 250.0f, 0.00f, 0x1f } +#define REVERB_PRESET_DRIVING_EMPTYGRANDSTAND \ + { 26, 8.3f, 1.000f, -1000, 0, -200, 4.62f, 1.75f, 1.40f, -1363, 0.090f, 0.00f,0.00f,0.00f, -1200, 0.049f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.000f, -5.0f, 10420.2f, 250.0f, 0.00f, 0x1f } +#define REVERB_PRESET_DRIVING_TUNNEL \ + { 26, 3.1f, 0.810f, -1000, -800, -100, 3.42f, 0.94f, 1.31f, -300, 0.051f, 0.00f,0.00f,0.00f, -300, 0.047f, 0.00f,0.00f,0.00f, 0.214f, 0.050f, 0.250f, 0.000f, -5.0f, 5000.0f, 155.3f, 0.00f, 0x20 } + + +// CITY PRESETS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_CITY_STREETS \ + { 26, 3.0f, 0.780f, -1000, -300, -100, 1.79f, 1.12f, 0.91f, -1100, 0.046f, 0.00f,0.00f,0.00f, -1400, 0.028f, 0.00f,0.00f,0.00f, 0.250f, 0.200f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x20 } +#define REVERB_PRESET_CITY_SUBWAY \ + { 26, 3.0f, 0.740f, -1000, -300, -100, 3.01f, 1.23f, 0.91f, -300, 0.046f, 0.00f,0.00f,0.00f, 200, 0.028f, 0.00f,0.00f,0.00f, 0.125f, 0.210f, 0.250f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x20 } +#define REVERB_PRESET_CITY_MUSEUM \ + { 26, 80.3f, 0.820f, -1000, -1500, -1500, 3.28f, 1.40f, 0.57f, -1200, 0.039f, 0.00f,0.00f,-0.00f, -100, 0.034f, 0.00f,0.00f,0.00f, 0.130f, 0.170f, 0.250f, 0.000f, -5.0f, 2854.4f, 107.5f, 0.00f, 0x0 } +#define REVERB_PRESET_CITY_LIBRARY \ + { 26, 80.3f, 0.820f, -1000, -1100, -2100, 2.76f, 0.89f, 0.41f, -900, 0.029f, 0.00f,0.00f,-0.00f, -100, 0.020f, 0.00f,0.00f,0.00f, 0.130f, 0.170f, 0.250f, 0.000f, -5.0f, 2854.4f, 107.5f, 0.00f, 0x0 } +#define REVERB_PRESET_CITY_UNDERPASS \ + { 26, 3.0f, 0.820f, -1000, -700, -100, 3.57f, 1.12f, 0.91f, -800, 0.059f, 0.00f,0.00f,0.00f, -100, 0.037f, 0.00f,0.00f,0.00f, 0.250f, 0.140f, 0.250f, 0.000f, -7.0f, 5000.0f, 250.0f, 0.00f, 0x20 } +#define REVERB_PRESET_CITY_ABANDONED \ + { 26, 3.0f, 0.690f, -1000, -200, -100, 3.28f, 1.17f, 0.91f, -700, 0.044f, 0.00f,0.00f,0.00f, -1100, 0.024f, 0.00f,0.00f,0.00f, 0.250f, 0.200f, 0.250f, 0.000f, -3.0f, 5000.0f, 250.0f, 0.00f, 0x20 } + + +// MISC ROOMS + +// Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS +#define REVERB_PRESET_DUSTYROOM \ + { 26, 1.8f, 0.560f, -1000, -200, -300, 1.79f, 0.38f, 0.21f, -600, 0.002f, 0.00f,0.00f,0.00f, 200, 0.006f, 0.00f,0.00f,0.00f, 0.202f, 0.050f, 0.250f, 0.000f, -10.0f, 13046.0f, 163.3f, 0.00f, 0x20 } +#define REVERB_PRESET_CHAPEL \ + { 26, 19.6f, 0.840f, -1000, -500, 0, 4.62f, 0.64f, 1.23f, -700, 0.032f, 0.00f,0.00f,0.00f, -200, 0.049f, 0.00f,0.00f,0.00f, 0.250f, 0.000f, 0.250f, 0.110f, -5.0f, 5000.0f, 250.0f, 0.00f, 0x3f } +#define REVERB_PRESET_SMALLWATERROOM \ + { 26, 36.2f, 0.700f, -1000, -698, 0, 1.51f, 1.25f, 1.14f, -100, 0.020f, 0.00f,0.00f,0.00f, 300, 0.030f, 0.00f,0.00f,0.00f, 0.179f, 0.150f, 0.895f, 0.190f, -7.0f, 5000.0f, 250.0f, 0.00f, 0x0 } diff --git a/Externals/OpenAL/include/al.h b/Externals/OpenAL/include/al.h new file mode 100644 index 0000000000..1c2f95b318 --- /dev/null +++ b/Externals/OpenAL/include/al.h @@ -0,0 +1,732 @@ +#ifndef AL_AL_H +#define AL_AL_H + + + +#if defined(__cplusplus) +extern "C" { +#endif + +#if defined(_WIN32) && !defined(_XBOX) + /* _OPENAL32LIB is deprecated */ + #if defined(AL_BUILD_LIBRARY) || defined (_OPENAL32LIB) + #define AL_API __declspec(dllexport) + #else + #define AL_API __declspec(dllimport) + #endif +#else + #define AL_API extern +#endif + +#if defined(_WIN32) + #define AL_APIENTRY __cdecl +#else + #define AL_APIENTRY +#endif + +#if TARGET_OS_MAC + #pragma export on +#endif + +/* The OPENAL, ALAPI, and ALAPIENTRY macros are deprecated, but are included for applications porting code + from AL 1.0 */ +#define OPENAL +#define ALAPI AL_API +#define ALAPIENTRY AL_APIENTRY + +#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 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. */ + +/* bad value */ +#define AL_INVALID -1 + +#define AL_NONE 0 + +/* Boolean False. */ +#define AL_FALSE 0 + +/** Boolean True. */ +#define AL_TRUE 1 + +/** Indicate Source has relative coordinates. */ +#define AL_SOURCE_RELATIVE 0x202 + + + +/** + * Directional source, inner cone angle, in degrees. + * Range: [0-360] + * Default: 360 + */ +#define AL_CONE_INNER_ANGLE 0x1001 + +/** + * Directional source, outer cone angle, in degrees. + * Range: [0-360] + * Default: 360 + */ +#define AL_CONE_OUTER_ANGLE 0x1002 + +/** + * Specify the pitch to be applied, either at source, + * or on mixer results, at listener. + * Range: [0.5-2.0] + * Default: 1.0 + */ +#define AL_PITCH 0x1003 + +/** + * 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. + */ +#define AL_POSITION 0x1004 + +/** Specify the current direction. */ +#define AL_DIRECTION 0x1005 + +/** Specify the current velocity in three dimensional space. */ +#define AL_VELOCITY 0x1006 + +/** + * Indicate whether source is looping. + * Type: ALboolean? + * Range: [AL_TRUE, AL_FALSE] + * Default: FALSE. + */ +#define AL_LOOPING 0x1007 + +/** + * Indicate the buffer to provide sound samples. + * Type: ALuint. + * Range: any valid Buffer id. + */ +#define AL_BUFFER 0x1009 + +/** + * Indicate the gain (volume amplification) applied. + * Type: ALfloat. + * Range: ]0.0- ] + * 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.0 is meaningless with respect to a logarithmic + * scale; it is interpreted as zero volume - the channel + * is effectively disabled. + */ +#define AL_GAIN 0x100A + +/* + * Indicate minimum source attenuation + * Type: ALfloat + * Range: [0.0 - 1.0] + * + * Logarthmic + */ +#define AL_MIN_GAIN 0x100D + +/** + * Indicate maximum source attenuation + * Type: ALfloat + * Range: [0.0 - 1.0] + * + * Logarthmic + */ +#define AL_MAX_GAIN 0x100E + +/** + * Indicate listener orientation. + * + * at/up + */ +#define AL_ORIENTATION 0x100F + +/** + * Specify the channel mask. (Creative) + * Type: ALuint + * Range: [0 - 255] + */ +#define AL_CHANNEL_MASK 0x3000 + + +/** + * Source state information. + */ +#define AL_SOURCE_STATE 0x1010 +#define AL_INITIAL 0x1011 +#define AL_PLAYING 0x1012 +#define AL_PAUSED 0x1013 +#define AL_STOPPED 0x1014 + +/** + * Buffer Queue params + */ +#define AL_BUFFERS_QUEUED 0x1015 +#define AL_BUFFERS_PROCESSED 0x1016 + +/** + * Source buffer position information + */ +#define AL_SEC_OFFSET 0x1024 +#define AL_SAMPLE_OFFSET 0x1025 +#define AL_BYTE_OFFSET 0x1026 + +/* + * Source type (Static, Streaming or undetermined) + * Source is Static if a Buffer has been attached using AL_BUFFER + * Source is Streaming if one or more Buffers have been attached using alSourceQueueBuffers + * Source is undetermined when it has the NULL buffer attached + */ +#define AL_SOURCE_TYPE 0x1027 +#define AL_STATIC 0x1028 +#define AL_STREAMING 0x1029 +#define AL_UNDETERMINED 0x1030 + +/** Sound samples: format specifier. */ +#define AL_FORMAT_MONO8 0x1100 +#define AL_FORMAT_MONO16 0x1101 +#define AL_FORMAT_STEREO8 0x1102 +#define AL_FORMAT_STEREO16 0x1103 + +/** + * source specific reference distance + * Type: ALfloat + * Range: 0.0 - +inf + * + * At 0.0, no distance attenuation occurs. Default is + * 1.0. + */ +#define AL_REFERENCE_DISTANCE 0x1020 + +/** + * source specific rolloff factor + * Type: ALfloat + * Range: 0.0 - +inf + * + */ +#define AL_ROLLOFF_FACTOR 0x1021 + +/** + * Directional source, outer cone gain. + * + * Default: 0.0 + * Range: [0.0 - 1.0] + * Logarithmic + */ +#define AL_CONE_OUTER_GAIN 0x1022 + +/** + * Indicate distance above which sources are not + * attenuated using the inverse clamped distance model. + * + * Default: +inf + * Type: ALfloat + * Range: 0.0 - +inf + */ +#define AL_MAX_DISTANCE 0x1023 + +/** + * Sound samples: 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. + */ +#define AL_FREQUENCY 0x2001 +#define AL_BITS 0x2002 +#define AL_CHANNELS 0x2003 +#define AL_SIZE 0x2004 + +/** + * Buffer state. + * + * Not supported for public use (yet). + */ +#define AL_UNUSED 0x2010 +#define AL_PENDING 0x2011 +#define AL_PROCESSED 0x2012 + + +/** Errors: No Error. */ +#define AL_NO_ERROR AL_FALSE + +/** + * Invalid Name paramater passed to AL call. + */ +#define AL_INVALID_NAME 0xA001 + +/** + * Invalid parameter passed to AL call. + */ +#define AL_ILLEGAL_ENUM 0xA002 +#define AL_INVALID_ENUM 0xA002 + +/** + * Invalid enum parameter value. + */ +#define AL_INVALID_VALUE 0xA003 + +/** + * Illegal call. + */ +#define AL_ILLEGAL_COMMAND 0xA004 +#define AL_INVALID_OPERATION 0xA004 + + +/** + * No mojo. + */ +#define AL_OUT_OF_MEMORY 0xA005 + + +/** Context strings: Vendor Name. */ +#define AL_VENDOR 0xB001 +#define AL_VERSION 0xB002 +#define AL_RENDERER 0xB003 +#define AL_EXTENSIONS 0xB004 + +/** Global tweakage. */ + +/** + * Doppler scale. Default 1.0 + */ +#define AL_DOPPLER_FACTOR 0xC000 + +/** + * Tweaks speed of propagation. + */ +#define AL_DOPPLER_VELOCITY 0xC001 + +/** + * Speed of Sound in units per second + */ +#define AL_SPEED_OF_SOUND 0xC003 + +/** + * Distance models + * + * used in conjunction with DistanceModel + * + * implicit: NONE, which disances distance attenuation. + */ +#define AL_DISTANCE_MODEL 0xD000 +#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 + + +#if !defined(AL_NO_PROTOTYPES) + +/* + * 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* data ); + +AL_API void AL_APIENTRY alGetIntegerv( ALenum param, ALint* data ); + +AL_API void AL_APIENTRY alGetFloatv( ALenum param, ALfloat* data ); + +AL_API void AL_APIENTRY alGetDoublev( ALenum param, ALdouble* data ); + +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 support. + * Obtain the most recent error generated in the AL state machine. + */ +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 ); + + +/* + * LISTENER + * Listener represents the location and orientation of the + * 'user' in 3D-space. + * + * Properties include: - + * + * Gain AL_GAIN ALfloat + * Position AL_POSITION ALfloat[3] + * Velocity AL_VELOCITY ALfloat[3] + * Orientation AL_ORIENTATION ALfloat[6] (Forward then Up vectors) +*/ + +/* + * 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 ); + + +/** + * SOURCE + * Sources represent individual sound objects in 3D-space. + * Sources take the PCM data provided in the specified Buffer, + * apply Source-specific modifications, and then + * submit them to be mixed according to spatial arrangement etc. + * + * Properties include: - + * + * Gain AL_GAIN ALfloat + * Min Gain AL_MIN_GAIN ALfloat + * Max Gain AL_MAX_GAIN ALfloat + * Position AL_POSITION ALfloat[3] + * Velocity AL_VELOCITY ALfloat[3] + * Direction AL_DIRECTION ALfloat[3] + * Head Relative Mode AL_SOURCE_RELATIVE ALint (AL_TRUE or AL_FALSE) + * Reference Distance AL_REFERENCE_DISTANCE ALfloat + * Max Distance AL_MAX_DISTANCE ALfloat + * RollOff Factor AL_ROLLOFF_FACTOR ALfloat + * Inner Angle AL_CONE_INNER_ANGLE ALint or ALfloat + * Outer Angle AL_CONE_OUTER_ANGLE ALint or ALfloat + * Cone Outer Gain AL_CONE_OUTER_GAIN ALint or ALfloat + * Pitch AL_PITCH ALfloat + * Looping AL_LOOPING ALint (AL_TRUE or AL_FALSE) + * MS Offset AL_MSEC_OFFSET ALint or ALfloat + * Byte Offset AL_BYTE_OFFSET ALint or ALfloat + * Sample Offset AL_SAMPLE_OFFSET ALint or ALfloat + * Attached Buffer AL_BUFFER ALint + * State (Query only) AL_SOURCE_STATE ALint + * Buffers Queued (Query only) AL_BUFFERS_QUEUED ALint + * Buffers Processed (Query only) AL_BUFFERS_PROCESSED ALint + */ + +/* 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 sid ); + +/* + * Set Source parameters + */ +AL_API void AL_APIENTRY alSourcef( ALuint sid, ALenum param, ALfloat value ); + +AL_API void AL_APIENTRY alSource3f( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); + +AL_API void AL_APIENTRY alSourcefv( ALuint sid, ALenum param, const ALfloat* values ); + +AL_API void AL_APIENTRY alSourcei( ALuint sid, ALenum param, ALint value ); + +AL_API void AL_APIENTRY alSource3i( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 ); + +AL_API void AL_APIENTRY alSourceiv( ALuint sid, ALenum param, const ALint* values ); + +/* + * Get Source parameters + */ +AL_API void AL_APIENTRY alGetSourcef( ALuint sid, ALenum param, ALfloat* value ); + +AL_API void AL_APIENTRY alGetSource3f( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); + +AL_API void AL_APIENTRY alGetSourcefv( ALuint sid, ALenum param, ALfloat* values ); + +AL_API void AL_APIENTRY alGetSourcei( ALuint sid, ALenum param, ALint* value ); + +AL_API void AL_APIENTRY alGetSource3i( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3); + +AL_API void AL_APIENTRY alGetSourceiv( ALuint sid, ALenum param, ALint* values ); + + +/* + * Source vector based playback calls + */ + +/* Play, replay, or resume (if paused) a list of Sources */ +AL_API void AL_APIENTRY alSourcePlayv( ALsizei ns, const ALuint *sids ); + +/* Stop a list of Sources */ +AL_API void AL_APIENTRY alSourceStopv( ALsizei ns, const ALuint *sids ); + +/* Rewind a list of Sources */ +AL_API void AL_APIENTRY alSourceRewindv( ALsizei ns, const ALuint *sids ); + +/* Pause a list of Sources */ +AL_API void AL_APIENTRY alSourcePausev( ALsizei ns, const ALuint *sids ); + +/* + * Source based playback calls + */ + +/* Play, replay, or resume a Source */ +AL_API void AL_APIENTRY alSourcePlay( ALuint sid ); + +/* Stop a Source */ +AL_API void AL_APIENTRY alSourceStop( ALuint sid ); + +/* Rewind a Source (set playback postiton to beginning) */ +AL_API void AL_APIENTRY alSourceRewind( ALuint sid ); + +/* Pause a Source */ +AL_API void AL_APIENTRY alSourcePause( ALuint sid ); + +/* + * Source Queuing + */ +AL_API void AL_APIENTRY alSourceQueueBuffers( ALuint sid, ALsizei numEntries, const ALuint *bids ); + +AL_API void AL_APIENTRY alSourceUnqueueBuffers( ALuint sid, ALsizei numEntries, ALuint *bids ); + + +/** + * BUFFER + * Buffer objects are storage space for sample data. + * Buffers are referred to by Sources. One Buffer can be used + * by multiple Sources. + * + * Properties include: - + * + * Frequency (Query only) AL_FREQUENCY ALint + * Size (Query only) AL_SIZE ALint + * Bits (Query only) AL_BITS ALint + * Channels (Query only) AL_CHANNELS ALint + */ + +/* 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 bid ); + +/* Specify the data to be copied into a buffer */ +AL_API void AL_APIENTRY alBufferData( ALuint bid, ALenum format, const ALvoid* data, ALsizei size, ALsizei freq ); + +/* + * Set Buffer parameters + */ +AL_API void AL_APIENTRY alBufferf( ALuint bid, ALenum param, ALfloat value ); + +AL_API void AL_APIENTRY alBuffer3f( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); + +AL_API void AL_APIENTRY alBufferfv( ALuint bid, ALenum param, const ALfloat* values ); + +AL_API void AL_APIENTRY alBufferi( ALuint bid, ALenum param, ALint value ); + +AL_API void AL_APIENTRY alBuffer3i( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 ); + +AL_API void AL_APIENTRY alBufferiv( ALuint bid, ALenum param, const ALint* values ); + +/* + * Get Buffer parameters + */ +AL_API void AL_APIENTRY alGetBufferf( ALuint bid, ALenum param, ALfloat* value ); + +AL_API void AL_APIENTRY alGetBuffer3f( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); + +AL_API void AL_APIENTRY alGetBufferfv( ALuint bid, ALenum param, ALfloat* values ); + +AL_API void AL_APIENTRY alGetBufferi( ALuint bid, ALenum param, ALint* value ); + +AL_API void AL_APIENTRY alGetBuffer3i( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3); + +AL_API void AL_APIENTRY alGetBufferiv( ALuint bid, ALenum param, ALint* values ); + + +/* + * Global Parameters + */ +AL_API void AL_APIENTRY alDopplerFactor( ALfloat value ); + +AL_API void AL_APIENTRY alDopplerVelocity( ALfloat value ); + +AL_API void AL_APIENTRY alSpeedOfSound( ALfloat value ); + +AL_API void AL_APIENTRY alDistanceModel( ALenum distanceModel ); + +#else /* AL_NO_PROTOTYPES */ + +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* data ); +typedef void (AL_APIENTRY *LPALGETINTEGERV)( ALenum param, ALint* data ); +typedef void (AL_APIENTRY *LPALGETFLOATV)( ALenum param, ALfloat* data ); +typedef void (AL_APIENTRY *LPALGETDOUBLEV)( ALenum param, ALdouble* data ); +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 sid ); +typedef void (AL_APIENTRY *LPALSOURCEF)( ALuint sid, ALenum param, ALfloat value); +typedef void (AL_APIENTRY *LPALSOURCE3F)( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); +typedef void (AL_APIENTRY *LPALSOURCEFV)( ALuint sid, ALenum param, const ALfloat* values ); +typedef void (AL_APIENTRY *LPALSOURCEI)( ALuint sid, ALenum param, ALint value); +typedef void (AL_APIENTRY *LPALSOURCE3I)( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 ); +typedef void (AL_APIENTRY *LPALSOURCEIV)( ALuint sid, ALenum param, const ALint* values ); +typedef void (AL_APIENTRY *LPALGETSOURCEF)( ALuint sid, ALenum param, ALfloat* value ); +typedef void (AL_APIENTRY *LPALGETSOURCE3F)( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); +typedef void (AL_APIENTRY *LPALGETSOURCEFV)( ALuint sid, ALenum param, ALfloat* values ); +typedef void (AL_APIENTRY *LPALGETSOURCEI)( ALuint sid, ALenum param, ALint* value ); +typedef void (AL_APIENTRY *LPALGETSOURCE3I)( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3); +typedef void (AL_APIENTRY *LPALGETSOURCEIV)( ALuint sid, ALenum param, ALint* values ); +typedef void (AL_APIENTRY *LPALSOURCEPLAYV)( ALsizei ns, const ALuint *sids ); +typedef void (AL_APIENTRY *LPALSOURCESTOPV)( ALsizei ns, const ALuint *sids ); +typedef void (AL_APIENTRY *LPALSOURCEREWINDV)( ALsizei ns, const ALuint *sids ); +typedef void (AL_APIENTRY *LPALSOURCEPAUSEV)( ALsizei ns, const ALuint *sids ); +typedef void (AL_APIENTRY *LPALSOURCEPLAY)( ALuint sid ); +typedef void (AL_APIENTRY *LPALSOURCESTOP)( ALuint sid ); +typedef void (AL_APIENTRY *LPALSOURCEREWIND)( ALuint sid ); +typedef void (AL_APIENTRY *LPALSOURCEPAUSE)( ALuint sid ); +typedef void (AL_APIENTRY *LPALSOURCEQUEUEBUFFERS)(ALuint sid, ALsizei numEntries, const ALuint *bids ); +typedef void (AL_APIENTRY *LPALSOURCEUNQUEUEBUFFERS)(ALuint sid, ALsizei numEntries, ALuint *bids ); +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 bid ); +typedef void (AL_APIENTRY *LPALBUFFERDATA)( ALuint bid, ALenum format, const ALvoid* data, ALsizei size, ALsizei freq ); +typedef void (AL_APIENTRY *LPALBUFFERF)( ALuint bid, ALenum param, ALfloat value); +typedef void (AL_APIENTRY *LPALBUFFER3F)( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); +typedef void (AL_APIENTRY *LPALBUFFERFV)( ALuint bid, ALenum param, const ALfloat* values ); +typedef void (AL_APIENTRY *LPALBUFFERI)( ALuint bid, ALenum param, ALint value); +typedef void (AL_APIENTRY *LPALBUFFER3I)( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 ); +typedef void (AL_APIENTRY *LPALBUFFERIV)( ALuint bid, ALenum param, const ALint* values ); +typedef void (AL_APIENTRY *LPALGETBUFFERF)( ALuint bid, ALenum param, ALfloat* value ); +typedef void (AL_APIENTRY *LPALGETBUFFER3F)( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); +typedef void (AL_APIENTRY *LPALGETBUFFERFV)( ALuint bid, ALenum param, ALfloat* values ); +typedef void (AL_APIENTRY *LPALGETBUFFERI)( ALuint bid, ALenum param, ALint* value ); +typedef void (AL_APIENTRY *LPALGETBUFFER3I)( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3); +typedef void (AL_APIENTRY *LPALGETBUFFERIV)( ALuint bid, 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 ); + +#endif /* AL_NO_PROTOTYPES */ + +#if TARGET_OS_MAC + #pragma export off +#endif + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#endif /* AL_AL_H */ diff --git a/Externals/OpenAL/include/alc.h b/Externals/OpenAL/include/alc.h new file mode 100644 index 0000000000..b0bbfbe7de --- /dev/null +++ b/Externals/OpenAL/include/alc.h @@ -0,0 +1,281 @@ +#ifndef AL_ALC_H +#define AL_ALC_H + +#if defined(__cplusplus) +extern "C" { +#endif + +#if defined(_WIN32) && !defined(_XBOX) + /* _OPENAL32LIB is deprecated */ + #if defined(AL_BUILD_LIBRARY) || defined (_OPENAL32LIB) + #define ALC_API __declspec(dllexport) + #else + #define ALC_API __declspec(dllimport) + #endif +#else + #if defined(AL_BUILD_LIBRARY) && defined(HAVE_GCC_VISIBILITY) + #define ALC_API __attribute__((visibility("default"))) + #else + #define ALC_API extern + #endif +#endif + +#if defined(_WIN32) + #define ALC_APIENTRY __cdecl +#else + #define ALC_APIENTRY +#endif + +#if defined(TARGET_OS_MAC) && TARGET_OS_MAC + #pragma export on +#endif + +/* + * The ALCAPI, ALCAPIENTRY, and ALC_INVALID macros are deprecated, but are + * included for applications porting code from AL 1.0 + */ +#define ALCAPI ALC_API +#define ALCAPIENTRY ALC_APIENTRY +#define ALC_INVALID 0 + + +#define ALC_VERSION_0_1 1 + +typedef struct ALCdevice_struct ALCdevice; +typedef struct ALCcontext_struct ALCcontext; + + +/** 8-bit boolean */ +typedef char ALCboolean; + +/** character */ +typedef char ALCchar; + +/** signed 8-bit 2's complement integer */ +typedef 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 + +/** + * followed by Hz + */ +#define ALC_FREQUENCY 0x1007 + +/** + * followed by Hz + */ +#define ALC_REFRESH 0x1008 + +/** + * followed by AL_TRUE, AL_FALSE + */ +#define ALC_SYNC 0x1009 + +/** + * followed by Num of requested Mono (3D) Sources + */ +#define ALC_MONO_SOURCES 0x1010 + +/** + * followed by Num of requested Stereo Sources + */ +#define ALC_STEREO_SOURCES 0x1011 + +/** + * errors + */ + +/** + * No error + */ +#define ALC_NO_ERROR ALC_FALSE + +/** + * No device + */ +#define ALC_INVALID_DEVICE 0xA001 + +/** + * invalid context ID + */ +#define ALC_INVALID_CONTEXT 0xA002 + +/** + * bad enum + */ +#define ALC_INVALID_ENUM 0xA003 + +/** + * bad value + */ +#define ALC_INVALID_VALUE 0xA004 + +/** + * Out of memory. + */ +#define ALC_OUT_OF_MEMORY 0xA005 + + +/** + * The Specifier string for default device + */ +#define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004 +#define ALC_DEVICE_SPECIFIER 0x1005 +#define ALC_EXTENSIONS 0x1006 + +#define ALC_MAJOR_VERSION 0x1000 +#define ALC_MINOR_VERSION 0x1001 + +#define ALC_ATTRIBUTES_SIZE 0x1002 +#define ALC_ALL_ATTRIBUTES 0x1003 + +/** + * ALC_ENUMERATE_ALL_EXT enums + */ +#define ALC_DEFAULT_ALL_DEVICES_SPECIFIER 0x1012 +#define ALC_ALL_DEVICES_SPECIFIER 0x1013 + +/** + * Capture extension + */ +#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310 +#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311 +#define ALC_CAPTURE_SAMPLES 0x312 + + +/* + * 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 Context 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 functions + */ +ALC_API const ALCchar * ALC_APIENTRY alcGetString( ALCdevice *device, ALCenum param ); + +ALC_API void ALC_APIENTRY alcGetIntegerv( ALCdevice *device, ALCenum param, ALCsizei size, ALCint *data ); + + +/* + * Capture functions + */ +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 types, 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 *dest ); +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(TARGET_OS_MAC) && TARGET_OS_MAC + #pragma export off +#endif + +#if defined(__cplusplus) +} +#endif + +#endif /* AL_ALC_H */ diff --git a/Externals/OpenAL/include/efx-creative.h b/Externals/OpenAL/include/efx-creative.h new file mode 100644 index 0000000000..4ea9da6b72 --- /dev/null +++ b/Externals/OpenAL/include/efx-creative.h @@ -0,0 +1,151 @@ +#ifndef __efxcreative_h_ +#define __efxcreative_h_ + +/** + * efx-creative.h - Environmental Audio Extensions + * for OpenAL Effects Extension. + * + */ +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * Effect object definitions to be used with alEffect functions. + * + * Effect parameter value definitions, ranges, and defaults + * appear farther down in this file. + */ + +/* AL EAXReverb 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 + +/* Effect type definitions to be used with AL_EFFECT_TYPE. */ +#define AL_EFFECT_EAXREVERB 0x8000 + + + + /********************************************************** + * Effect parameter structures, value definitions, ranges and defaults. + */ + +/** + * AL reverb effect parameter ranges and defaults + */ +#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 {0.0f, 0.0f, 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 {0.0f, 0.0f, 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 + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __efxcreative_h_ */ diff --git a/Externals/OpenAL/include/efx.h b/Externals/OpenAL/include/efx.h new file mode 100644 index 0000000000..fece1608de --- /dev/null +++ b/Externals/OpenAL/include/efx.h @@ -0,0 +1,737 @@ +#ifndef __efx_h_ +#define __efx_h_ + + +#ifdef __cplusplus +extern "C" { +#endif + +#define ALC_EXT_EFX_NAME "ALC_EXT_EFX" + +/** + * Context definitions to be used with alcCreateContext. + * These values must be unique and not conflict with other + * al context values. + */ +#define ALC_EFX_MAJOR_VERSION 0x20001 +#define ALC_EFX_MINOR_VERSION 0x20002 +#define ALC_MAX_AUXILIARY_SENDS 0x20003 + + + + +/** + * Listener definitions to be used with alListener functions. + * These values must be unique and not conflict with other + * al listener values. + */ +#define AL_METERS_PER_UNIT 0x20004 + + + + +/** + * Source definitions to be used with alSource functions. + * These values must be unique and not conflict with other + * al source values. + */ +#define AL_DIRECT_FILTER 0x20005 +#define AL_AUXILIARY_SEND_FILTER 0x20006 +#define AL_AIR_ABSORPTION_FACTOR 0x20007 +#define AL_ROOM_ROLLOFF_FACTOR 0x20008 +#define AL_CONE_OUTER_GAINHF 0x20009 +#define AL_DIRECT_FILTER_GAINHF_AUTO 0x2000A +#define AL_AUXILIARY_SEND_FILTER_GAIN_AUTO 0x2000B +#define AL_AUXILIARY_SEND_FILTER_GAINHF_AUTO 0x2000C + + + + +/** + * Effect object definitions to be used with alEffect functions. + * + * Effect parameter value definitions, ranges, and defaults + * appear farther down in this file. + */ + +/* Reverb Parameters */ +#define AL_REVERB_DENSITY 0x0001 +#define AL_REVERB_DIFFUSION 0x0002 +#define AL_REVERB_GAIN 0x0003 +#define AL_REVERB_GAINHF 0x0004 +#define AL_REVERB_DECAY_TIME 0x0005 +#define AL_REVERB_DECAY_HFRATIO 0x0006 +#define AL_REVERB_REFLECTIONS_GAIN 0x0007 +#define AL_REVERB_REFLECTIONS_DELAY 0x0008 +#define AL_REVERB_LATE_REVERB_GAIN 0x0009 +#define AL_REVERB_LATE_REVERB_DELAY 0x000A +#define AL_REVERB_AIR_ABSORPTION_GAINHF 0x000B +#define AL_REVERB_ROOM_ROLLOFF_FACTOR 0x000C +#define AL_REVERB_DECAY_HFLIMIT 0x000D + +/* Chorus Parameters */ +#define AL_CHORUS_WAVEFORM 0x0001 +#define AL_CHORUS_PHASE 0x0002 +#define AL_CHORUS_RATE 0x0003 +#define AL_CHORUS_DEPTH 0x0004 +#define AL_CHORUS_FEEDBACK 0x0005 +#define AL_CHORUS_DELAY 0x0006 + +/* Distortion Parameters */ +#define AL_DISTORTION_EDGE 0x0001 +#define AL_DISTORTION_GAIN 0x0002 +#define AL_DISTORTION_LOWPASS_CUTOFF 0x0003 +#define AL_DISTORTION_EQCENTER 0x0004 +#define AL_DISTORTION_EQBANDWIDTH 0x0005 + +/* Echo Parameters */ +#define AL_ECHO_DELAY 0x0001 +#define AL_ECHO_LRDELAY 0x0002 +#define AL_ECHO_DAMPING 0x0003 +#define AL_ECHO_FEEDBACK 0x0004 +#define AL_ECHO_SPREAD 0x0005 + +/* Flanger Parameters */ +#define AL_FLANGER_WAVEFORM 0x0001 +#define AL_FLANGER_PHASE 0x0002 +#define AL_FLANGER_RATE 0x0003 +#define AL_FLANGER_DEPTH 0x0004 +#define AL_FLANGER_FEEDBACK 0x0005 +#define AL_FLANGER_DELAY 0x0006 + +/* Frequencyshifter Parameters */ +#define AL_FREQUENCY_SHIFTER_FREQUENCY 0x0001 +#define AL_FREQUENCY_SHIFTER_LEFT_DIRECTION 0x0002 +#define AL_FREQUENCY_SHIFTER_RIGHT_DIRECTION 0x0003 + +/* Vocalmorpher Parameters */ +#define AL_VOCAL_MORPHER_PHONEMEA 0x0001 +#define AL_VOCAL_MORPHER_PHONEMEA_COARSE_TUNING 0x0002 +#define AL_VOCAL_MORPHER_PHONEMEB 0x0003 +#define AL_VOCAL_MORPHER_PHONEMEB_COARSE_TUNING 0x0004 +#define AL_VOCAL_MORPHER_WAVEFORM 0x0005 +#define AL_VOCAL_MORPHER_RATE 0x0006 + +/* Pitchshifter Parameters */ +#define AL_PITCH_SHIFTER_COARSE_TUNE 0x0001 +#define AL_PITCH_SHIFTER_FINE_TUNE 0x0002 + +/* Ringmodulator Parameters */ +#define AL_RING_MODULATOR_FREQUENCY 0x0001 +#define AL_RING_MODULATOR_HIGHPASS_CUTOFF 0x0002 +#define AL_RING_MODULATOR_WAVEFORM 0x0003 + +/* Autowah Parameters */ +#define AL_AUTOWAH_ATTACK_TIME 0x0001 +#define AL_AUTOWAH_RELEASE_TIME 0x0002 +#define AL_AUTOWAH_RESONANCE 0x0003 +#define AL_AUTOWAH_PEAK_GAIN 0x0004 + +/* Compressor Parameters */ +#define AL_COMPRESSOR_ONOFF 0x0001 + +/* Equalizer Parameters */ +#define AL_EQUALIZER_LOW_GAIN 0x0001 +#define AL_EQUALIZER_LOW_CUTOFF 0x0002 +#define AL_EQUALIZER_MID1_GAIN 0x0003 +#define AL_EQUALIZER_MID1_CENTER 0x0004 +#define AL_EQUALIZER_MID1_WIDTH 0x0005 +#define AL_EQUALIZER_MID2_GAIN 0x0006 +#define AL_EQUALIZER_MID2_CENTER 0x0007 +#define AL_EQUALIZER_MID2_WIDTH 0x0008 +#define AL_EQUALIZER_HIGH_GAIN 0x0009 +#define AL_EQUALIZER_HIGH_CUTOFF 0x000A + +/* Effect type */ +#define AL_EFFECT_FIRST_PARAMETER 0x0000 +#define AL_EFFECT_LAST_PARAMETER 0x8000 +#define AL_EFFECT_TYPE 0x8001 + +/* Effect type definitions to be used with AL_EFFECT_TYPE. */ +#define AL_EFFECT_NULL 0x0000 /* Can also be used as an Effect Object ID */ +#define AL_EFFECT_REVERB 0x0001 +#define AL_EFFECT_CHORUS 0x0002 +#define AL_EFFECT_DISTORTION 0x0003 +#define AL_EFFECT_ECHO 0x0004 +#define AL_EFFECT_FLANGER 0x0005 +#define AL_EFFECT_FREQUENCY_SHIFTER 0x0006 +#define AL_EFFECT_VOCAL_MORPHER 0x0007 +#define AL_EFFECT_PITCH_SHIFTER 0x0008 +#define AL_EFFECT_RING_MODULATOR 0x0009 +#define AL_EFFECT_AUTOWAH 0x000A +#define AL_EFFECT_COMPRESSOR 0x000B +#define AL_EFFECT_EQUALIZER 0x000C + +/** + * Auxiliary Slot object definitions to be used with alAuxiliaryEffectSlot functions. + */ +#define AL_EFFECTSLOT_EFFECT 0x0001 +#define AL_EFFECTSLOT_GAIN 0x0002 +#define AL_EFFECTSLOT_AUXILIARY_SEND_AUTO 0x0003 + +/** + * Value to be used as an Auxiliary Slot ID to disable a source send.. + */ +#define AL_EFFECTSLOT_NULL 0x0000 + + + +/** + * Filter object definitions to be used with alFilter functions. + */ + +/* Lowpass parameters. */ +#define AL_LOWPASS_GAIN 0x0001 +#define AL_LOWPASS_GAINHF 0x0002 + +/* Highpass Parameters */ +#define AL_HIGHPASS_GAIN 0x0001 +#define AL_HIGHPASS_GAINLF 0x0002 + +/* Bandpass Parameters */ +#define AL_BANDPASS_GAIN 0x0001 +#define AL_BANDPASS_GAINLF 0x0002 +#define AL_BANDPASS_GAINHF 0x0003 + +/* Filter type */ +#define AL_FILTER_FIRST_PARAMETER 0x0000 +#define AL_FILTER_LAST_PARAMETER 0x8000 +#define AL_FILTER_TYPE 0x8001 + +/* Filter type definitions to be used with AL_FILTER_TYPE. */ +#define AL_FILTER_NULL 0x0000 /* Can also be used as a Filter Object ID */ +#define AL_FILTER_LOWPASS 0x0001 +#define AL_FILTER_HIGHPASS 0x0002 +#define AL_FILTER_BANDPASS 0x0003 + + +/** + * Effect object functions. + */ + +/* Create Effect objects. */ +typedef void (__cdecl *LPALGENEFFECTS)( ALsizei n, ALuint* effects ); + +/* Delete Effect objects. */ +typedef void (__cdecl *LPALDELETEEFFECTS)( ALsizei n, ALuint* effects ); + +/* Verify a handle is a valid Effect. */ +typedef ALboolean (__cdecl *LPALISEFFECT)( ALuint eid ); + +/* Set an integer parameter for an Effect object. */ +typedef void (__cdecl *LPALEFFECTI)( ALuint eid, ALenum param, ALint value); +typedef void (__cdecl *LPALEFFECTIV)( ALuint eid, ALenum param, ALint* values ); + +/* Set a floating point parameter for an Effect object. */ +typedef void (__cdecl *LPALEFFECTF)( ALuint eid, ALenum param, ALfloat value); +typedef void (__cdecl *LPALEFFECTFV)( ALuint eid, ALenum param, ALfloat* values ); + +/* Get an integer parameter for an Effect object. */ +typedef void (__cdecl *LPALGETEFFECTI)( ALuint eid, ALenum pname, ALint* value ); +typedef void (__cdecl *LPALGETEFFECTIV)( ALuint eid, ALenum pname, ALint* values ); + +/* Get a floating point parameter for an Effect object. */ +typedef void (__cdecl *LPALGETEFFECTF)( ALuint eid, ALenum pname, ALfloat* value ); +typedef void (__cdecl *LPALGETEFFECTFV)( ALuint eid, ALenum pname, ALfloat* values ); + + +/** + * Filter object functions + */ + +/* Create Filter objects. */ +typedef void (__cdecl *LPALGENFILTERS)( ALsizei n, ALuint* filters ); + +/* Delete Filter objects. */ +typedef void (__cdecl *LPALDELETEFILTERS)( ALsizei n, ALuint* filters ); + +/* Verify a handle is a valid Filter. */ +typedef ALboolean (__cdecl *LPALISFILTER)( ALuint fid ); + +/* Set an integer parameter for a Filter object. */ +typedef void (__cdecl *LPALFILTERI)( ALuint fid, ALenum param, ALint value ); +typedef void (__cdecl *LPALFILTERIV)( ALuint fid, ALenum param, ALint* values ); + +/* Set a floating point parameter for an Filter object. */ +typedef void (__cdecl *LPALFILTERF)( ALuint fid, ALenum param, ALfloat value); +typedef void (__cdecl *LPALFILTERFV)( ALuint fid, ALenum param, ALfloat* values ); + +/* Get an integer parameter for a Filter object. */ +typedef void (__cdecl *LPALGETFILTERI)( ALuint fid, ALenum pname, ALint* value ); +typedef void (__cdecl *LPALGETFILTERIV)( ALuint fid, ALenum pname, ALint* values ); + +/* Get a floating point parameter for a Filter object. */ +typedef void (__cdecl *LPALGETFILTERF)( ALuint fid, ALenum pname, ALfloat* value ); +typedef void (__cdecl *LPALGETFILTERFV)( ALuint fid, ALenum pname, ALfloat* values ); + + +/** + * Auxiliary Slot object functions + */ + +/* Create Auxiliary Slot objects. */ +typedef void (__cdecl *LPALGENAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots ); + +/* Delete Auxiliary Slot objects. */ +typedef void (__cdecl *LPALDELETEAUXILIARYEFFECTSLOTS)( ALsizei n, ALuint* slots ); + +/* Verify a handle is a valid Auxiliary Slot. */ +typedef ALboolean (__cdecl *LPALISAUXILIARYEFFECTSLOT)( ALuint slot ); + +/* Set an integer parameter for a Auxiliary Slot object. */ +typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum param, ALint value ); +typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTIV)( ALuint asid, ALenum param, ALint* values ); + +/* Set a floating point parameter for an Auxiliary Slot object. */ +typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum param, ALfloat value ); +typedef void (__cdecl *LPALAUXILIARYEFFECTSLOTFV)( ALuint asid, ALenum param, ALfloat* values ); + +/* Get an integer parameter for a Auxiliary Slot object. */ +typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTI)( ALuint asid, ALenum pname, ALint* value ); +typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTIV)( ALuint asid, ALenum pname, ALint* values ); + +/* Get a floating point parameter for a Auxiliary Slot object. */ +typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTF)( ALuint asid, ALenum pname, ALfloat* value ); +typedef void (__cdecl *LPALGETAUXILIARYEFFECTSLOTFV)( ALuint asid, ALenum pname, ALfloat* values ); + + + + +/********************************************************** + * Filter ranges and defaults. + */ + +/** + * Lowpass filter + */ + +#define LOWPASS_MIN_GAIN 0.0f +#define LOWPASS_MAX_GAIN 1.0f +#define LOWPASS_DEFAULT_GAIN 1.0f + +#define LOWPASS_MIN_GAINHF 0.0f +#define LOWPASS_MAX_GAINHF 1.0f +#define LOWPASS_DEFAULT_GAINHF 1.0f + +/** + * Highpass filter + */ + +#define HIGHPASS_MIN_GAIN 0.0f +#define HIGHPASS_MAX_GAIN 1.0f +#define HIGHPASS_DEFAULT_GAIN 1.0f + +#define HIGHPASS_MIN_GAINLF 0.0f +#define HIGHPASS_MAX_GAINLF 1.0f +#define HIGHPASS_DEFAULT_GAINLF 1.0f + +/** + * Bandpass filter + */ + +#define BANDPASS_MIN_GAIN 0.0f +#define BANDPASS_MAX_GAIN 1.0f +#define BANDPASS_DEFAULT_GAIN 1.0f + +#define BANDPASS_MIN_GAINHF 0.0f +#define BANDPASS_MAX_GAINHF 1.0f +#define BANDPASS_DEFAULT_GAINHF 1.0f + +#define BANDPASS_MIN_GAINLF 0.0f +#define BANDPASS_MAX_GAINLF 1.0f +#define BANDPASS_DEFAULT_GAINLF 1.0f + + + + + /********************************************************** + * Effect parameter structures, value definitions, ranges and defaults. + */ + +/** + * AL reverb effect parameter ranges and defaults + */ +#define AL_REVERB_MIN_DENSITY 0.0f +#define AL_REVERB_MAX_DENSITY 1.0f +#define AL_REVERB_DEFAULT_DENSITY 1.0f + +#define AL_REVERB_MIN_DIFFUSION 0.0f +#define AL_REVERB_MAX_DIFFUSION 1.0f +#define AL_REVERB_DEFAULT_DIFFUSION 1.0f + +#define AL_REVERB_MIN_GAIN 0.0f +#define AL_REVERB_MAX_GAIN 1.0f +#define AL_REVERB_DEFAULT_GAIN 0.32f + +#define AL_REVERB_MIN_GAINHF 0.0f +#define AL_REVERB_MAX_GAINHF 1.0f +#define AL_REVERB_DEFAULT_GAINHF 0.89f + +#define AL_REVERB_MIN_DECAY_TIME 0.1f +#define AL_REVERB_MAX_DECAY_TIME 20.0f +#define AL_REVERB_DEFAULT_DECAY_TIME 1.49f + +#define AL_REVERB_MIN_DECAY_HFRATIO 0.1f +#define AL_REVERB_MAX_DECAY_HFRATIO 2.0f +#define AL_REVERB_DEFAULT_DECAY_HFRATIO 0.83f + +#define AL_REVERB_MIN_REFLECTIONS_GAIN 0.0f +#define AL_REVERB_MAX_REFLECTIONS_GAIN 3.16f +#define AL_REVERB_DEFAULT_REFLECTIONS_GAIN 0.05f + +#define AL_REVERB_MIN_REFLECTIONS_DELAY 0.0f +#define AL_REVERB_MAX_REFLECTIONS_DELAY 0.3f +#define AL_REVERB_DEFAULT_REFLECTIONS_DELAY 0.007f + +#define AL_REVERB_MIN_LATE_REVERB_GAIN 0.0f +#define AL_REVERB_MAX_LATE_REVERB_GAIN 10.0f +#define AL_REVERB_DEFAULT_LATE_REVERB_GAIN 1.26f + +#define AL_REVERB_MIN_LATE_REVERB_DELAY 0.0f +#define AL_REVERB_MAX_LATE_REVERB_DELAY 0.1f +#define AL_REVERB_DEFAULT_LATE_REVERB_DELAY 0.011f + +#define AL_REVERB_MIN_AIR_ABSORPTION_GAINHF 0.892f +#define AL_REVERB_MAX_AIR_ABSORPTION_GAINHF 1.0f +#define AL_REVERB_DEFAULT_AIR_ABSORPTION_GAINHF 0.994f + +#define AL_REVERB_MIN_ROOM_ROLLOFF_FACTOR 0.0f +#define AL_REVERB_MAX_ROOM_ROLLOFF_FACTOR 10.0f +#define AL_REVERB_DEFAULT_ROOM_ROLLOFF_FACTOR 0.0f + +#define AL_REVERB_MIN_DECAY_HFLIMIT AL_FALSE +#define AL_REVERB_MAX_DECAY_HFLIMIT AL_TRUE +#define AL_REVERB_DEFAULT_DECAY_HFLIMIT AL_TRUE + +/** + * AL chorus effect parameter ranges and defaults + */ +#define AL_CHORUS_MIN_WAVEFORM 0 +#define AL_CHORUS_MAX_WAVEFORM 1 +#define AL_CHORUS_DEFAULT_WAVEFORM 1 + +#define AL_CHORUS_WAVEFORM_SINUSOID 0 +#define AL_CHORUS_WAVEFORM_TRIANGLE 1 + +#define AL_CHORUS_MIN_PHASE (-180) +#define AL_CHORUS_MAX_PHASE 180 +#define AL_CHORUS_DEFAULT_PHASE 90 + +#define AL_CHORUS_MIN_RATE 0.0f +#define AL_CHORUS_MAX_RATE 10.0f +#define AL_CHORUS_DEFAULT_RATE 1.1f + +#define AL_CHORUS_MIN_DEPTH 0.0f +#define AL_CHORUS_MAX_DEPTH 1.0f +#define AL_CHORUS_DEFAULT_DEPTH 0.1f + +#define AL_CHORUS_MIN_FEEDBACK (-1.0f) +#define AL_CHORUS_MAX_FEEDBACK 1.0f +#define AL_CHORUS_DEFAULT_FEEDBACK 0.25f + +#define AL_CHORUS_MIN_DELAY 0.0f +#define AL_CHORUS_MAX_DELAY 0.016f +#define AL_CHORUS_DEFAULT_DELAY 0.016f + +/** + * AL distortion effect parameter ranges and defaults + */ +#define AL_DISTORTION_MIN_EDGE 0.0f +#define AL_DISTORTION_MAX_EDGE 1.0f +#define AL_DISTORTION_DEFAULT_EDGE 0.2f + +#define AL_DISTORTION_MIN_GAIN 0.01f +#define AL_DISTORTION_MAX_GAIN 1.0f +#define AL_DISTORTION_DEFAULT_GAIN 0.05f + +#define AL_DISTORTION_MIN_LOWPASS_CUTOFF 80.0f +#define AL_DISTORTION_MAX_LOWPASS_CUTOFF 24000.0f +#define AL_DISTORTION_DEFAULT_LOWPASS_CUTOFF 8000.0f + +#define AL_DISTORTION_MIN_EQCENTER 80.0f +#define AL_DISTORTION_MAX_EQCENTER 24000.0f +#define AL_DISTORTION_DEFAULT_EQCENTER 3600.0f + +#define AL_DISTORTION_MIN_EQBANDWIDTH 80.0f +#define AL_DISTORTION_MAX_EQBANDWIDTH 24000.0f +#define AL_DISTORTION_DEFAULT_EQBANDWIDTH 3600.0f + +/** + * AL echo effect parameter ranges and defaults + */ +#define AL_ECHO_MIN_DELAY 0.0f +#define AL_ECHO_MAX_DELAY 0.207f +#define AL_ECHO_DEFAULT_DELAY 0.1f + +#define AL_ECHO_MIN_LRDELAY 0.0f +#define AL_ECHO_MAX_LRDELAY 0.404f +#define AL_ECHO_DEFAULT_LRDELAY 0.1f + +#define AL_ECHO_MIN_DAMPING 0.0f +#define AL_ECHO_MAX_DAMPING 0.99f +#define AL_ECHO_DEFAULT_DAMPING 0.5f + +#define AL_ECHO_MIN_FEEDBACK 0.0f +#define AL_ECHO_MAX_FEEDBACK 1.0f +#define AL_ECHO_DEFAULT_FEEDBACK 0.5f + +#define AL_ECHO_MIN_SPREAD (-1.0f) +#define AL_ECHO_MAX_SPREAD 1.0f +#define AL_ECHO_DEFAULT_SPREAD (-1.0f) + +/** + * AL flanger effect parameter ranges and defaults + */ +#define AL_FLANGER_MIN_WAVEFORM 0 +#define AL_FLANGER_MAX_WAVEFORM 1 +#define AL_FLANGER_DEFAULT_WAVEFORM 1 + +#define AL_FLANGER_WAVEFORM_SINUSOID 0 +#define AL_FLANGER_WAVEFORM_TRIANGLE 1 + +#define AL_FLANGER_MIN_PHASE (-180) +#define AL_FLANGER_MAX_PHASE 180 +#define AL_FLANGER_DEFAULT_PHASE 0 + +#define AL_FLANGER_MIN_RATE 0.0f +#define AL_FLANGER_MAX_RATE 10.0f +#define AL_FLANGER_DEFAULT_RATE 0.27f + +#define AL_FLANGER_MIN_DEPTH 0.0f +#define AL_FLANGER_MAX_DEPTH 1.0f +#define AL_FLANGER_DEFAULT_DEPTH 1.0f + +#define AL_FLANGER_MIN_FEEDBACK (-1.0f) +#define AL_FLANGER_MAX_FEEDBACK 1.0f +#define AL_FLANGER_DEFAULT_FEEDBACK (-0.5f) + +#define AL_FLANGER_MIN_DELAY 0.0f +#define AL_FLANGER_MAX_DELAY 0.004f +#define AL_FLANGER_DEFAULT_DELAY 0.002f + +/** + * AL frequency shifter effect parameter ranges and defaults + */ +#define AL_FREQUENCY_SHIFTER_MIN_FREQUENCY 0.0f +#define AL_FREQUENCY_SHIFTER_MAX_FREQUENCY 24000.0f +#define AL_FREQUENCY_SHIFTER_DEFAULT_FREQUENCY 0.0f + +#define AL_FREQUENCY_SHIFTER_MIN_LEFT_DIRECTION 0 +#define AL_FREQUENCY_SHIFTER_MAX_LEFT_DIRECTION 2 +#define AL_FREQUENCY_SHIFTER_DEFAULT_LEFT_DIRECTION 0 + +#define AL_FREQUENCY_SHIFTER_MIN_RIGHT_DIRECTION 0 +#define AL_FREQUENCY_SHIFTER_MAX_RIGHT_DIRECTION 2 +#define AL_FREQUENCY_SHIFTER_DEFAULT_RIGHT_DIRECTION 0 + +#define AL_FREQUENCY_SHIFTER_DIRECTION_DOWN 0 +#define AL_FREQUENCY_SHIFTER_DIRECTION_UP 1 +#define AL_FREQUENCY_SHIFTER_DIRECTION_OFF 2 + +/** + * AL vocal morpher effect parameter ranges and defaults + */ +#define AL_VOCAL_MORPHER_MIN_PHONEMEA 0 +#define AL_VOCAL_MORPHER_MAX_PHONEMEA 29 +#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA 0 + +#define AL_VOCAL_MORPHER_MIN_PHONEMEA_COARSE_TUNING (-24) +#define AL_VOCAL_MORPHER_MAX_PHONEMEA_COARSE_TUNING 24 +#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA_COARSE_TUNING 0 + +#define AL_VOCAL_MORPHER_MIN_PHONEMEB 0 +#define AL_VOCAL_MORPHER_MAX_PHONEMEB 29 +#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB 10 + +#define AL_VOCAL_MORPHER_PHONEME_A 0 +#define AL_VOCAL_MORPHER_PHONEME_E 1 +#define AL_VOCAL_MORPHER_PHONEME_I 2 +#define AL_VOCAL_MORPHER_PHONEME_O 3 +#define AL_VOCAL_MORPHER_PHONEME_U 4 +#define AL_VOCAL_MORPHER_PHONEME_AA 5 +#define AL_VOCAL_MORPHER_PHONEME_AE 6 +#define AL_VOCAL_MORPHER_PHONEME_AH 7 +#define AL_VOCAL_MORPHER_PHONEME_AO 8 +#define AL_VOCAL_MORPHER_PHONEME_EH 9 +#define AL_VOCAL_MORPHER_PHONEME_ER 10 +#define AL_VOCAL_MORPHER_PHONEME_IH 11 +#define AL_VOCAL_MORPHER_PHONEME_IY 12 +#define AL_VOCAL_MORPHER_PHONEME_UH 13 +#define AL_VOCAL_MORPHER_PHONEME_UW 14 +#define AL_VOCAL_MORPHER_PHONEME_B 15 +#define AL_VOCAL_MORPHER_PHONEME_D 16 +#define AL_VOCAL_MORPHER_PHONEME_F 17 +#define AL_VOCAL_MORPHER_PHONEME_G 18 +#define AL_VOCAL_MORPHER_PHONEME_J 19 +#define AL_VOCAL_MORPHER_PHONEME_K 20 +#define AL_VOCAL_MORPHER_PHONEME_L 21 +#define AL_VOCAL_MORPHER_PHONEME_M 22 +#define AL_VOCAL_MORPHER_PHONEME_N 23 +#define AL_VOCAL_MORPHER_PHONEME_P 24 +#define AL_VOCAL_MORPHER_PHONEME_R 25 +#define AL_VOCAL_MORPHER_PHONEME_S 26 +#define AL_VOCAL_MORPHER_PHONEME_T 27 +#define AL_VOCAL_MORPHER_PHONEME_V 28 +#define AL_VOCAL_MORPHER_PHONEME_Z 29 + +#define AL_VOCAL_MORPHER_MIN_PHONEMEB_COARSE_TUNING (-24) +#define AL_VOCAL_MORPHER_MAX_PHONEMEB_COARSE_TUNING 24 +#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB_COARSE_TUNING 0 + +#define AL_VOCAL_MORPHER_MIN_WAVEFORM 0 +#define AL_VOCAL_MORPHER_MAX_WAVEFORM 2 +#define AL_VOCAL_MORPHER_DEFAULT_WAVEFORM 0 + +#define AL_VOCAL_MORPHER_WAVEFORM_SINUSOID 0 +#define AL_VOCAL_MORPHER_WAVEFORM_TRIANGLE 1 +#define AL_VOCAL_MORPHER_WAVEFORM_SAWTOOTH 2 + +#define AL_VOCAL_MORPHER_MIN_RATE 0.0f +#define AL_VOCAL_MORPHER_MAX_RATE 10.0f +#define AL_VOCAL_MORPHER_DEFAULT_RATE 1.41f + +/** + * AL pitch shifter effect parameter ranges and defaults + */ +#define AL_PITCH_SHIFTER_MIN_COARSE_TUNE (-12) +#define AL_PITCH_SHIFTER_MAX_COARSE_TUNE 12 +#define AL_PITCH_SHIFTER_DEFAULT_COARSE_TUNE 12 + +#define AL_PITCH_SHIFTER_MIN_FINE_TUNE (-50) +#define AL_PITCH_SHIFTER_MAX_FINE_TUNE 50 +#define AL_PITCH_SHIFTER_DEFAULT_FINE_TUNE 0 + +/** + * AL ring modulator effect parameter ranges and defaults + */ +#define AL_RING_MODULATOR_MIN_FREQUENCY 0.0f +#define AL_RING_MODULATOR_MAX_FREQUENCY 8000.0f +#define AL_RING_MODULATOR_DEFAULT_FREQUENCY 440.0f + +#define AL_RING_MODULATOR_MIN_HIGHPASS_CUTOFF 0.0f +#define AL_RING_MODULATOR_MAX_HIGHPASS_CUTOFF 24000.0f +#define AL_RING_MODULATOR_DEFAULT_HIGHPASS_CUTOFF 800.0f + +#define AL_RING_MODULATOR_MIN_WAVEFORM 0 +#define AL_RING_MODULATOR_MAX_WAVEFORM 2 +#define AL_RING_MODULATOR_DEFAULT_WAVEFORM 0 + +#define AL_RING_MODULATOR_SINUSOID 0 +#define AL_RING_MODULATOR_SAWTOOTH 1 +#define AL_RING_MODULATOR_SQUARE 2 + +/** + * AL autowah effect parameter ranges and defaults + */ +#define AL_AUTOWAH_MIN_ATTACK_TIME 0.0001f +#define AL_AUTOWAH_MAX_ATTACK_TIME 1.0f +#define AL_AUTOWAH_DEFAULT_ATTACK_TIME 0.06f + +#define AL_AUTOWAH_MIN_RELEASE_TIME 0.0001f +#define AL_AUTOWAH_MAX_RELEASE_TIME 1.0f +#define AL_AUTOWAH_DEFAULT_RELEASE_TIME 0.06f + +#define AL_AUTOWAH_MIN_RESONANCE 2.0f +#define AL_AUTOWAH_MAX_RESONANCE 1000.0f +#define AL_AUTOWAH_DEFAULT_RESONANCE 1000.0f + +#define AL_AUTOWAH_MIN_PEAK_GAIN 0.00003f +#define AL_AUTOWAH_MAX_PEAK_GAIN 31621.0f +#define AL_AUTOWAH_DEFAULT_PEAK_GAIN 11.22f + +/** + * AL compressor effect parameter ranges and defaults + */ +#define AL_COMPRESSOR_MIN_ONOFF 0 +#define AL_COMPRESSOR_MAX_ONOFF 1 +#define AL_COMPRESSOR_DEFAULT_ONOFF 1 + +/** + * AL equalizer effect parameter ranges and defaults + */ +#define AL_EQUALIZER_MIN_LOW_GAIN 0.126f +#define AL_EQUALIZER_MAX_LOW_GAIN 7.943f +#define AL_EQUALIZER_DEFAULT_LOW_GAIN 1.0f + +#define AL_EQUALIZER_MIN_LOW_CUTOFF 50.0f +#define AL_EQUALIZER_MAX_LOW_CUTOFF 800.0f +#define AL_EQUALIZER_DEFAULT_LOW_CUTOFF 200.0f + +#define AL_EQUALIZER_MIN_MID1_GAIN 0.126f +#define AL_EQUALIZER_MAX_MID1_GAIN 7.943f +#define AL_EQUALIZER_DEFAULT_MID1_GAIN 1.0f + +#define AL_EQUALIZER_MIN_MID1_CENTER 200.0f +#define AL_EQUALIZER_MAX_MID1_CENTER 3000.0f +#define AL_EQUALIZER_DEFAULT_MID1_CENTER 500.0f + +#define AL_EQUALIZER_MIN_MID1_WIDTH 0.01f +#define AL_EQUALIZER_MAX_MID1_WIDTH 1.0f +#define AL_EQUALIZER_DEFAULT_MID1_WIDTH 1.0f + +#define AL_EQUALIZER_MIN_MID2_GAIN 0.126f +#define AL_EQUALIZER_MAX_MID2_GAIN 7.943f +#define AL_EQUALIZER_DEFAULT_MID2_GAIN 1.0f + +#define AL_EQUALIZER_MIN_MID2_CENTER 1000.0f +#define AL_EQUALIZER_MAX_MID2_CENTER 8000.0f +#define AL_EQUALIZER_DEFAULT_MID2_CENTER 3000.0f + +#define AL_EQUALIZER_MIN_MID2_WIDTH 0.01f +#define AL_EQUALIZER_MAX_MID2_WIDTH 1.0f +#define AL_EQUALIZER_DEFAULT_MID2_WIDTH 1.0f + +#define AL_EQUALIZER_MIN_HIGH_GAIN 0.126f +#define AL_EQUALIZER_MAX_HIGH_GAIN 7.943f +#define AL_EQUALIZER_DEFAULT_HIGH_GAIN 1.0f + +#define AL_EQUALIZER_MIN_HIGH_CUTOFF 4000.0f +#define AL_EQUALIZER_MAX_HIGH_CUTOFF 16000.0f +#define AL_EQUALIZER_DEFAULT_HIGH_CUTOFF 6000.0f + + + + +/********************************************************** + * Source parameter value definitions, ranges and defaults. + */ +#define AL_MIN_AIR_ABSORPTION_FACTOR 0.0f +#define AL_MAX_AIR_ABSORPTION_FACTOR 10.0f +#define AL_DEFAULT_AIR_ABSORPTION_FACTOR 0.0f + +#define AL_MIN_ROOM_ROLLOFF_FACTOR 0.0f +#define AL_MAX_ROOM_ROLLOFF_FACTOR 10.0f +#define AL_DEFAULT_ROOM_ROLLOFF_FACTOR 0.0f + +#define AL_MIN_CONE_OUTER_GAINHF 0.0f +#define AL_MAX_CONE_OUTER_GAINHF 1.0f +#define AL_DEFAULT_CONE_OUTER_GAINHF 1.0f + +#define AL_MIN_DIRECT_FILTER_GAINHF_AUTO AL_FALSE +#define AL_MAX_DIRECT_FILTER_GAINHF_AUTO AL_TRUE +#define AL_DEFAULT_DIRECT_FILTER_GAINHF_AUTO AL_TRUE + +#define AL_MIN_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_FALSE +#define AL_MAX_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE +#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE + +#define AL_MIN_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_FALSE +#define AL_MAX_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE +#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE + + + + +/********************************************************** + * Listener parameter value definitions, ranges and defaults. + */ +#define AL_MIN_METERS_PER_UNIT FLT_MIN +#define AL_MAX_METERS_PER_UNIT FLT_MAX +#define AL_DEFAULT_METERS_PER_UNIT 1.0f + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __efx_h_ */ diff --git a/Externals/OpenAL/include/xram.h b/Externals/OpenAL/include/xram.h new file mode 100644 index 0000000000..cfff054329 --- /dev/null +++ b/Externals/OpenAL/include/xram.h @@ -0,0 +1,94 @@ +#include + +// X-RAM Function pointer definitions +typedef ALboolean (__cdecl *EAXSetBufferMode)(ALsizei n, ALuint *buffers, ALint value); +typedef ALenum (__cdecl *EAXGetBufferMode)(ALuint buffer, ALint *value); + +////////////////////////////////////////////////////////////////////////////// +// Query for X-RAM extension +// +// if (alIsExtensionPresent("EAX-RAM") == AL_TRUE) +// X-RAM Extension found +// +////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////// +// X-RAM enum names +// +// "AL_EAX_RAM_SIZE" +// "AL_EAX_RAM_FREE" +// "AL_STORAGE_AUTOMATIC" +// "AL_STORAGE_HARDWARE" +// "AL_STORAGE_ACCESSIBLE" +// +// Query enum values using alGetEnumValue, for example +// +// long lRamSizeEnum = alGetEnumValue("AL_EAX_RAM_SIZE") +// +////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////// +// Query total amount of X-RAM +// +// long lTotalSize = alGetInteger(alGetEnumValue("AL_EAX_RAM_SIZE") +// +////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////// +// Query free X-RAM available +// +// long lFreeSize = alGetInteger(alGetEnumValue("AL_EAX_RAM_FREE") +// +////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////// +// Query X-RAM Function pointers +// +// Use typedefs defined above to get the X-RAM function pointers using +// alGetProcAddress +// +// EAXSetBufferMode eaxSetBufferMode; +// EAXGetBufferMode eaxGetBufferMode; +// +// eaxSetBufferMode = (EAXSetBufferMode)alGetProcAddress("EAXSetBufferMode"); +// eaxGetBufferMode = (EAXGetBufferMode)alGetProcAddress("EAXGetBufferMode"); +// +////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////// +// Force an Open AL Buffer into X-RAM (good for non-streaming buffers) +// +// ALuint uiBuffer; +// alGenBuffers(1, &uiBuffer); +// eaxSetBufferMode(1, &uiBuffer, alGetEnumValue("AL_STORAGE_HARDWARE")); +// alBufferData(...); +// +////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////// +// Force an Open AL Buffer into 'accessible' (currently host) RAM (good for streaming buffers) +// +// ALuint uiBuffer; +// alGenBuffers(1, &uiBuffer); +// eaxSetBufferMode(1, &uiBuffer, alGetEnumValue("AL_STORAGE_ACCESSIBLE")); +// alBufferData(...); +// +////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////// +// Put an Open AL Buffer into X-RAM if memory is available, otherwise use +// host RAM. This is the default mode. +// +// ALuint uiBuffer; +// alGenBuffers(1, &uiBuffer); +// eaxSetBufferMode(1, &uiBuffer, alGetEnumValue("AL_STORAGE_AUTOMATIC")); +// alBufferData(...); +// +////////////////////////////////////////////////////////////////////////////// diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj b/Source/Core/AudioCommon/AudioCommon.vcxproj index 0c5f256c19..4bcee7559b 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcxproj +++ b/Source/Core/AudioCommon/AudioCommon.vcxproj @@ -114,7 +114,10 @@ true - + + OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win32;%(AdditionalLibraryDirectories) + @@ -123,7 +126,10 @@ true - + + OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win64;%(AdditionalLibraryDirectories) + @@ -134,7 +140,10 @@ true true - + + OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win32;%(AdditionalLibraryDirectories) + @@ -145,7 +154,10 @@ true true - + + OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win32;%(AdditionalLibraryDirectories) + @@ -156,7 +168,10 @@ true true - + + OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win64;%(AdditionalLibraryDirectories) + @@ -167,17 +182,13 @@ true true - + + OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win64;%(AdditionalLibraryDirectories) + - - true - true - true - true - true - true - + @@ -189,14 +200,7 @@ - - true - true - true - true - true - true - + diff --git a/Source/Core/Common/Src/Common.h b/Source/Core/Common/Src/Common.h index 884a1e6c16..c3cab37dd8 100644 --- a/Source/Core/Common/Src/Common.h +++ b/Source/Core/Common/Src/Common.h @@ -81,8 +81,9 @@ private: #define GC_ALIGNED16_DECL(x) __declspec(align(16)) x #define GC_ALIGNED64_DECL(x) __declspec(align(64)) x -// Since it is always around on windows +// Since they are always around on windows #define HAVE_WX 1 + #define HAVE_OPENAL 1 #define HAVE_PORTAUDIO 1 From c8c78e0aa9c7ec1ef738ca064daad5903a9e7b48 Mon Sep 17 00:00:00 2001 From: skidau Date: Mon, 7 Jan 2013 15:37:08 +1100 Subject: [PATCH 02/17] Implemented correct audio timing. Fixes issue 5493. --- Source/Core/AudioCommon/Src/OpenALStream.cpp | 21 ++++++++++++-------- Source/Core/AudioCommon/Src/OpenALStream.h | 1 - 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Source/Core/AudioCommon/Src/OpenALStream.cpp b/Source/Core/AudioCommon/Src/OpenALStream.cpp index 2abd357782..4cc64a17de 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.cpp +++ b/Source/Core/AudioCommon/Src/OpenALStream.cpp @@ -19,6 +19,8 @@ #include "aldlist.h" #include "OpenALStream.h" +#include "../../Core/Src/HW/SystemTimers.h" +#include "../../Core/Src/HW/AudioInterface.h" #if defined HAVE_OPENAL && HAVE_OPENAL @@ -158,9 +160,16 @@ void OpenALStream::SoundLoop() iBuffersFilled = 0; } - unsigned int numSamples = m_mixer->GetNumSamples(); + // num_samples_to_render in this update - depends on SystemTimers::AUDIO_DMA_PERIOD. + const u32 stereo_16_bit_size = 4; + const u32 dma_length = 32; + const u64 audio_dma_period = SystemTimers::GetTicksPerSecond() / (AudioInterface::GetAIDSampleRate() * stereo_16_bit_size / dma_length); + const u64 ais_samples_per_second = 48000 * stereo_16_bit_size; + const u64 num_samples_to_render = (audio_dma_period * ais_samples_per_second) / SystemTimers::GetTicksPerSecond(); - if (iBuffersProcessed && (numSamples >= OAL_THRESHOLD)) + unsigned int numSamples = (unsigned int)num_samples_to_render; + + if (iBuffersProcessed) { numSamples = (numSamples > OAL_MAX_SAMPLES) ? OAL_MAX_SAMPLES : numSamples; // Remove the Buffer from the Queue. (uiBuffer contains the Buffer ID for the unqueued Buffer) @@ -175,14 +184,10 @@ void OpenALStream::SoundLoop() if (iBuffersFilled == OAL_NUM_BUFFERS) alSourcePlay(uiSource); } - else if (numSamples >= OAL_THRESHOLD) + else { - ALint state = 0; - alGetSourcei(uiSource, AL_SOURCE_STATE, &state); - if (state == AL_STOPPED) - alSourcePlay(uiSource); + soundSyncEvent.Wait(); } - soundSyncEvent.Wait(); } } diff --git a/Source/Core/AudioCommon/Src/OpenALStream.h b/Source/Core/AudioCommon/Src/OpenALStream.h index 2c0d75b510..a9c1f51399 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.h +++ b/Source/Core/AudioCommon/Src/OpenALStream.h @@ -38,7 +38,6 @@ #define SFX_MAX_SOURCE 1 #define OAL_NUM_BUFFERS 16 #define OAL_MAX_SAMPLES 512 // AyuanX: Don't make it too large, as larger buffer means longer delay -#define OAL_THRESHOLD 128 // Some games are quite sensitive to delay #endif class OpenALStream: public SoundStream From 63b38be97c12e6b6f0ec39008f6b0dd06dbcf3f0 Mon Sep 17 00:00:00 2001 From: skidau Date: Wed, 9 Jan 2013 22:57:32 +1100 Subject: [PATCH 03/17] Added audio time stretching by using the SoundTouch library. --- CMakeLists.txt | 11 + Externals/SoundTouch/AAFilter.cpp | 184 ++++ Externals/SoundTouch/AAFilter.h | 91 ++ Externals/SoundTouch/BPMDetect.cpp | 370 ++++++++ Externals/SoundTouch/BPMDetect.h | 164 ++++ Externals/SoundTouch/CMakeLists.txt | 15 + Externals/SoundTouch/FIFOSampleBuffer.cpp | 274 ++++++ Externals/SoundTouch/FIFOSampleBuffer.h | 178 ++++ Externals/SoundTouch/FIFOSamplePipe.h | 234 +++++ Externals/SoundTouch/FIRFilter.cpp | 259 ++++++ Externals/SoundTouch/FIRFilter.h | 145 ++++ Externals/SoundTouch/PeakFinder.cpp | 276 ++++++ Externals/SoundTouch/PeakFinder.h | 97 +++ Externals/SoundTouch/RateTransposer.cpp | 626 ++++++++++++++ Externals/SoundTouch/RateTransposer.h | 159 ++++ Externals/SoundTouch/STTypes.h | 189 ++++ Externals/SoundTouch/SoundTouch.cpp | 501 +++++++++++ Externals/SoundTouch/SoundTouch.h | 277 ++++++ Externals/SoundTouch/SoundTouch.vcxproj | 352 ++++++++ .../SoundTouch/SoundTouch.vcxproj.filters | 60 ++ Externals/SoundTouch/TDStretch.cpp | 808 ++++++++++++++++++ Externals/SoundTouch/TDStretch.h | 268 ++++++ Externals/SoundTouch/cpu_detect.h | 62 ++ Externals/SoundTouch/cpu_detect_x86.cpp | 137 +++ Externals/SoundTouch/mmx_optimized.cpp | 317 +++++++ Externals/SoundTouch/sse_optimized.cpp | 361 ++++++++ Source/Core/AudioCommon/AudioCommon.vcxproj | 24 +- Source/Core/AudioCommon/Src/Mixer.h | 5 + Source/Core/AudioCommon/Src/OpenALStream.cpp | 79 +- Source/Core/AudioCommon/Src/OpenALStream.h | 12 +- Source/Core/Core/Src/Core.cpp | 9 +- Source/Dolphin_2010.sln | 14 + 32 files changed, 6520 insertions(+), 38 deletions(-) create mode 100644 Externals/SoundTouch/AAFilter.cpp create mode 100644 Externals/SoundTouch/AAFilter.h create mode 100644 Externals/SoundTouch/BPMDetect.cpp create mode 100644 Externals/SoundTouch/BPMDetect.h create mode 100644 Externals/SoundTouch/CMakeLists.txt create mode 100644 Externals/SoundTouch/FIFOSampleBuffer.cpp create mode 100644 Externals/SoundTouch/FIFOSampleBuffer.h create mode 100644 Externals/SoundTouch/FIFOSamplePipe.h create mode 100644 Externals/SoundTouch/FIRFilter.cpp create mode 100644 Externals/SoundTouch/FIRFilter.h create mode 100644 Externals/SoundTouch/PeakFinder.cpp create mode 100644 Externals/SoundTouch/PeakFinder.h create mode 100644 Externals/SoundTouch/RateTransposer.cpp create mode 100644 Externals/SoundTouch/RateTransposer.h create mode 100644 Externals/SoundTouch/STTypes.h create mode 100644 Externals/SoundTouch/SoundTouch.cpp create mode 100644 Externals/SoundTouch/SoundTouch.h create mode 100644 Externals/SoundTouch/SoundTouch.vcxproj create mode 100644 Externals/SoundTouch/SoundTouch.vcxproj.filters create mode 100644 Externals/SoundTouch/TDStretch.cpp create mode 100644 Externals/SoundTouch/TDStretch.h create mode 100644 Externals/SoundTouch/cpu_detect.h create mode 100644 Externals/SoundTouch/cpu_detect_x86.cpp create mode 100644 Externals/SoundTouch/mmx_optimized.cpp create mode 100644 Externals/SoundTouch/sse_optimized.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index b025de11ef..f286cb3502 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -452,6 +452,17 @@ else() include_directories(Externals/SOIL) endif() +if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + check_lib(SoundTouch SoundTouch SoundTouch.h QUIET) +endif() +if(SOUNDTOUCH_FOUND) + message("Using shared SoundTouch") +else() + message("Using static SoundTouch from Externals") + add_subdirectory(Externals/SoundTouch) + include_directories(Externals/SoundTouch) +endif() + # If zlib has already been found on a previous run of cmake don't check again # as the check seems to take a long time. if(NOT ZLIB_FOUND) diff --git a/Externals/SoundTouch/AAFilter.cpp b/Externals/SoundTouch/AAFilter.cpp new file mode 100644 index 0000000000..f099bced93 --- /dev/null +++ b/Externals/SoundTouch/AAFilter.cpp @@ -0,0 +1,184 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// FIR low-pass (anti-alias) filter with filter coefficient design routine and +/// MMX optimization. +/// +/// Anti-alias filter is used to prevent folding of high frequencies when +/// transposing the sample rate with interpolation. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2009-01-11 13:34:24 +0200 (Sun, 11 Jan 2009) $ +// File revision : $Revision: 4 $ +// +// $Id: AAFilter.cpp 45 2009-01-11 11:34:24Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include "AAFilter.h" +#include "FIRFilter.h" + +using namespace soundtouch; + +#define PI 3.141592655357989 +#define TWOPI (2 * PI) + +/***************************************************************************** + * + * Implementation of the class 'AAFilter' + * + *****************************************************************************/ + +AAFilter::AAFilter(uint len) +{ + pFIR = FIRFilter::newInstance(); + cutoffFreq = 0.5; + setLength(len); +} + + + +AAFilter::~AAFilter() +{ + delete pFIR; +} + + + +// Sets new anti-alias filter cut-off edge frequency, scaled to +// sampling frequency (nyquist frequency = 0.5). +// The filter will cut frequencies higher than the given frequency. +void AAFilter::setCutoffFreq(double newCutoffFreq) +{ + cutoffFreq = newCutoffFreq; + calculateCoeffs(); +} + + + +// Sets number of FIR filter taps +void AAFilter::setLength(uint newLength) +{ + length = newLength; + calculateCoeffs(); +} + + + +// Calculates coefficients for a low-pass FIR filter using Hamming window +void AAFilter::calculateCoeffs() +{ + uint i; + double cntTemp, temp, tempCoeff,h, w; + double fc2, wc; + double scaleCoeff, sum; + double *work; + SAMPLETYPE *coeffs; + + assert(length >= 2); + assert(length % 4 == 0); + assert(cutoffFreq >= 0); + assert(cutoffFreq <= 0.5); + + work = new double[length]; + coeffs = new SAMPLETYPE[length]; + + fc2 = 2.0 * cutoffFreq; + wc = PI * fc2; + tempCoeff = TWOPI / (double)length; + + sum = 0; + for (i = 0; i < length; i ++) + { + cntTemp = (double)i - (double)(length / 2); + + temp = cntTemp * wc; + if (temp != 0) + { + h = fc2 * sin(temp) / temp; // sinc function + } + else + { + h = 1.0; + } + w = 0.54 + 0.46 * cos(tempCoeff * cntTemp); // hamming window + + temp = w * h; + work[i] = temp; + + // calc net sum of coefficients + sum += temp; + } + + // ensure the sum of coefficients is larger than zero + assert(sum > 0); + + // ensure we've really designed a lowpass filter... + assert(work[length/2] > 0); + assert(work[length/2 + 1] > -1e-6); + assert(work[length/2 - 1] > -1e-6); + + // Calculate a scaling coefficient in such a way that the result can be + // divided by 16384 + scaleCoeff = 16384.0f / sum; + + for (i = 0; i < length; i ++) + { + // scale & round to nearest integer + temp = work[i] * scaleCoeff; + temp += (temp >= 0) ? 0.5 : -0.5; + // ensure no overfloods + assert(temp >= -32768 && temp <= 32767); + coeffs[i] = (SAMPLETYPE)temp; + } + + // Set coefficients. Use divide factor 14 => divide result by 2^14 = 16384 + pFIR->setCoefficients(coeffs, length, 14); + + delete[] work; + delete[] coeffs; +} + + +// Applies the filter to the given sequence of samples. +// Note : The amount of outputted samples is by value of 'filter length' +// smaller than the amount of input samples. +uint AAFilter::evaluate(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples, uint numChannels) const +{ + return pFIR->evaluate(dest, src, numSamples, numChannels); +} + + +uint AAFilter::getLength() const +{ + return pFIR->getLength(); +} diff --git a/Externals/SoundTouch/AAFilter.h b/Externals/SoundTouch/AAFilter.h new file mode 100644 index 0000000000..d0997570d3 --- /dev/null +++ b/Externals/SoundTouch/AAFilter.h @@ -0,0 +1,91 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// Sampled sound tempo changer/time stretch algorithm. Changes the sound tempo +/// while maintaining the original pitch by using a time domain WSOLA-like method +/// with several performance-increasing tweaks. +/// +/// Anti-alias filter is used to prevent folding of high frequencies when +/// transposing the sample rate with interpolation. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2008-02-10 18:26:55 +0200 (Sun, 10 Feb 2008) $ +// File revision : $Revision: 4 $ +// +// $Id: AAFilter.h 11 2008-02-10 16:26:55Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef AAFilter_H +#define AAFilter_H + +#include "STTypes.h" + +namespace soundtouch +{ + +class AAFilter +{ +protected: + class FIRFilter *pFIR; + + /// Low-pass filter cut-off frequency, negative = invalid + double cutoffFreq; + + /// num of filter taps + uint length; + + /// Calculate the FIR coefficients realizing the given cutoff-frequency + void calculateCoeffs(); +public: + AAFilter(uint length); + + ~AAFilter(); + + /// Sets new anti-alias filter cut-off edge frequency, scaled to sampling + /// frequency (nyquist frequency = 0.5). The filter will cut off the + /// frequencies than that. + void setCutoffFreq(double newCutoffFreq); + + /// Sets number of FIR filter taps, i.e. ~filter complexity + void setLength(uint newLength); + + uint getLength() const; + + /// Applies the filter to the given sequence of samples. + /// Note : The amount of outputted samples is by value of 'filter length' + /// smaller than the amount of input samples. + uint evaluate(SAMPLETYPE *dest, + const SAMPLETYPE *src, + uint numSamples, + uint numChannels) const; +}; + +} + +#endif diff --git a/Externals/SoundTouch/BPMDetect.cpp b/Externals/SoundTouch/BPMDetect.cpp new file mode 100644 index 0000000000..a48cbd97c3 --- /dev/null +++ b/Externals/SoundTouch/BPMDetect.cpp @@ -0,0 +1,370 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// Beats-per-minute (BPM) detection routine. +/// +/// The beat detection algorithm works as follows: +/// - Use function 'inputSamples' to input a chunks of samples to the class for +/// analysis. It's a good idea to enter a large sound file or stream in smallish +/// chunks of around few kilosamples in order not to extinguish too much RAM memory. +/// - Inputted sound data is decimated to approx 500 Hz to reduce calculation burden, +/// which is basically ok as low (bass) frequencies mostly determine the beat rate. +/// Simple averaging is used for anti-alias filtering because the resulting signal +/// quality isn't of that high importance. +/// - Decimated sound data is enveloped, i.e. the amplitude shape is detected by +/// taking absolute value that's smoothed by sliding average. Signal levels that +/// are below a couple of times the general RMS amplitude level are cut away to +/// leave only notable peaks there. +/// - Repeating sound patterns (e.g. beats) are detected by calculating short-term +/// autocorrelation function of the enveloped signal. +/// - After whole sound data file has been analyzed as above, the bpm level is +/// detected by function 'getBpm' that finds the highest peak of the autocorrelation +/// function, calculates it's precise location and converts this reading to bpm's. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-08-30 22:45:25 +0300 (Thu, 30 Aug 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: BPMDetect.cpp 149 2012-08-30 19:45:25Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include "FIFOSampleBuffer.h" +#include "PeakFinder.h" +#include "BPMDetect.h" + +using namespace soundtouch; + +#define INPUT_BLOCK_SAMPLES 2048 +#define DECIMATED_BLOCK_SAMPLES 256 + +/// decay constant for calculating RMS volume sliding average approximation +/// (time constant is about 10 sec) +const float avgdecay = 0.99986f; + +/// Normalization coefficient for calculating RMS sliding average approximation. +const float avgnorm = (1 - avgdecay); + + +//////////////////////////////////////////////////////////////////////////////// + +// Enable following define to create bpm analysis file: + +// #define _CREATE_BPM_DEBUG_FILE + +#ifdef _CREATE_BPM_DEBUG_FILE + + #define DEBUGFILE_NAME "c:\\temp\\soundtouch-bpm-debug.txt" + + static void _SaveDebugData(const float *data, int minpos, int maxpos, double coeff) + { + FILE *fptr = fopen(DEBUGFILE_NAME, "wt"); + int i; + + if (fptr) + { + printf("\n\nWriting BPM debug data into file " DEBUGFILE_NAME "\n\n"); + for (i = minpos; i < maxpos; i ++) + { + fprintf(fptr, "%d\t%.1lf\t%f\n", i, coeff / (double)i, data[i]); + } + fclose(fptr); + } + } +#else + #define _SaveDebugData(a,b,c,d) +#endif + +//////////////////////////////////////////////////////////////////////////////// + + +BPMDetect::BPMDetect(int numChannels, int aSampleRate) +{ + this->sampleRate = aSampleRate; + this->channels = numChannels; + + decimateSum = 0; + decimateCount = 0; + + envelopeAccu = 0; + + // Initialize RMS volume accumulator to RMS level of 1500 (out of 32768) that's + // safe initial RMS signal level value for song data. This value is then adapted + // to the actual level during processing. +#ifdef SOUNDTOUCH_INTEGER_SAMPLES + // integer samples + RMSVolumeAccu = (1500 * 1500) / avgnorm; +#else + // float samples, scaled to range [-1..+1[ + RMSVolumeAccu = (0.045f * 0.045f) / avgnorm; +#endif + + // choose decimation factor so that result is approx. 1000 Hz + decimateBy = sampleRate / 1000; + assert(decimateBy > 0); + assert(INPUT_BLOCK_SAMPLES < decimateBy * DECIMATED_BLOCK_SAMPLES); + + // Calculate window length & starting item according to desired min & max bpms + windowLen = (60 * sampleRate) / (decimateBy * MIN_BPM); + windowStart = (60 * sampleRate) / (decimateBy * MAX_BPM); + + assert(windowLen > windowStart); + + // allocate new working objects + xcorr = new float[windowLen]; + memset(xcorr, 0, windowLen * sizeof(float)); + + // allocate processing buffer + buffer = new FIFOSampleBuffer(); + // we do processing in mono mode + buffer->setChannels(1); + buffer->clear(); +} + + + +BPMDetect::~BPMDetect() +{ + delete[] xcorr; + delete buffer; +} + + + +/// convert to mono, low-pass filter & decimate to about 500 Hz. +/// return number of outputted samples. +/// +/// Decimation is used to remove the unnecessary frequencies and thus to reduce +/// the amount of data needed to be processed as calculating autocorrelation +/// function is a very-very heavy operation. +/// +/// Anti-alias filtering is done simply by averaging the samples. This is really a +/// poor-man's anti-alias filtering, but it's not so critical in this kind of application +/// (it'd also be difficult to design a high-quality filter with steep cut-off at very +/// narrow band) +int BPMDetect::decimate(SAMPLETYPE *dest, const SAMPLETYPE *src, int numsamples) +{ + int count, outcount; + LONG_SAMPLETYPE out; + + assert(channels > 0); + assert(decimateBy > 0); + outcount = 0; + for (count = 0; count < numsamples; count ++) + { + int j; + + // convert to mono and accumulate + for (j = 0; j < channels; j ++) + { + decimateSum += src[j]; + } + src += j; + + decimateCount ++; + if (decimateCount >= decimateBy) + { + // Store every Nth sample only + out = (LONG_SAMPLETYPE)(decimateSum / (decimateBy * channels)); + decimateSum = 0; + decimateCount = 0; +#ifdef SOUNDTOUCH_INTEGER_SAMPLES + // check ranges for sure (shouldn't actually be necessary) + if (out > 32767) + { + out = 32767; + } + else if (out < -32768) + { + out = -32768; + } +#endif // SOUNDTOUCH_INTEGER_SAMPLES + dest[outcount] = (SAMPLETYPE)out; + outcount ++; + } + } + return outcount; +} + + + +// Calculates autocorrelation function of the sample history buffer +void BPMDetect::updateXCorr(int process_samples) +{ + int offs; + SAMPLETYPE *pBuffer; + + assert(buffer->numSamples() >= (uint)(process_samples + windowLen)); + + pBuffer = buffer->ptrBegin(); + for (offs = windowStart; offs < windowLen; offs ++) + { + LONG_SAMPLETYPE sum; + int i; + + sum = 0; + for (i = 0; i < process_samples; i ++) + { + sum += pBuffer[i] * pBuffer[i + offs]; // scaling the sub-result shouldn't be necessary + } +// xcorr[offs] *= xcorr_decay; // decay 'xcorr' here with suitable coefficients + // if it's desired that the system adapts automatically to + // various bpms, e.g. in processing continouos music stream. + // The 'xcorr_decay' should be a value that's smaller than but + // close to one, and should also depend on 'process_samples' value. + + xcorr[offs] += (float)sum; + } +} + + +// Calculates envelope of the sample data +void BPMDetect::calcEnvelope(SAMPLETYPE *samples, int numsamples) +{ + const static double decay = 0.7f; // decay constant for smoothing the envelope + const static double norm = (1 - decay); + + int i; + LONG_SAMPLETYPE out; + double val; + + for (i = 0; i < numsamples; i ++) + { + // calc average RMS volume + RMSVolumeAccu *= avgdecay; + val = (float)fabs((float)samples[i]); + RMSVolumeAccu += val * val; + + // cut amplitudes that are below cutoff ~2 times RMS volume + // (we're interested in peak values, not the silent moments) + if (val < 0.5 * sqrt(RMSVolumeAccu * avgnorm)) + { + val = 0; + } + + // smooth amplitude envelope + envelopeAccu *= decay; + envelopeAccu += val; + out = (LONG_SAMPLETYPE)(envelopeAccu * norm); + +#ifdef SOUNDTOUCH_INTEGER_SAMPLES + // cut peaks (shouldn't be necessary though) + if (out > 32767) out = 32767; +#endif // SOUNDTOUCH_INTEGER_SAMPLES + samples[i] = (SAMPLETYPE)out; + } +} + + + +void BPMDetect::inputSamples(const SAMPLETYPE *samples, int numSamples) +{ + SAMPLETYPE decimated[DECIMATED_BLOCK_SAMPLES]; + + // iterate so that max INPUT_BLOCK_SAMPLES processed per iteration + while (numSamples > 0) + { + int block; + int decSamples; + + block = (numSamples > INPUT_BLOCK_SAMPLES) ? INPUT_BLOCK_SAMPLES : numSamples; + + // decimate. note that converts to mono at the same time + decSamples = decimate(decimated, samples, block); + samples += block * channels; + numSamples -= block; + + // envelope new samples and add them to buffer + calcEnvelope(decimated, decSamples); + buffer->putSamples(decimated, decSamples); + } + + // when the buffer has enought samples for processing... + if ((int)buffer->numSamples() > windowLen) + { + int processLength; + + // how many samples are processed + processLength = (int)buffer->numSamples() - windowLen; + + // ... calculate autocorrelations for oldest samples... + updateXCorr(processLength); + // ... and remove them from the buffer + buffer->receiveSamples(processLength); + } +} + + + +void BPMDetect::removeBias() +{ + int i; + float minval = 1e12f; // arbitrary large number + + for (i = windowStart; i < windowLen; i ++) + { + if (xcorr[i] < minval) + { + minval = xcorr[i]; + } + } + + for (i = windowStart; i < windowLen; i ++) + { + xcorr[i] -= minval; + } +} + + +float BPMDetect::getBpm() +{ + double peakPos; + double coeff; + PeakFinder peakFinder; + + coeff = 60.0 * ((double)sampleRate / (double)decimateBy); + + // save bpm debug analysis data if debug data enabled + _SaveDebugData(xcorr, windowStart, windowLen, coeff); + + // remove bias from xcorr data + removeBias(); + + // find peak position + peakPos = peakFinder.detectPeak(xcorr, windowStart, windowLen); + + assert(decimateBy != 0); + if (peakPos < 1e-9) return 0.0; // detection failed. + + // calculate BPM + return (float) (coeff / peakPos); +} diff --git a/Externals/SoundTouch/BPMDetect.h b/Externals/SoundTouch/BPMDetect.h new file mode 100644 index 0000000000..72489894bd --- /dev/null +++ b/Externals/SoundTouch/BPMDetect.h @@ -0,0 +1,164 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// Beats-per-minute (BPM) detection routine. +/// +/// The beat detection algorithm works as follows: +/// - Use function 'inputSamples' to input a chunks of samples to the class for +/// analysis. It's a good idea to enter a large sound file or stream in smallish +/// chunks of around few kilosamples in order not to extinguish too much RAM memory. +/// - Input sound data is decimated to approx 500 Hz to reduce calculation burden, +/// which is basically ok as low (bass) frequencies mostly determine the beat rate. +/// Simple averaging is used for anti-alias filtering because the resulting signal +/// quality isn't of that high importance. +/// - Decimated sound data is enveloped, i.e. the amplitude shape is detected by +/// taking absolute value that's smoothed by sliding average. Signal levels that +/// are below a couple of times the general RMS amplitude level are cut away to +/// leave only notable peaks there. +/// - Repeating sound patterns (e.g. beats) are detected by calculating short-term +/// autocorrelation function of the enveloped signal. +/// - After whole sound data file has been analyzed as above, the bpm level is +/// detected by function 'getBpm' that finds the highest peak of the autocorrelation +/// function, calculates it's precise location and converts this reading to bpm's. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-08-30 22:53:44 +0300 (Thu, 30 Aug 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: BPMDetect.h 150 2012-08-30 19:53:44Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef _BPMDetect_H_ +#define _BPMDetect_H_ + +#include "STTypes.h" +#include "FIFOSampleBuffer.h" + +namespace soundtouch +{ + +/// Minimum allowed BPM rate. Used to restrict accepted result above a reasonable limit. +#define MIN_BPM 29 + +/// Maximum allowed BPM rate. Used to restrict accepted result below a reasonable limit. +#define MAX_BPM 200 + + +/// Class for calculating BPM rate for audio data. +class BPMDetect +{ +protected: + /// Auto-correlation accumulator bins. + float *xcorr; + + /// Amplitude envelope sliding average approximation level accumulator + double envelopeAccu; + + /// RMS volume sliding average approximation level accumulator + double RMSVolumeAccu; + + /// Sample average counter. + int decimateCount; + + /// Sample average accumulator for FIFO-like decimation. + soundtouch::LONG_SAMPLETYPE decimateSum; + + /// Decimate sound by this coefficient to reach approx. 500 Hz. + int decimateBy; + + /// Auto-correlation window length + int windowLen; + + /// Number of channels (1 = mono, 2 = stereo) + int channels; + + /// sample rate + int sampleRate; + + /// Beginning of auto-correlation window: Autocorrelation isn't being updated for + /// the first these many correlation bins. + int windowStart; + + /// FIFO-buffer for decimated processing samples. + soundtouch::FIFOSampleBuffer *buffer; + + /// Updates auto-correlation function for given number of decimated samples that + /// are read from the internal 'buffer' pipe (samples aren't removed from the pipe + /// though). + void updateXCorr(int process_samples /// How many samples are processed. + ); + + /// Decimates samples to approx. 500 Hz. + /// + /// \return Number of output samples. + int decimate(soundtouch::SAMPLETYPE *dest, ///< Destination buffer + const soundtouch::SAMPLETYPE *src, ///< Source sample buffer + int numsamples ///< Number of source samples. + ); + + /// Calculates amplitude envelope for the buffer of samples. + /// Result is output to 'samples'. + void calcEnvelope(soundtouch::SAMPLETYPE *samples, ///< Pointer to input/output data buffer + int numsamples ///< Number of samples in buffer + ); + + /// remove constant bias from xcorr data + void removeBias(); + +public: + /// Constructor. + BPMDetect(int numChannels, ///< Number of channels in sample data. + int sampleRate ///< Sample rate in Hz. + ); + + /// Destructor. + virtual ~BPMDetect(); + + /// Inputs a block of samples for analyzing: Envelopes the samples and then + /// updates the autocorrelation estimation. When whole song data has been input + /// in smaller blocks using this function, read the resulting bpm with 'getBpm' + /// function. + /// + /// Notice that data in 'samples' array can be disrupted in processing. + void inputSamples(const soundtouch::SAMPLETYPE *samples, ///< Pointer to input/working data buffer + int numSamples ///< Number of samples in buffer + ); + + + /// Analyzes the results and returns the BPM rate. Use this function to read result + /// after whole song data has been input to the class by consecutive calls of + /// 'inputSamples' function. + /// + /// \return Beats-per-minute rate, or zero if detection failed. + float getBpm(); +}; + +} + +#endif // _BPMDetect_H_ diff --git a/Externals/SoundTouch/CMakeLists.txt b/Externals/SoundTouch/CMakeLists.txt new file mode 100644 index 0000000000..a09aac1946 --- /dev/null +++ b/Externals/SoundTouch/CMakeLists.txt @@ -0,0 +1,15 @@ +set(SRCS + AAFilter.cpp + BPMDetect.cpp + cpu_detect_x86.cpp + FIFOSampleBuffer.cpp + FIRFilter.cpp + mmx_optimized.cpp + PeakFinder.cpp + RateTransposer.cpp + SoundTouch.cpp + sse_optimized.cpp + TDStretch.cpp + ) + +add_library(SoundTouch STATIC ${SRCS}) diff --git a/Externals/SoundTouch/FIFOSampleBuffer.cpp b/Externals/SoundTouch/FIFOSampleBuffer.cpp new file mode 100644 index 0000000000..7f088b80be --- /dev/null +++ b/Externals/SoundTouch/FIFOSampleBuffer.cpp @@ -0,0 +1,274 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// A buffer class for temporarily storaging sound samples, operates as a +/// first-in-first-out pipe. +/// +/// Samples are added to the end of the sample buffer with the 'putSamples' +/// function, and are received from the beginning of the buffer by calling +/// the 'receiveSamples' function. The class automatically removes the +/// outputted samples from the buffer, as well as grows the buffer size +/// whenever necessary. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-11-08 20:53:01 +0200 (Thu, 08 Nov 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: FIFOSampleBuffer.cpp 160 2012-11-08 18:53:01Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include + +#include "FIFOSampleBuffer.h" + +using namespace soundtouch; + +// Constructor +FIFOSampleBuffer::FIFOSampleBuffer(int numChannels) +{ + assert(numChannels > 0); + sizeInBytes = 0; // reasonable initial value + buffer = NULL; + bufferUnaligned = NULL; + samplesInBuffer = 0; + bufferPos = 0; + channels = (uint)numChannels; + ensureCapacity(32); // allocate initial capacity +} + + +// destructor +FIFOSampleBuffer::~FIFOSampleBuffer() +{ + delete[] bufferUnaligned; + bufferUnaligned = NULL; + buffer = NULL; +} + + +// Sets number of channels, 1 = mono, 2 = stereo +void FIFOSampleBuffer::setChannels(int numChannels) +{ + uint usedBytes; + + assert(numChannels > 0); + usedBytes = channels * samplesInBuffer; + channels = (uint)numChannels; + samplesInBuffer = usedBytes / channels; +} + + +// if output location pointer 'bufferPos' isn't zero, 'rewinds' the buffer and +// zeroes this pointer by copying samples from the 'bufferPos' pointer +// location on to the beginning of the buffer. +void FIFOSampleBuffer::rewind() +{ + if (buffer && bufferPos) + { + memmove(buffer, ptrBegin(), sizeof(SAMPLETYPE) * channels * samplesInBuffer); + bufferPos = 0; + } +} + + +// Adds 'numSamples' pcs of samples from the 'samples' memory position to +// the sample buffer. +void FIFOSampleBuffer::putSamples(const SAMPLETYPE *samples, uint nSamples) +{ + memcpy(ptrEnd(nSamples), samples, sizeof(SAMPLETYPE) * nSamples * channels); + samplesInBuffer += nSamples; +} + + +// Increases the number of samples in the buffer without copying any actual +// samples. +// +// This function is used to update the number of samples in the sample buffer +// when accessing the buffer directly with 'ptrEnd' function. Please be +// careful though! +void FIFOSampleBuffer::putSamples(uint nSamples) +{ + uint req; + + req = samplesInBuffer + nSamples; + ensureCapacity(req); + samplesInBuffer += nSamples; +} + + +// Returns a pointer to the end of the used part of the sample buffer (i.e. +// where the new samples are to be inserted). This function may be used for +// inserting new samples into the sample buffer directly. Please be careful! +// +// Parameter 'slackCapacity' tells the function how much free capacity (in +// terms of samples) there _at least_ should be, in order to the caller to +// succesfully insert all the required samples to the buffer. When necessary, +// the function grows the buffer size to comply with this requirement. +// +// When using this function as means for inserting new samples, also remember +// to increase the sample count afterwards, by calling the +// 'putSamples(numSamples)' function. +SAMPLETYPE *FIFOSampleBuffer::ptrEnd(uint slackCapacity) +{ + ensureCapacity(samplesInBuffer + slackCapacity); + return buffer + samplesInBuffer * channels; +} + + +// Returns a pointer to the beginning of the currently non-outputted samples. +// This function is provided for accessing the output samples directly. +// Please be careful! +// +// When using this function to output samples, also remember to 'remove' the +// outputted samples from the buffer by calling the +// 'receiveSamples(numSamples)' function +SAMPLETYPE *FIFOSampleBuffer::ptrBegin() +{ + assert(buffer); + return buffer + bufferPos * channels; +} + + +// Ensures that the buffer has enought capacity, i.e. space for _at least_ +// 'capacityRequirement' number of samples. The buffer is grown in steps of +// 4 kilobytes to eliminate the need for frequently growing up the buffer, +// as well as to round the buffer size up to the virtual memory page size. +void FIFOSampleBuffer::ensureCapacity(uint capacityRequirement) +{ + SAMPLETYPE *tempUnaligned, *temp; + + if (capacityRequirement > getCapacity()) + { + // enlarge the buffer in 4kbyte steps (round up to next 4k boundary) + sizeInBytes = (capacityRequirement * channels * sizeof(SAMPLETYPE) + 4095) & (uint)-4096; + assert(sizeInBytes % 2 == 0); + tempUnaligned = new SAMPLETYPE[sizeInBytes / sizeof(SAMPLETYPE) + 16 / sizeof(SAMPLETYPE)]; + if (tempUnaligned == NULL) + { + ST_THROW_RT_ERROR("Couldn't allocate memory!\n"); + } + // Align the buffer to begin at 16byte cache line boundary for optimal performance + temp = (SAMPLETYPE *)SOUNDTOUCH_ALIGN_POINTER_16(tempUnaligned); + if (samplesInBuffer) + { + memcpy(temp, ptrBegin(), samplesInBuffer * channels * sizeof(SAMPLETYPE)); + } + delete[] bufferUnaligned; + buffer = temp; + bufferUnaligned = tempUnaligned; + bufferPos = 0; + } + else + { + // simply rewind the buffer (if necessary) + rewind(); + } +} + + +// Returns the current buffer capacity in terms of samples +uint FIFOSampleBuffer::getCapacity() const +{ + return sizeInBytes / (channels * sizeof(SAMPLETYPE)); +} + + +// Returns the number of samples currently in the buffer +uint FIFOSampleBuffer::numSamples() const +{ + return samplesInBuffer; +} + + +// Output samples from beginning of the sample buffer. Copies demanded number +// of samples to output and removes them from the sample buffer. If there +// are less than 'numsample' samples in the buffer, returns all available. +// +// Returns number of samples copied. +uint FIFOSampleBuffer::receiveSamples(SAMPLETYPE *output, uint maxSamples) +{ + uint num; + + num = (maxSamples > samplesInBuffer) ? samplesInBuffer : maxSamples; + + memcpy(output, ptrBegin(), channels * sizeof(SAMPLETYPE) * num); + return receiveSamples(num); +} + + +// Removes samples from the beginning of the sample buffer without copying them +// anywhere. Used to reduce the number of samples in the buffer, when accessing +// the sample buffer with the 'ptrBegin' function. +uint FIFOSampleBuffer::receiveSamples(uint maxSamples) +{ + if (maxSamples >= samplesInBuffer) + { + uint temp; + + temp = samplesInBuffer; + samplesInBuffer = 0; + return temp; + } + + samplesInBuffer -= maxSamples; + bufferPos += maxSamples; + + return maxSamples; +} + + +// Returns nonzero if the sample buffer is empty +int FIFOSampleBuffer::isEmpty() const +{ + return (samplesInBuffer == 0) ? 1 : 0; +} + + +// Clears the sample buffer +void FIFOSampleBuffer::clear() +{ + samplesInBuffer = 0; + bufferPos = 0; +} + + +/// allow trimming (downwards) amount of samples in pipeline. +/// Returns adjusted amount of samples +uint FIFOSampleBuffer::adjustAmountOfSamples(uint numSamples) +{ + if (numSamples < samplesInBuffer) + { + samplesInBuffer = numSamples; + } + return samplesInBuffer; +} + diff --git a/Externals/SoundTouch/FIFOSampleBuffer.h b/Externals/SoundTouch/FIFOSampleBuffer.h new file mode 100644 index 0000000000..3789b4d307 --- /dev/null +++ b/Externals/SoundTouch/FIFOSampleBuffer.h @@ -0,0 +1,178 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// A buffer class for temporarily storaging sound samples, operates as a +/// first-in-first-out pipe. +/// +/// Samples are added to the end of the sample buffer with the 'putSamples' +/// function, and are received from the beginning of the buffer by calling +/// the 'receiveSamples' function. The class automatically removes the +/// output samples from the buffer as well as grows the storage size +/// whenever necessary. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-06-13 22:29:53 +0300 (Wed, 13 Jun 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: FIFOSampleBuffer.h 143 2012-06-13 19:29:53Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef FIFOSampleBuffer_H +#define FIFOSampleBuffer_H + +#include "FIFOSamplePipe.h" + +namespace soundtouch +{ + +/// Sample buffer working in FIFO (first-in-first-out) principle. The class takes +/// care of storage size adjustment and data moving during input/output operations. +/// +/// Notice that in case of stereo audio, one sample is considered to consist of +/// both channel data. +class FIFOSampleBuffer : public FIFOSamplePipe +{ +private: + /// Sample buffer. + SAMPLETYPE *buffer; + + // Raw unaligned buffer memory. 'buffer' is made aligned by pointing it to first + // 16-byte aligned location of this buffer + SAMPLETYPE *bufferUnaligned; + + /// Sample buffer size in bytes + uint sizeInBytes; + + /// How many samples are currently in buffer. + uint samplesInBuffer; + + /// Channels, 1=mono, 2=stereo. + uint channels; + + /// Current position pointer to the buffer. This pointer is increased when samples are + /// removed from the pipe so that it's necessary to actually rewind buffer (move data) + /// only new data when is put to the pipe. + uint bufferPos; + + /// Rewind the buffer by moving data from position pointed by 'bufferPos' to real + /// beginning of the buffer. + void rewind(); + + /// Ensures that the buffer has capacity for at least this many samples. + void ensureCapacity(uint capacityRequirement); + + /// Returns current capacity. + uint getCapacity() const; + +public: + + /// Constructor + FIFOSampleBuffer(int numChannels = 2 ///< Number of channels, 1=mono, 2=stereo. + ///< Default is stereo. + ); + + /// destructor + ~FIFOSampleBuffer(); + + /// Returns a pointer to the beginning of the output samples. + /// This function is provided for accessing the output samples directly. + /// Please be careful for not to corrupt the book-keeping! + /// + /// When using this function to output samples, also remember to 'remove' the + /// output samples from the buffer by calling the + /// 'receiveSamples(numSamples)' function + virtual SAMPLETYPE *ptrBegin(); + + /// Returns a pointer to the end of the used part of the sample buffer (i.e. + /// where the new samples are to be inserted). This function may be used for + /// inserting new samples into the sample buffer directly. Please be careful + /// not corrupt the book-keeping! + /// + /// When using this function as means for inserting new samples, also remember + /// to increase the sample count afterwards, by calling the + /// 'putSamples(numSamples)' function. + SAMPLETYPE *ptrEnd( + uint slackCapacity ///< How much free capacity (in samples) there _at least_ + ///< should be so that the caller can succesfully insert the + ///< desired samples to the buffer. If necessary, the function + ///< grows the buffer size to comply with this requirement. + ); + + /// Adds 'numSamples' pcs of samples from the 'samples' memory position to + /// the sample buffer. + virtual void putSamples(const SAMPLETYPE *samples, ///< Pointer to samples. + uint numSamples ///< Number of samples to insert. + ); + + /// Adjusts the book-keeping to increase number of samples in the buffer without + /// copying any actual samples. + /// + /// This function is used to update the number of samples in the sample buffer + /// when accessing the buffer directly with 'ptrEnd' function. Please be + /// careful though! + virtual void putSamples(uint numSamples ///< Number of samples been inserted. + ); + + /// Output samples from beginning of the sample buffer. Copies requested samples to + /// output buffer and removes them from the sample buffer. If there are less than + /// 'numsample' samples in the buffer, returns all that available. + /// + /// \return Number of samples returned. + virtual uint receiveSamples(SAMPLETYPE *output, ///< Buffer where to copy output samples. + uint maxSamples ///< How many samples to receive at max. + ); + + /// Adjusts book-keeping so that given number of samples are removed from beginning of the + /// sample buffer without copying them anywhere. + /// + /// Used to reduce the number of samples in the buffer when accessing the sample buffer directly + /// with 'ptrBegin' function. + virtual uint receiveSamples(uint maxSamples ///< Remove this many samples from the beginning of pipe. + ); + + /// Returns number of samples currently available. + virtual uint numSamples() const; + + /// Sets number of channels, 1 = mono, 2 = stereo. + void setChannels(int numChannels); + + /// Returns nonzero if there aren't any samples available for outputting. + virtual int isEmpty() const; + + /// Clears all the samples. + virtual void clear(); + + /// allow trimming (downwards) amount of samples in pipeline. + /// Returns adjusted amount of samples + uint adjustAmountOfSamples(uint numSamples); +}; + +} + +#endif diff --git a/Externals/SoundTouch/FIFOSamplePipe.h b/Externals/SoundTouch/FIFOSamplePipe.h new file mode 100644 index 0000000000..f26c57b0b2 --- /dev/null +++ b/Externals/SoundTouch/FIFOSamplePipe.h @@ -0,0 +1,234 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// 'FIFOSamplePipe' : An abstract base class for classes that manipulate sound +/// samples by operating like a first-in-first-out pipe: New samples are fed +/// into one end of the pipe with the 'putSamples' function, and the processed +/// samples are received from the other end with the 'receiveSamples' function. +/// +/// 'FIFOProcessor' : A base class for classes the do signal processing with +/// the samples while operating like a first-in-first-out pipe. When samples +/// are input with the 'putSamples' function, the class processes them +/// and moves the processed samples to the given 'output' pipe object, which +/// may be either another processing stage, or a fifo sample buffer object. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-06-13 22:29:53 +0300 (Wed, 13 Jun 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: FIFOSamplePipe.h 143 2012-06-13 19:29:53Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef FIFOSamplePipe_H +#define FIFOSamplePipe_H + +#include +#include +#include "STTypes.h" + +namespace soundtouch +{ + +/// Abstract base class for FIFO (first-in-first-out) sample processing classes. +class FIFOSamplePipe +{ +public: + // virtual default destructor + virtual ~FIFOSamplePipe() {} + + + /// Returns a pointer to the beginning of the output samples. + /// This function is provided for accessing the output samples directly. + /// Please be careful for not to corrupt the book-keeping! + /// + /// When using this function to output samples, also remember to 'remove' the + /// output samples from the buffer by calling the + /// 'receiveSamples(numSamples)' function + virtual SAMPLETYPE *ptrBegin() = 0; + + /// Adds 'numSamples' pcs of samples from the 'samples' memory position to + /// the sample buffer. + virtual void putSamples(const SAMPLETYPE *samples, ///< Pointer to samples. + uint numSamples ///< Number of samples to insert. + ) = 0; + + + // Moves samples from the 'other' pipe instance to this instance. + void moveSamples(FIFOSamplePipe &other ///< Other pipe instance where from the receive the data. + ) + { + int oNumSamples = other.numSamples(); + + putSamples(other.ptrBegin(), oNumSamples); + other.receiveSamples(oNumSamples); + }; + + /// Output samples from beginning of the sample buffer. Copies requested samples to + /// output buffer and removes them from the sample buffer. If there are less than + /// 'numsample' samples in the buffer, returns all that available. + /// + /// \return Number of samples returned. + virtual uint receiveSamples(SAMPLETYPE *output, ///< Buffer where to copy output samples. + uint maxSamples ///< How many samples to receive at max. + ) = 0; + + /// Adjusts book-keeping so that given number of samples are removed from beginning of the + /// sample buffer without copying them anywhere. + /// + /// Used to reduce the number of samples in the buffer when accessing the sample buffer directly + /// with 'ptrBegin' function. + virtual uint receiveSamples(uint maxSamples ///< Remove this many samples from the beginning of pipe. + ) = 0; + + /// Returns number of samples currently available. + virtual uint numSamples() const = 0; + + // Returns nonzero if there aren't any samples available for outputting. + virtual int isEmpty() const = 0; + + /// Clears all the samples. + virtual void clear() = 0; + + /// allow trimming (downwards) amount of samples in pipeline. + /// Returns adjusted amount of samples + virtual uint adjustAmountOfSamples(uint numSamples) = 0; + +}; + + + +/// Base-class for sound processing routines working in FIFO principle. With this base +/// class it's easy to implement sound processing stages that can be chained together, +/// so that samples that are fed into beginning of the pipe automatically go through +/// all the processing stages. +/// +/// When samples are input to this class, they're first processed and then put to +/// the FIFO pipe that's defined as output of this class. This output pipe can be +/// either other processing stage or a FIFO sample buffer. +class FIFOProcessor :public FIFOSamplePipe +{ +protected: + /// Internal pipe where processed samples are put. + FIFOSamplePipe *output; + + /// Sets output pipe. + void setOutPipe(FIFOSamplePipe *pOutput) + { + assert(output == NULL); + assert(pOutput != NULL); + output = pOutput; + } + + + /// Constructor. Doesn't define output pipe; it has to be set be + /// 'setOutPipe' function. + FIFOProcessor() + { + output = NULL; + } + + + /// Constructor. Configures output pipe. + FIFOProcessor(FIFOSamplePipe *pOutput ///< Output pipe. + ) + { + output = pOutput; + } + + + /// Destructor. + virtual ~FIFOProcessor() + { + } + + + /// Returns a pointer to the beginning of the output samples. + /// This function is provided for accessing the output samples directly. + /// Please be careful for not to corrupt the book-keeping! + /// + /// When using this function to output samples, also remember to 'remove' the + /// output samples from the buffer by calling the + /// 'receiveSamples(numSamples)' function + virtual SAMPLETYPE *ptrBegin() + { + return output->ptrBegin(); + } + +public: + + /// Output samples from beginning of the sample buffer. Copies requested samples to + /// output buffer and removes them from the sample buffer. If there are less than + /// 'numsample' samples in the buffer, returns all that available. + /// + /// \return Number of samples returned. + virtual uint receiveSamples(SAMPLETYPE *outBuffer, ///< Buffer where to copy output samples. + uint maxSamples ///< How many samples to receive at max. + ) + { + return output->receiveSamples(outBuffer, maxSamples); + } + + + /// Adjusts book-keeping so that given number of samples are removed from beginning of the + /// sample buffer without copying them anywhere. + /// + /// Used to reduce the number of samples in the buffer when accessing the sample buffer directly + /// with 'ptrBegin' function. + virtual uint receiveSamples(uint maxSamples ///< Remove this many samples from the beginning of pipe. + ) + { + return output->receiveSamples(maxSamples); + } + + + /// Returns number of samples currently available. + virtual uint numSamples() const + { + return output->numSamples(); + } + + + /// Returns nonzero if there aren't any samples available for outputting. + virtual int isEmpty() const + { + return output->isEmpty(); + } + + /// allow trimming (downwards) amount of samples in pipeline. + /// Returns adjusted amount of samples + virtual uint adjustAmountOfSamples(uint numSamples) + { + return output->adjustAmountOfSamples(numSamples); + } + +}; + +} + +#endif diff --git a/Externals/SoundTouch/FIRFilter.cpp b/Externals/SoundTouch/FIRFilter.cpp new file mode 100644 index 0000000000..1570516b77 --- /dev/null +++ b/Externals/SoundTouch/FIRFilter.cpp @@ -0,0 +1,259 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// General FIR digital filter routines with MMX optimization. +/// +/// Note : MMX optimized functions reside in a separate, platform-specific file, +/// e.g. 'mmx_win.cpp' or 'mmx_gcc.cpp' +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2011-09-02 21:56:11 +0300 (Fri, 02 Sep 2011) $ +// File revision : $Revision: 4 $ +// +// $Id: FIRFilter.cpp 131 2011-09-02 18:56:11Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include "FIRFilter.h" +#include "cpu_detect.h" + +using namespace soundtouch; + +/***************************************************************************** + * + * Implementation of the class 'FIRFilter' + * + *****************************************************************************/ + +FIRFilter::FIRFilter() +{ + resultDivFactor = 0; + resultDivider = 0; + length = 0; + lengthDiv8 = 0; + filterCoeffs = NULL; +} + + +FIRFilter::~FIRFilter() +{ + delete[] filterCoeffs; +} + +// Usual C-version of the filter routine for stereo sound +uint FIRFilter::evaluateFilterStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples) const +{ + uint i, j, end; + LONG_SAMPLETYPE suml, sumr; +#ifdef SOUNDTOUCH_FLOAT_SAMPLES + // when using floating point samples, use a scaler instead of a divider + // because division is much slower operation than multiplying. + double dScaler = 1.0 / (double)resultDivider; +#endif + + assert(length != 0); + assert(src != NULL); + assert(dest != NULL); + assert(filterCoeffs != NULL); + + end = 2 * (numSamples - length); + + for (j = 0; j < end; j += 2) + { + const SAMPLETYPE *ptr; + + suml = sumr = 0; + ptr = src + j; + + for (i = 0; i < length; i += 4) + { + // loop is unrolled by factor of 4 here for efficiency + suml += ptr[2 * i + 0] * filterCoeffs[i + 0] + + ptr[2 * i + 2] * filterCoeffs[i + 1] + + ptr[2 * i + 4] * filterCoeffs[i + 2] + + ptr[2 * i + 6] * filterCoeffs[i + 3]; + sumr += ptr[2 * i + 1] * filterCoeffs[i + 0] + + ptr[2 * i + 3] * filterCoeffs[i + 1] + + ptr[2 * i + 5] * filterCoeffs[i + 2] + + ptr[2 * i + 7] * filterCoeffs[i + 3]; + } + +#ifdef SOUNDTOUCH_INTEGER_SAMPLES + suml >>= resultDivFactor; + sumr >>= resultDivFactor; + // saturate to 16 bit integer limits + suml = (suml < -32768) ? -32768 : (suml > 32767) ? 32767 : suml; + // saturate to 16 bit integer limits + sumr = (sumr < -32768) ? -32768 : (sumr > 32767) ? 32767 : sumr; +#else + suml *= dScaler; + sumr *= dScaler; +#endif // SOUNDTOUCH_INTEGER_SAMPLES + dest[j] = (SAMPLETYPE)suml; + dest[j + 1] = (SAMPLETYPE)sumr; + } + return numSamples - length; +} + + + + +// Usual C-version of the filter routine for mono sound +uint FIRFilter::evaluateFilterMono(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples) const +{ + uint i, j, end; + LONG_SAMPLETYPE sum; +#ifdef SOUNDTOUCH_FLOAT_SAMPLES + // when using floating point samples, use a scaler instead of a divider + // because division is much slower operation than multiplying. + double dScaler = 1.0 / (double)resultDivider; +#endif + + + assert(length != 0); + + end = numSamples - length; + for (j = 0; j < end; j ++) + { + sum = 0; + for (i = 0; i < length; i += 4) + { + // loop is unrolled by factor of 4 here for efficiency + sum += src[i + 0] * filterCoeffs[i + 0] + + src[i + 1] * filterCoeffs[i + 1] + + src[i + 2] * filterCoeffs[i + 2] + + src[i + 3] * filterCoeffs[i + 3]; + } +#ifdef SOUNDTOUCH_INTEGER_SAMPLES + sum >>= resultDivFactor; + // saturate to 16 bit integer limits + sum = (sum < -32768) ? -32768 : (sum > 32767) ? 32767 : sum; +#else + sum *= dScaler; +#endif // SOUNDTOUCH_INTEGER_SAMPLES + dest[j] = (SAMPLETYPE)sum; + src ++; + } + return end; +} + + +// Set filter coeffiecients and length. +// +// Throws an exception if filter length isn't divisible by 8 +void FIRFilter::setCoefficients(const SAMPLETYPE *coeffs, uint newLength, uint uResultDivFactor) +{ + assert(newLength > 0); + if (newLength % 8) ST_THROW_RT_ERROR("FIR filter length not divisible by 8"); + + lengthDiv8 = newLength / 8; + length = lengthDiv8 * 8; + assert(length == newLength); + + resultDivFactor = uResultDivFactor; + resultDivider = (SAMPLETYPE)::pow(2.0, (int)resultDivFactor); + + delete[] filterCoeffs; + filterCoeffs = new SAMPLETYPE[length]; + memcpy(filterCoeffs, coeffs, length * sizeof(SAMPLETYPE)); +} + + +uint FIRFilter::getLength() const +{ + return length; +} + + + +// Applies the filter to the given sequence of samples. +// +// Note : The amount of outputted samples is by value of 'filter_length' +// smaller than the amount of input samples. +uint FIRFilter::evaluate(SAMPLETYPE *dest, const SAMPLETYPE *src, uint numSamples, uint numChannels) const +{ + assert(numChannels == 1 || numChannels == 2); + + assert(length > 0); + assert(lengthDiv8 * 8 == length); + if (numSamples < length) return 0; + if (numChannels == 2) + { + return evaluateFilterStereo(dest, src, numSamples); + } else { + return evaluateFilterMono(dest, src, numSamples); + } +} + + + +// Operator 'new' is overloaded so that it automatically creates a suitable instance +// depending on if we've a MMX-capable CPU available or not. +void * FIRFilter::operator new(size_t s) +{ + // Notice! don't use "new FIRFilter" directly, use "newInstance" to create a new instance instead! + ST_THROW_RT_ERROR("Error in FIRFilter::new: Don't use 'new FIRFilter', use 'newInstance' member instead!"); + return newInstance(); +} + + +FIRFilter * FIRFilter::newInstance() +{ + uint uExtensions; + + uExtensions = detectCPUextensions(); + + // Check if MMX/SSE instruction set extensions supported by CPU + +#ifdef SOUNDTOUCH_ALLOW_MMX + // MMX routines available only with integer sample types + if (uExtensions & SUPPORT_MMX) + { + return ::new FIRFilterMMX; + } + else +#endif // SOUNDTOUCH_ALLOW_MMX + +#ifdef SOUNDTOUCH_ALLOW_SSE + if (uExtensions & SUPPORT_SSE) + { + // SSE support + return ::new FIRFilterSSE; + } + else +#endif // SOUNDTOUCH_ALLOW_SSE + + { + // ISA optimizations not supported, use plain C version + return ::new FIRFilter; + } +} diff --git a/Externals/SoundTouch/FIRFilter.h b/Externals/SoundTouch/FIRFilter.h new file mode 100644 index 0000000000..e1563094af --- /dev/null +++ b/Externals/SoundTouch/FIRFilter.h @@ -0,0 +1,145 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// General FIR digital filter routines with MMX optimization. +/// +/// Note : MMX optimized functions reside in a separate, platform-specific file, +/// e.g. 'mmx_win.cpp' or 'mmx_gcc.cpp' +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2011-02-13 21:13:57 +0200 (Sun, 13 Feb 2011) $ +// File revision : $Revision: 4 $ +// +// $Id: FIRFilter.h 104 2011-02-13 19:13:57Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef FIRFilter_H +#define FIRFilter_H + +#include +#include "STTypes.h" + +namespace soundtouch +{ + +class FIRFilter +{ +protected: + // Number of FIR filter taps + uint length; + // Number of FIR filter taps divided by 8 + uint lengthDiv8; + + // Result divider factor in 2^k format + uint resultDivFactor; + + // Result divider value. + SAMPLETYPE resultDivider; + + // Memory for filter coefficients + SAMPLETYPE *filterCoeffs; + + virtual uint evaluateFilterStereo(SAMPLETYPE *dest, + const SAMPLETYPE *src, + uint numSamples) const; + virtual uint evaluateFilterMono(SAMPLETYPE *dest, + const SAMPLETYPE *src, + uint numSamples) const; + +public: + FIRFilter(); + virtual ~FIRFilter(); + + /// Operator 'new' is overloaded so that it automatically creates a suitable instance + /// depending on if we've a MMX-capable CPU available or not. + static void * operator new(size_t s); + + static FIRFilter *newInstance(); + + /// Applies the filter to the given sequence of samples. + /// Note : The amount of outputted samples is by value of 'filter_length' + /// smaller than the amount of input samples. + /// + /// \return Number of samples copied to 'dest'. + uint evaluate(SAMPLETYPE *dest, + const SAMPLETYPE *src, + uint numSamples, + uint numChannels) const; + + uint getLength() const; + + virtual void setCoefficients(const SAMPLETYPE *coeffs, + uint newLength, + uint uResultDivFactor); +}; + + +// Optional subclasses that implement CPU-specific optimizations: + +#ifdef SOUNDTOUCH_ALLOW_MMX + +/// Class that implements MMX optimized functions exclusive for 16bit integer samples type. + class FIRFilterMMX : public FIRFilter + { + protected: + short *filterCoeffsUnalign; + short *filterCoeffsAlign; + + virtual uint evaluateFilterStereo(short *dest, const short *src, uint numSamples) const; + public: + FIRFilterMMX(); + ~FIRFilterMMX(); + + virtual void setCoefficients(const short *coeffs, uint newLength, uint uResultDivFactor); + }; + +#endif // SOUNDTOUCH_ALLOW_MMX + + +#ifdef SOUNDTOUCH_ALLOW_SSE + /// Class that implements SSE optimized functions exclusive for floating point samples type. + class FIRFilterSSE : public FIRFilter + { + protected: + float *filterCoeffsUnalign; + float *filterCoeffsAlign; + + virtual uint evaluateFilterStereo(float *dest, const float *src, uint numSamples) const; + public: + FIRFilterSSE(); + ~FIRFilterSSE(); + + virtual void setCoefficients(const float *coeffs, uint newLength, uint uResultDivFactor); + }; + +#endif // SOUNDTOUCH_ALLOW_SSE + +} + +#endif // FIRFilter_H diff --git a/Externals/SoundTouch/PeakFinder.cpp b/Externals/SoundTouch/PeakFinder.cpp new file mode 100644 index 0000000000..47ed27cb50 --- /dev/null +++ b/Externals/SoundTouch/PeakFinder.cpp @@ -0,0 +1,276 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// Peak detection routine. +/// +/// The routine detects highest value on an array of values and calculates the +/// precise peak location as a mass-center of the 'hump' around the peak value. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-12-28 21:52:47 +0200 (Fri, 28 Dec 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: PeakFinder.cpp 164 2012-12-28 19:52:47Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include + +#include "PeakFinder.h" + +using namespace soundtouch; + +#define max(x, y) (((x) > (y)) ? (x) : (y)) + + +PeakFinder::PeakFinder() +{ + minPos = maxPos = 0; +} + + +// Finds real 'top' of a peak hump from neighnourhood of the given 'peakpos'. +int PeakFinder::findTop(const float *data, int peakpos) const +{ + int i; + int start, end; + float refvalue; + + refvalue = data[peakpos]; + + // seek within ±10 points + start = peakpos - 10; + if (start < minPos) start = minPos; + end = peakpos + 10; + if (end > maxPos) end = maxPos; + + for (i = start; i <= end; i ++) + { + if (data[i] > refvalue) + { + peakpos = i; + refvalue = data[i]; + } + } + + // failure if max value is at edges of seek range => it's not peak, it's at slope. + if ((peakpos == start) || (peakpos == end)) return 0; + + return peakpos; +} + + +// Finds 'ground level' of a peak hump by starting from 'peakpos' and proceeding +// to direction defined by 'direction' until next 'hump' after minimum value will +// begin +int PeakFinder::findGround(const float *data, int peakpos, int direction) const +{ + int lowpos; + int pos; + int climb_count; + float refvalue; + float delta; + + climb_count = 0; + refvalue = data[peakpos]; + lowpos = peakpos; + + pos = peakpos; + + while ((pos > minPos+1) && (pos < maxPos-1)) + { + int prevpos; + + prevpos = pos; + pos += direction; + + // calculate derivate + delta = data[pos] - data[prevpos]; + if (delta <= 0) + { + // going downhill, ok + if (climb_count) + { + climb_count --; // decrease climb count + } + + // check if new minimum found + if (data[pos] < refvalue) + { + // new minimum found + lowpos = pos; + refvalue = data[pos]; + } + } + else + { + // going uphill, increase climbing counter + climb_count ++; + if (climb_count > 5) break; // we've been climbing too long => it's next uphill => quit + } + } + return lowpos; +} + + +// Find offset where the value crosses the given level, when starting from 'peakpos' and +// proceeds to direction defined in 'direction' +int PeakFinder::findCrossingLevel(const float *data, float level, int peakpos, int direction) const +{ + float peaklevel; + int pos; + + peaklevel = data[peakpos]; + assert(peaklevel >= level); + pos = peakpos; + while ((pos >= minPos) && (pos < maxPos)) + { + if (data[pos + direction] < level) return pos; // crossing found + pos += direction; + } + return -1; // not found +} + + +// Calculates the center of mass location of 'data' array items between 'firstPos' and 'lastPos' +double PeakFinder::calcMassCenter(const float *data, int firstPos, int lastPos) const +{ + int i; + float sum; + float wsum; + + sum = 0; + wsum = 0; + for (i = firstPos; i <= lastPos; i ++) + { + sum += (float)i * data[i]; + wsum += data[i]; + } + + if (wsum < 1e-6) return 0; + return sum / wsum; +} + + + +/// get exact center of peak near given position by calculating local mass of center +double PeakFinder::getPeakCenter(const float *data, int peakpos) const +{ + float peakLevel; // peak level + int crosspos1, crosspos2; // position where the peak 'hump' crosses cutting level + float cutLevel; // cutting value + float groundLevel; // ground level of the peak + int gp1, gp2; // bottom positions of the peak 'hump' + + // find ground positions. + gp1 = findGround(data, peakpos, -1); + gp2 = findGround(data, peakpos, 1); + + groundLevel = 0.5f * (data[gp1] + data[gp2]); + peakLevel = data[peakpos]; + + // calculate 70%-level of the peak + cutLevel = 0.70f * peakLevel + 0.30f * groundLevel; + // find mid-level crossings + crosspos1 = findCrossingLevel(data, cutLevel, peakpos, -1); + crosspos2 = findCrossingLevel(data, cutLevel, peakpos, 1); + + if ((crosspos1 < 0) || (crosspos2 < 0)) return 0; // no crossing, no peak.. + + // calculate mass center of the peak surroundings + return calcMassCenter(data, crosspos1, crosspos2); +} + + + +double PeakFinder::detectPeak(const float *data, int aminPos, int amaxPos) +{ + + int i; + int peakpos; // position of peak level + double highPeak, peak; + + this->minPos = aminPos; + this->maxPos = amaxPos; + + // find absolute peak + peakpos = minPos; + peak = data[minPos]; + for (i = minPos + 1; i < maxPos; i ++) + { + if (data[i] > peak) + { + peak = data[i]; + peakpos = i; + } + } + + // Calculate exact location of the highest peak mass center + highPeak = getPeakCenter(data, peakpos); + peak = highPeak; + + // Now check if the highest peak were in fact harmonic of the true base beat peak + // - sometimes the highest peak can be Nth harmonic of the true base peak yet + // just a slightly higher than the true base + + for (i = 3; i < 10; i ++) + { + double peaktmp, harmonic; + int i1,i2; + + harmonic = (double)i * 0.5; + peakpos = (int)(highPeak / harmonic + 0.5f); + if (peakpos < minPos) break; + peakpos = findTop(data, peakpos); // seek true local maximum index + if (peakpos == 0) continue; // no local max here + + // calculate mass-center of possible harmonic peak + peaktmp = getPeakCenter(data, peakpos); + + // accept harmonic peak if + // (a) it is found + // (b) is within ±4% of the expected harmonic interval + // (c) has at least half x-corr value of the max. peak + + double diff = harmonic * peaktmp / highPeak; + if ((diff < 0.96) || (diff > 1.04)) continue; // peak too afar from expected + + // now compare to highest detected peak + i1 = (int)(highPeak + 0.5); + i2 = (int)(peaktmp + 0.5); + if (data[i2] >= 0.4*data[i1]) + { + // The harmonic is at least half as high primary peak, + // thus use the harmonic peak instead + peak = peaktmp; + } + } + + return peak; +} diff --git a/Externals/SoundTouch/PeakFinder.h b/Externals/SoundTouch/PeakFinder.h new file mode 100644 index 0000000000..d170b1c58b --- /dev/null +++ b/Externals/SoundTouch/PeakFinder.h @@ -0,0 +1,97 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// The routine detects highest value on an array of values and calculates the +/// precise peak location as a mass-center of the 'hump' around the peak value. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2011-12-30 22:33:46 +0200 (Fri, 30 Dec 2011) $ +// File revision : $Revision: 4 $ +// +// $Id: PeakFinder.h 132 2011-12-30 20:33:46Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef _PeakFinder_H_ +#define _PeakFinder_H_ + +namespace soundtouch +{ + +class PeakFinder +{ +protected: + /// Min, max allowed peak positions within the data vector + int minPos, maxPos; + + /// Calculates the mass center between given vector items. + double calcMassCenter(const float *data, ///< Data vector. + int firstPos, ///< Index of first vector item beloging to the peak. + int lastPos ///< Index of last vector item beloging to the peak. + ) const; + + /// Finds the data vector index where the monotoniously decreasing signal crosses the + /// given level. + int findCrossingLevel(const float *data, ///< Data vector. + float level, ///< Goal crossing level. + int peakpos, ///< Peak position index within the data vector. + int direction /// Direction where to proceed from the peak: 1 = right, -1 = left. + ) const; + + // Finds real 'top' of a peak hump from neighnourhood of the given 'peakpos'. + int findTop(const float *data, int peakpos) const; + + + /// Finds the 'ground' level, i.e. smallest level between two neighbouring peaks, to right- + /// or left-hand side of the given peak position. + int findGround(const float *data, /// Data vector. + int peakpos, /// Peak position index within the data vector. + int direction /// Direction where to proceed from the peak: 1 = right, -1 = left. + ) const; + + /// get exact center of peak near given position by calculating local mass of center + double getPeakCenter(const float *data, int peakpos) const; + +public: + /// Constructor. + PeakFinder(); + + /// Detect exact peak position of the data vector by finding the largest peak 'hump' + /// and calculating the mass-center location of the peak hump. + /// + /// \return The location of the largest base harmonic peak hump. + double detectPeak(const float *data, /// Data vector to be analyzed. The data vector has + /// to be at least 'maxPos' items long. + int minPos, ///< Min allowed peak location within the vector data. + int maxPos ///< Max allowed peak location within the vector data. + ); +}; + +} + +#endif // _PeakFinder_H_ diff --git a/Externals/SoundTouch/RateTransposer.cpp b/Externals/SoundTouch/RateTransposer.cpp new file mode 100644 index 0000000000..3ad8d93e5c --- /dev/null +++ b/Externals/SoundTouch/RateTransposer.cpp @@ -0,0 +1,626 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// Sample rate transposer. Changes sample rate by using linear interpolation +/// together with anti-alias filtering (first order interpolation with anti- +/// alias filtering should be quite adequate for this application) +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2011-09-02 21:56:11 +0300 (Fri, 02 Sep 2011) $ +// File revision : $Revision: 4 $ +// +// $Id: RateTransposer.cpp 131 2011-09-02 18:56:11Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include "RateTransposer.h" +#include "AAFilter.h" + +using namespace soundtouch; + + +/// A linear samplerate transposer class that uses integer arithmetics. +/// for the transposing. +class RateTransposerInteger : public RateTransposer +{ +protected: + int iSlopeCount; + int iRate; + SAMPLETYPE sPrevSampleL, sPrevSampleR; + + virtual void resetRegisters(); + + virtual uint transposeStereo(SAMPLETYPE *dest, + const SAMPLETYPE *src, + uint numSamples); + virtual uint transposeMono(SAMPLETYPE *dest, + const SAMPLETYPE *src, + uint numSamples); + +public: + RateTransposerInteger(); + virtual ~RateTransposerInteger(); + + /// Sets new target rate. Normal rate = 1.0, smaller values represent slower + /// rate, larger faster rates. + virtual void setRate(float newRate); + +}; + + +/// A linear samplerate transposer class that uses floating point arithmetics +/// for the transposing. +class RateTransposerFloat : public RateTransposer +{ +protected: + float fSlopeCount; + SAMPLETYPE sPrevSampleL, sPrevSampleR; + + virtual void resetRegisters(); + + virtual uint transposeStereo(SAMPLETYPE *dest, + const SAMPLETYPE *src, + uint numSamples); + virtual uint transposeMono(SAMPLETYPE *dest, + const SAMPLETYPE *src, + uint numSamples); + +public: + RateTransposerFloat(); + virtual ~RateTransposerFloat(); +}; + + + + +// Operator 'new' is overloaded so that it automatically creates a suitable instance +// depending on if we've a MMX/SSE/etc-capable CPU available or not. +void * RateTransposer::operator new(size_t s) +{ + ST_THROW_RT_ERROR("Error in RateTransoser::new: don't use \"new TDStretch\" directly, use \"newInstance\" to create a new instance instead!"); + return newInstance(); +} + + +RateTransposer *RateTransposer::newInstance() +{ +#ifdef SOUNDTOUCH_INTEGER_SAMPLES + return ::new RateTransposerInteger; +#else + return ::new RateTransposerFloat; +#endif +} + + +// Constructor +RateTransposer::RateTransposer() : FIFOProcessor(&outputBuffer) +{ + numChannels = 2; + bUseAAFilter = TRUE; + fRate = 0; + + // Instantiates the anti-alias filter with default tap length + // of 32 + pAAFilter = new AAFilter(32); +} + + + +RateTransposer::~RateTransposer() +{ + delete pAAFilter; +} + + + +/// Enables/disables the anti-alias filter. Zero to disable, nonzero to enable +void RateTransposer::enableAAFilter(BOOL newMode) +{ + bUseAAFilter = newMode; +} + + +/// Returns nonzero if anti-alias filter is enabled. +BOOL RateTransposer::isAAFilterEnabled() const +{ + return bUseAAFilter; +} + + +AAFilter *RateTransposer::getAAFilter() +{ + return pAAFilter; +} + + + +// Sets new target iRate. Normal iRate = 1.0, smaller values represent slower +// iRate, larger faster iRates. +void RateTransposer::setRate(float newRate) +{ + double fCutoff; + + fRate = newRate; + + // design a new anti-alias filter + if (newRate > 1.0f) + { + fCutoff = 0.5f / newRate; + } + else + { + fCutoff = 0.5f * newRate; + } + pAAFilter->setCutoffFreq(fCutoff); +} + + +// Outputs as many samples of the 'outputBuffer' as possible, and if there's +// any room left, outputs also as many of the incoming samples as possible. +// The goal is to drive the outputBuffer empty. +// +// It's allowed for 'output' and 'input' parameters to point to the same +// memory position. +/* +void RateTransposer::flushStoreBuffer() +{ + if (storeBuffer.isEmpty()) return; + + outputBuffer.moveSamples(storeBuffer); +} +*/ + + +// Adds 'nSamples' pcs of samples from the 'samples' memory position into +// the input of the object. +void RateTransposer::putSamples(const SAMPLETYPE *samples, uint nSamples) +{ + processSamples(samples, nSamples); +} + + + +// Transposes up the sample rate, causing the observed playback 'rate' of the +// sound to decrease +void RateTransposer::upsample(const SAMPLETYPE *src, uint nSamples) +{ + uint count, sizeTemp, num; + + // If the parameter 'uRate' value is smaller than 'SCALE', first transpose + // the samples and then apply the anti-alias filter to remove aliasing. + + // First check that there's enough room in 'storeBuffer' + // (+16 is to reserve some slack in the destination buffer) + sizeTemp = (uint)((float)nSamples / fRate + 16.0f); + + // Transpose the samples, store the result into the end of "storeBuffer" + count = transpose(storeBuffer.ptrEnd(sizeTemp), src, nSamples); + storeBuffer.putSamples(count); + + // Apply the anti-alias filter to samples in "store output", output the + // result to "dest" + num = storeBuffer.numSamples(); + count = pAAFilter->evaluate(outputBuffer.ptrEnd(num), + storeBuffer.ptrBegin(), num, (uint)numChannels); + outputBuffer.putSamples(count); + + // Remove the processed samples from "storeBuffer" + storeBuffer.receiveSamples(count); +} + + +// Transposes down the sample rate, causing the observed playback 'rate' of the +// sound to increase +void RateTransposer::downsample(const SAMPLETYPE *src, uint nSamples) +{ + uint count, sizeTemp; + + // If the parameter 'uRate' value is larger than 'SCALE', first apply the + // anti-alias filter to remove high frequencies (prevent them from folding + // over the lover frequencies), then transpose. + + // Add the new samples to the end of the storeBuffer + storeBuffer.putSamples(src, nSamples); + + // Anti-alias filter the samples to prevent folding and output the filtered + // data to tempBuffer. Note : because of the FIR filter length, the + // filtering routine takes in 'filter_length' more samples than it outputs. + assert(tempBuffer.isEmpty()); + sizeTemp = storeBuffer.numSamples(); + + count = pAAFilter->evaluate(tempBuffer.ptrEnd(sizeTemp), + storeBuffer.ptrBegin(), sizeTemp, (uint)numChannels); + + if (count == 0) return; + + // Remove the filtered samples from 'storeBuffer' + storeBuffer.receiveSamples(count); + + // Transpose the samples (+16 is to reserve some slack in the destination buffer) + sizeTemp = (uint)((float)nSamples / fRate + 16.0f); + count = transpose(outputBuffer.ptrEnd(sizeTemp), tempBuffer.ptrBegin(), count); + outputBuffer.putSamples(count); +} + + +// Transposes sample rate by applying anti-alias filter to prevent folding. +// Returns amount of samples returned in the "dest" buffer. +// The maximum amount of samples that can be returned at a time is set by +// the 'set_returnBuffer_size' function. +void RateTransposer::processSamples(const SAMPLETYPE *src, uint nSamples) +{ + uint count; + uint sizeReq; + + if (nSamples == 0) return; + assert(pAAFilter); + + // If anti-alias filter is turned off, simply transpose without applying + // the filter + if (bUseAAFilter == FALSE) + { + sizeReq = (uint)((float)nSamples / fRate + 1.0f); + count = transpose(outputBuffer.ptrEnd(sizeReq), src, nSamples); + outputBuffer.putSamples(count); + return; + } + + // Transpose with anti-alias filter + if (fRate < 1.0f) + { + upsample(src, nSamples); + } + else + { + downsample(src, nSamples); + } +} + + +// Transposes the sample rate of the given samples using linear interpolation. +// Returns the number of samples returned in the "dest" buffer +inline uint RateTransposer::transpose(SAMPLETYPE *dest, const SAMPLETYPE *src, uint nSamples) +{ + if (numChannels == 2) + { + return transposeStereo(dest, src, nSamples); + } + else + { + return transposeMono(dest, src, nSamples); + } +} + + +// Sets the number of channels, 1 = mono, 2 = stereo +void RateTransposer::setChannels(int nChannels) +{ + assert(nChannels > 0); + if (numChannels == nChannels) return; + + assert(nChannels == 1 || nChannels == 2); + numChannels = nChannels; + + storeBuffer.setChannels(numChannels); + tempBuffer.setChannels(numChannels); + outputBuffer.setChannels(numChannels); + + // Inits the linear interpolation registers + resetRegisters(); +} + + +// Clears all the samples in the object +void RateTransposer::clear() +{ + outputBuffer.clear(); + storeBuffer.clear(); +} + + +// Returns nonzero if there aren't any samples available for outputting. +int RateTransposer::isEmpty() const +{ + int res; + + res = FIFOProcessor::isEmpty(); + if (res == 0) return 0; + return storeBuffer.isEmpty(); +} + + +////////////////////////////////////////////////////////////////////////////// +// +// RateTransposerInteger - integer arithmetic implementation +// + +/// fixed-point interpolation routine precision +#define SCALE 65536 + +// Constructor +RateTransposerInteger::RateTransposerInteger() : RateTransposer() +{ + // Notice: use local function calling syntax for sake of clarity, + // to indicate the fact that C++ constructor can't call virtual functions. + RateTransposerInteger::resetRegisters(); + RateTransposerInteger::setRate(1.0f); +} + + +RateTransposerInteger::~RateTransposerInteger() +{ +} + + +void RateTransposerInteger::resetRegisters() +{ + iSlopeCount = 0; + sPrevSampleL = + sPrevSampleR = 0; +} + + + +// Transposes the sample rate of the given samples using linear interpolation. +// 'Mono' version of the routine. Returns the number of samples returned in +// the "dest" buffer +uint RateTransposerInteger::transposeMono(SAMPLETYPE *dest, const SAMPLETYPE *src, uint nSamples) +{ + unsigned int i, used; + LONG_SAMPLETYPE temp, vol1; + + if (nSamples == 0) return 0; // no samples, no work + + used = 0; + i = 0; + + // Process the last sample saved from the previous call first... + while (iSlopeCount <= SCALE) + { + vol1 = (LONG_SAMPLETYPE)(SCALE - iSlopeCount); + temp = vol1 * sPrevSampleL + iSlopeCount * src[0]; + dest[i] = (SAMPLETYPE)(temp / SCALE); + i++; + iSlopeCount += iRate; + } + // now always (iSlopeCount > SCALE) + iSlopeCount -= SCALE; + + while (1) + { + while (iSlopeCount > SCALE) + { + iSlopeCount -= SCALE; + used ++; + if (used >= nSamples - 1) goto end; + } + vol1 = (LONG_SAMPLETYPE)(SCALE - iSlopeCount); + temp = src[used] * vol1 + iSlopeCount * src[used + 1]; + dest[i] = (SAMPLETYPE)(temp / SCALE); + + i++; + iSlopeCount += iRate; + } +end: + // Store the last sample for the next round + sPrevSampleL = src[nSamples - 1]; + + return i; +} + + +// Transposes the sample rate of the given samples using linear interpolation. +// 'Stereo' version of the routine. Returns the number of samples returned in +// the "dest" buffer +uint RateTransposerInteger::transposeStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, uint nSamples) +{ + unsigned int srcPos, i, used; + LONG_SAMPLETYPE temp, vol1; + + if (nSamples == 0) return 0; // no samples, no work + + used = 0; + i = 0; + + // Process the last sample saved from the sPrevSampleLious call first... + while (iSlopeCount <= SCALE) + { + vol1 = (LONG_SAMPLETYPE)(SCALE - iSlopeCount); + temp = vol1 * sPrevSampleL + iSlopeCount * src[0]; + dest[2 * i] = (SAMPLETYPE)(temp / SCALE); + temp = vol1 * sPrevSampleR + iSlopeCount * src[1]; + dest[2 * i + 1] = (SAMPLETYPE)(temp / SCALE); + i++; + iSlopeCount += iRate; + } + // now always (iSlopeCount > SCALE) + iSlopeCount -= SCALE; + + while (1) + { + while (iSlopeCount > SCALE) + { + iSlopeCount -= SCALE; + used ++; + if (used >= nSamples - 1) goto end; + } + srcPos = 2 * used; + vol1 = (LONG_SAMPLETYPE)(SCALE - iSlopeCount); + temp = src[srcPos] * vol1 + iSlopeCount * src[srcPos + 2]; + dest[2 * i] = (SAMPLETYPE)(temp / SCALE); + temp = src[srcPos + 1] * vol1 + iSlopeCount * src[srcPos + 3]; + dest[2 * i + 1] = (SAMPLETYPE)(temp / SCALE); + + i++; + iSlopeCount += iRate; + } +end: + // Store the last sample for the next round + sPrevSampleL = src[2 * nSamples - 2]; + sPrevSampleR = src[2 * nSamples - 1]; + + return i; +} + + +// Sets new target iRate. Normal iRate = 1.0, smaller values represent slower +// iRate, larger faster iRates. +void RateTransposerInteger::setRate(float newRate) +{ + iRate = (int)(newRate * SCALE + 0.5f); + RateTransposer::setRate(newRate); +} + + +////////////////////////////////////////////////////////////////////////////// +// +// RateTransposerFloat - floating point arithmetic implementation +// +////////////////////////////////////////////////////////////////////////////// + +// Constructor +RateTransposerFloat::RateTransposerFloat() : RateTransposer() +{ + // Notice: use local function calling syntax for sake of clarity, + // to indicate the fact that C++ constructor can't call virtual functions. + RateTransposerFloat::resetRegisters(); + RateTransposerFloat::setRate(1.0f); +} + + +RateTransposerFloat::~RateTransposerFloat() +{ +} + + +void RateTransposerFloat::resetRegisters() +{ + fSlopeCount = 0; + sPrevSampleL = + sPrevSampleR = 0; +} + + + +// Transposes the sample rate of the given samples using linear interpolation. +// 'Mono' version of the routine. Returns the number of samples returned in +// the "dest" buffer +uint RateTransposerFloat::transposeMono(SAMPLETYPE *dest, const SAMPLETYPE *src, uint nSamples) +{ + unsigned int i, used; + + used = 0; + i = 0; + + // Process the last sample saved from the previous call first... + while (fSlopeCount <= 1.0f) + { + dest[i] = (SAMPLETYPE)((1.0f - fSlopeCount) * sPrevSampleL + fSlopeCount * src[0]); + i++; + fSlopeCount += fRate; + } + fSlopeCount -= 1.0f; + + if (nSamples > 1) + { + while (1) + { + while (fSlopeCount > 1.0f) + { + fSlopeCount -= 1.0f; + used ++; + if (used >= nSamples - 1) goto end; + } + dest[i] = (SAMPLETYPE)((1.0f - fSlopeCount) * src[used] + fSlopeCount * src[used + 1]); + i++; + fSlopeCount += fRate; + } + } +end: + // Store the last sample for the next round + sPrevSampleL = src[nSamples - 1]; + + return i; +} + + +// Transposes the sample rate of the given samples using linear interpolation. +// 'Mono' version of the routine. Returns the number of samples returned in +// the "dest" buffer +uint RateTransposerFloat::transposeStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, uint nSamples) +{ + unsigned int srcPos, i, used; + + if (nSamples == 0) return 0; // no samples, no work + + used = 0; + i = 0; + + // Process the last sample saved from the sPrevSampleLious call first... + while (fSlopeCount <= 1.0f) + { + dest[2 * i] = (SAMPLETYPE)((1.0f - fSlopeCount) * sPrevSampleL + fSlopeCount * src[0]); + dest[2 * i + 1] = (SAMPLETYPE)((1.0f - fSlopeCount) * sPrevSampleR + fSlopeCount * src[1]); + i++; + fSlopeCount += fRate; + } + // now always (iSlopeCount > 1.0f) + fSlopeCount -= 1.0f; + + if (nSamples > 1) + { + while (1) + { + while (fSlopeCount > 1.0f) + { + fSlopeCount -= 1.0f; + used ++; + if (used >= nSamples - 1) goto end; + } + srcPos = 2 * used; + + dest[2 * i] = (SAMPLETYPE)((1.0f - fSlopeCount) * src[srcPos] + + fSlopeCount * src[srcPos + 2]); + dest[2 * i + 1] = (SAMPLETYPE)((1.0f - fSlopeCount) * src[srcPos + 1] + + fSlopeCount * src[srcPos + 3]); + + i++; + fSlopeCount += fRate; + } + } +end: + // Store the last sample for the next round + sPrevSampleL = src[2 * nSamples - 2]; + sPrevSampleR = src[2 * nSamples - 1]; + + return i; +} diff --git a/Externals/SoundTouch/RateTransposer.h b/Externals/SoundTouch/RateTransposer.h new file mode 100644 index 0000000000..48f7bed5c2 --- /dev/null +++ b/Externals/SoundTouch/RateTransposer.h @@ -0,0 +1,159 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// Sample rate transposer. Changes sample rate by using linear interpolation +/// together with anti-alias filtering (first order interpolation with anti- +/// alias filtering should be quite adequate for this application). +/// +/// Use either of the derived classes of 'RateTransposerInteger' or +/// 'RateTransposerFloat' for corresponding integer/floating point tranposing +/// algorithm implementation. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2009-02-21 18:00:14 +0200 (Sat, 21 Feb 2009) $ +// File revision : $Revision: 4 $ +// +// $Id: RateTransposer.h 63 2009-02-21 16:00:14Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef RateTransposer_H +#define RateTransposer_H + +#include +#include "AAFilter.h" +#include "FIFOSamplePipe.h" +#include "FIFOSampleBuffer.h" + +#include "STTypes.h" + +namespace soundtouch +{ + +/// A common linear samplerate transposer class. +/// +/// Note: Use function "RateTransposer::newInstance()" to create a new class +/// instance instead of the "new" operator; that function automatically +/// chooses a correct implementation depending on if integer or floating +/// arithmetics are to be used. +class RateTransposer : public FIFOProcessor +{ +protected: + /// Anti-alias filter object + AAFilter *pAAFilter; + + float fRate; + + int numChannels; + + /// Buffer for collecting samples to feed the anti-alias filter between + /// two batches + FIFOSampleBuffer storeBuffer; + + /// Buffer for keeping samples between transposing & anti-alias filter + FIFOSampleBuffer tempBuffer; + + /// Output sample buffer + FIFOSampleBuffer outputBuffer; + + BOOL bUseAAFilter; + + virtual void resetRegisters() = 0; + + virtual uint transposeStereo(SAMPLETYPE *dest, + const SAMPLETYPE *src, + uint numSamples) = 0; + virtual uint transposeMono(SAMPLETYPE *dest, + const SAMPLETYPE *src, + uint numSamples) = 0; + inline uint transpose(SAMPLETYPE *dest, + const SAMPLETYPE *src, + uint numSamples); + + void downsample(const SAMPLETYPE *src, + uint numSamples); + void upsample(const SAMPLETYPE *src, + uint numSamples); + + /// Transposes sample rate by applying anti-alias filter to prevent folding. + /// Returns amount of samples returned in the "dest" buffer. + /// The maximum amount of samples that can be returned at a time is set by + /// the 'set_returnBuffer_size' function. + void processSamples(const SAMPLETYPE *src, + uint numSamples); + + +public: + RateTransposer(); + virtual ~RateTransposer(); + + /// Operator 'new' is overloaded so that it automatically creates a suitable instance + /// depending on if we're to use integer or floating point arithmetics. + static void *operator new(size_t s); + + /// Use this function instead of "new" operator to create a new instance of this class. + /// This function automatically chooses a correct implementation, depending on if + /// integer ot floating point arithmetics are to be used. + static RateTransposer *newInstance(); + + /// Returns the output buffer object + FIFOSamplePipe *getOutput() { return &outputBuffer; }; + + /// Returns the store buffer object + FIFOSamplePipe *getStore() { return &storeBuffer; }; + + /// Return anti-alias filter object + AAFilter *getAAFilter(); + + /// Enables/disables the anti-alias filter. Zero to disable, nonzero to enable + void enableAAFilter(BOOL newMode); + + /// Returns nonzero if anti-alias filter is enabled. + BOOL isAAFilterEnabled() const; + + /// Sets new target rate. Normal rate = 1.0, smaller values represent slower + /// rate, larger faster rates. + virtual void setRate(float newRate); + + /// Sets the number of channels, 1 = mono, 2 = stereo + void setChannels(int channels); + + /// Adds 'numSamples' pcs of samples from the 'samples' memory position into + /// the input of the object. + void putSamples(const SAMPLETYPE *samples, uint numSamples); + + /// Clears all the samples in the object + void clear(); + + /// Returns nonzero if there aren't any samples available for outputting. + int isEmpty() const; +}; + +} + +#endif diff --git a/Externals/SoundTouch/STTypes.h b/Externals/SoundTouch/STTypes.h new file mode 100644 index 0000000000..24828f3295 --- /dev/null +++ b/Externals/SoundTouch/STTypes.h @@ -0,0 +1,189 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// Common type definitions for SoundTouch audio processing library. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-12-28 16:53:56 +0200 (Fri, 28 Dec 2012) $ +// File revision : $Revision: 3 $ +// +// $Id: STTypes.h 162 2012-12-28 14:53:56Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef STTypes_H +#define STTypes_H + +typedef unsigned int uint; +typedef unsigned long ulong; + +// Patch for MinGW: on Win64 long is 32-bit +#ifdef _WIN64 + typedef unsigned long long ulongptr; +#else + typedef ulong ulongptr; +#endif + + +// Helper macro for aligning pointer up to next 16-byte boundary +#define SOUNDTOUCH_ALIGN_POINTER_16(x) ( ( (ulongptr)(x) + 15 ) & ~(ulongptr)15 ) + + +#if (defined(__GNUC__) && !defined(ANDROID)) + // In GCC, include soundtouch_config.h made by config scritps. + // Skip this in Android compilation that uses GCC but without configure scripts. + #include "soundtouch_config.h" +#endif + +#ifndef _WINDEF_ + // if these aren't defined already by Windows headers, define now + + typedef int BOOL; + + #define FALSE 0 + #define TRUE 1 + +#endif // _WINDEF_ + + +namespace soundtouch +{ + /// Activate these undef's to overrule the possible sampletype + /// setting inherited from some other header file: + #undef SOUNDTOUCH_INTEGER_SAMPLES + #undef SOUNDTOUCH_FLOAT_SAMPLES + + #if (defined(__SOFTFP__)) + // For Android compilation: Force use of Integer samples in case that + // compilation uses soft-floating point emulation - soft-fp is way too slow + #undef SOUNDTOUCH_FLOAT_SAMPLES + #define SOUNDTOUCH_INTEGER_SAMPLES 1 + #endif + + #if !(SOUNDTOUCH_INTEGER_SAMPLES || SOUNDTOUCH_FLOAT_SAMPLES) + + /// Choose either 32bit floating point or 16bit integer sampletype + /// by choosing one of the following defines, unless this selection + /// has already been done in some other file. + //// + /// Notes: + /// - In Windows environment, choose the sample format with the + /// following defines. + /// - In GNU environment, the floating point samples are used by + /// default, but integer samples can be chosen by giving the + /// following switch to the configure script: + /// ./configure --enable-integer-samples + /// However, if you still prefer to select the sample format here + /// also in GNU environment, then please #undef the INTEGER_SAMPLE + /// and FLOAT_SAMPLE defines first as in comments above. + #define SOUNDTOUCH_INTEGER_SAMPLES 1 //< 16bit integer samples + //#define SOUNDTOUCH_FLOAT_SAMPLES 1 //< 32bit float samples + + #endif + + #if (_M_IX86 || __i386__ || __x86_64__ || _M_X64) + /// Define this to allow X86-specific assembler/intrinsic optimizations. + /// Notice that library contains also usual C++ versions of each of these + /// these routines, so if you're having difficulties getting the optimized + /// routines compiled for whatever reason, you may disable these optimizations + /// to make the library compile. + + #define SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS 1 + + /// In GNU environment, allow the user to override this setting by + /// giving the following switch to the configure script: + /// ./configure --disable-x86-optimizations + /// ./configure --enable-x86-optimizations=no + #ifdef SOUNDTOUCH_DISABLE_X86_OPTIMIZATIONS + #undef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS + #endif + #else + /// Always disable optimizations when not using a x86 systems. + #undef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS + + #endif + + // If defined, allows the SIMD-optimized routines to take minor shortcuts + // for improved performance. Undefine to require faithfully similar SIMD + // calculations as in normal C implementation. + #define SOUNDTOUCH_ALLOW_NONEXACT_SIMD_OPTIMIZATION 1 + + + #ifdef SOUNDTOUCH_INTEGER_SAMPLES + // 16bit integer sample type + typedef short SAMPLETYPE; + // data type for sample accumulation: Use 32bit integer to prevent overflows + typedef long LONG_SAMPLETYPE; + + #ifdef SOUNDTOUCH_FLOAT_SAMPLES + // check that only one sample type is defined + #error "conflicting sample types defined" + #endif // SOUNDTOUCH_FLOAT_SAMPLES + + #ifdef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS + // Allow MMX optimizations +#ifndef _M_X64 + #define SOUNDTOUCH_ALLOW_MMX 1 +#endif + #endif + + #else + + // floating point samples + typedef float SAMPLETYPE; + // data type for sample accumulation: Use double to utilize full precision. + typedef double LONG_SAMPLETYPE; + + #ifdef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS + // Allow SSE optimizations + #define SOUNDTOUCH_ALLOW_SSE 1 + #endif + + #endif // SOUNDTOUCH_INTEGER_SAMPLES + +}; + +// define ST_NO_EXCEPTION_HANDLING switch to disable throwing std exceptions: +#define ST_NO_EXCEPTION_HANDLING 1 +#ifdef ST_NO_EXCEPTION_HANDLING + // Exceptions disabled. Throw asserts instead if enabled. + #include + #define ST_THROW_RT_ERROR(x) {assert((const char *)x);} +#else + // use c++ standard exceptions + #include + #define ST_THROW_RT_ERROR(x) {throw std::runtime_error(x);} +#endif + +// When this #define is active, eliminates a clicking sound when the "rate" or "pitch" +// parameter setting crosses from value <1 to >=1 or vice versa during processing. +// Default is off as such crossover is untypical case and involves a slight sound +// quality compromise. +//#define SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER 1 + +#endif diff --git a/Externals/SoundTouch/SoundTouch.cpp b/Externals/SoundTouch/SoundTouch.cpp new file mode 100644 index 0000000000..f9160ed56d --- /dev/null +++ b/Externals/SoundTouch/SoundTouch.cpp @@ -0,0 +1,501 @@ +////////////////////////////////////////////////////////////////////////////// +/// +/// SoundTouch - main class for tempo/pitch/rate adjusting routines. +/// +/// Notes: +/// - Initialize the SoundTouch object instance by setting up the sound stream +/// parameters with functions 'setSampleRate' and 'setChannels', then set +/// desired tempo/pitch/rate settings with the corresponding functions. +/// +/// - The SoundTouch class behaves like a first-in-first-out pipeline: The +/// samples that are to be processed are fed into one of the pipe by calling +/// function 'putSamples', while the ready processed samples can be read +/// from the other end of the pipeline with function 'receiveSamples'. +/// +/// - The SoundTouch processing classes require certain sized 'batches' of +/// samples in order to process the sound. For this reason the classes buffer +/// incoming samples until there are enough of samples available for +/// processing, then they carry out the processing step and consequently +/// make the processed samples available for outputting. +/// +/// - For the above reason, the processing routines introduce a certain +/// 'latency' between the input and output, so that the samples input to +/// SoundTouch may not be immediately available in the output, and neither +/// the amount of outputtable samples may not immediately be in direct +/// relationship with the amount of previously input samples. +/// +/// - The tempo/pitch/rate control parameters can be altered during processing. +/// Please notice though that they aren't currently protected by semaphores, +/// so in multi-thread application external semaphore protection may be +/// required. +/// +/// - This class utilizes classes 'TDStretch' for tempo change (without modifying +/// pitch) and 'RateTransposer' for changing the playback rate (that is, both +/// tempo and pitch in the same ratio) of the sound. The third available control +/// 'pitch' (change pitch but maintain tempo) is produced by a combination of +/// combining the two other controls. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-06-13 22:29:53 +0300 (Wed, 13 Jun 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: SoundTouch.cpp 143 2012-06-13 19:29:53Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include + +#include "SoundTouch.h" +#include "TDStretch.h" +#include "RateTransposer.h" +#include "cpu_detect.h" + +using namespace soundtouch; + +/// test if two floating point numbers are equal +#define TEST_FLOAT_EQUAL(a, b) (fabs(a - b) < 1e-10) + + +/// Print library version string for autoconf +extern "C" void soundtouch_ac_test() +{ + printf("SoundTouch Version: %s\n",SOUNDTOUCH_VERSION); +} + + +SoundTouch::SoundTouch() +{ + // Initialize rate transposer and tempo changer instances + + pRateTransposer = RateTransposer::newInstance(); + pTDStretch = TDStretch::newInstance(); + + setOutPipe(pTDStretch); + + rate = tempo = 0; + + virtualPitch = + virtualRate = + virtualTempo = 1.0; + + calcEffectiveRateAndTempo(); + + channels = 0; + bSrateSet = FALSE; +} + + + +SoundTouch::~SoundTouch() +{ + delete pRateTransposer; + delete pTDStretch; +} + + + +/// Get SoundTouch library version string +const char *SoundTouch::getVersionString() +{ + static const char *_version = SOUNDTOUCH_VERSION; + + return _version; +} + + +/// Get SoundTouch library version Id +uint SoundTouch::getVersionId() +{ + return SOUNDTOUCH_VERSION_ID; +} + + +// Sets the number of channels, 1 = mono, 2 = stereo +void SoundTouch::setChannels(uint numChannels) +{ + if (numChannels != 1 && numChannels != 2) + { + ST_THROW_RT_ERROR("Illegal number of channels"); + } + channels = numChannels; + pRateTransposer->setChannels((int)numChannels); + pTDStretch->setChannels((int)numChannels); +} + + + +// Sets new rate control value. Normal rate = 1.0, smaller values +// represent slower rate, larger faster rates. +void SoundTouch::setRate(float newRate) +{ + virtualRate = newRate; + calcEffectiveRateAndTempo(); +} + + + +// Sets new rate control value as a difference in percents compared +// to the original rate (-50 .. +100 %) +void SoundTouch::setRateChange(float newRate) +{ + virtualRate = 1.0f + 0.01f * newRate; + calcEffectiveRateAndTempo(); +} + + + +// Sets new tempo control value. Normal tempo = 1.0, smaller values +// represent slower tempo, larger faster tempo. +void SoundTouch::setTempo(float newTempo) +{ + virtualTempo = newTempo; + calcEffectiveRateAndTempo(); +} + + + +// Sets new tempo control value as a difference in percents compared +// to the original tempo (-50 .. +100 %) +void SoundTouch::setTempoChange(float newTempo) +{ + virtualTempo = 1.0f + 0.01f * newTempo; + calcEffectiveRateAndTempo(); +} + + + +// Sets new pitch control value. Original pitch = 1.0, smaller values +// represent lower pitches, larger values higher pitch. +void SoundTouch::setPitch(float newPitch) +{ + virtualPitch = newPitch; + calcEffectiveRateAndTempo(); +} + + + +// Sets pitch change in octaves compared to the original pitch +// (-1.00 .. +1.00) +void SoundTouch::setPitchOctaves(float newPitch) +{ + virtualPitch = (float)exp(0.69314718056f * newPitch); + calcEffectiveRateAndTempo(); +} + + + +// Sets pitch change in semi-tones compared to the original pitch +// (-12 .. +12) +void SoundTouch::setPitchSemiTones(int newPitch) +{ + setPitchOctaves((float)newPitch / 12.0f); +} + + + +void SoundTouch::setPitchSemiTones(float newPitch) +{ + setPitchOctaves(newPitch / 12.0f); +} + + +// Calculates 'effective' rate and tempo values from the +// nominal control values. +void SoundTouch::calcEffectiveRateAndTempo() +{ + float oldTempo = tempo; + float oldRate = rate; + + tempo = virtualTempo / virtualPitch; + rate = virtualPitch * virtualRate; + + if (!TEST_FLOAT_EQUAL(rate,oldRate)) pRateTransposer->setRate(rate); + if (!TEST_FLOAT_EQUAL(tempo, oldTempo)) pTDStretch->setTempo(tempo); + +#ifndef SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER + if (rate <= 1.0f) + { + if (output != pTDStretch) + { + FIFOSamplePipe *tempoOut; + + assert(output == pRateTransposer); + // move samples in the current output buffer to the output of pTDStretch + tempoOut = pTDStretch->getOutput(); + tempoOut->moveSamples(*output); + // move samples in pitch transposer's store buffer to tempo changer's input + pTDStretch->moveSamples(*pRateTransposer->getStore()); + + output = pTDStretch; + } + } + else +#endif + { + if (output != pRateTransposer) + { + FIFOSamplePipe *transOut; + + assert(output == pTDStretch); + // move samples in the current output buffer to the output of pRateTransposer + transOut = pRateTransposer->getOutput(); + transOut->moveSamples(*output); + // move samples in tempo changer's input to pitch transposer's input + pRateTransposer->moveSamples(*pTDStretch->getInput()); + + output = pRateTransposer; + } + } +} + + +// Sets sample rate. +void SoundTouch::setSampleRate(uint srate) +{ + bSrateSet = TRUE; + // set sample rate, leave other tempo changer parameters as they are. + pTDStretch->setParameters((int)srate); +} + + +// Adds 'numSamples' pcs of samples from the 'samples' memory position into +// the input of the object. +void SoundTouch::putSamples(const SAMPLETYPE *samples, uint nSamples) +{ + if (bSrateSet == FALSE) + { + ST_THROW_RT_ERROR("SoundTouch : Sample rate not defined"); + } + else if (channels == 0) + { + ST_THROW_RT_ERROR("SoundTouch : Number of channels not defined"); + } + + // Transpose the rate of the new samples if necessary + /* Bypass the nominal setting - can introduce a click in sound when tempo/pitch control crosses the nominal value... + if (rate == 1.0f) + { + // The rate value is same as the original, simply evaluate the tempo changer. + assert(output == pTDStretch); + if (pRateTransposer->isEmpty() == 0) + { + // yet flush the last samples in the pitch transposer buffer + // (may happen if 'rate' changes from a non-zero value to zero) + pTDStretch->moveSamples(*pRateTransposer); + } + pTDStretch->putSamples(samples, nSamples); + } + */ +#ifndef SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER + else if (rate <= 1.0f) + { + // transpose the rate down, output the transposed sound to tempo changer buffer + assert(output == pTDStretch); + pRateTransposer->putSamples(samples, nSamples); + pTDStretch->moveSamples(*pRateTransposer); + } + else +#endif + { + // evaluate the tempo changer, then transpose the rate up, + assert(output == pRateTransposer); + pTDStretch->putSamples(samples, nSamples); + pRateTransposer->moveSamples(*pTDStretch); + } +} + + +// Flushes the last samples from the processing pipeline to the output. +// Clears also the internal processing buffers. +// +// Note: This function is meant for extracting the last samples of a sound +// stream. This function may introduce additional blank samples in the end +// of the sound stream, and thus it's not recommended to call this function +// in the middle of a sound stream. +void SoundTouch::flush() +{ + int i; + int nUnprocessed; + int nOut; + SAMPLETYPE buff[64*2]; // note: allocate 2*64 to cater 64 sample frames of stereo sound + + // check how many samples still await processing, and scale + // that by tempo & rate to get expected output sample count + nUnprocessed = numUnprocessedSamples(); + nUnprocessed = (int)((double)nUnprocessed / (tempo * rate) + 0.5); + + nOut = numSamples(); // ready samples currently in buffer ... + nOut += nUnprocessed; // ... and how many we expect there to be in the end + + memset(buff, 0, 64 * channels * sizeof(SAMPLETYPE)); + // "Push" the last active samples out from the processing pipeline by + // feeding blank samples into the processing pipeline until new, + // processed samples appear in the output (not however, more than + // 8ksamples in any case) + for (i = 0; i < 128; i ++) + { + putSamples(buff, 64); + if ((int)numSamples() >= nOut) + { + // Enough new samples have appeared into the output! + // As samples come from processing with bigger chunks, now truncate it + // back to maximum "nOut" samples to improve duration accuracy + adjustAmountOfSamples(nOut); + + // finish + break; + } + } + + // Clear working buffers + pRateTransposer->clear(); + pTDStretch->clearInput(); + // yet leave the 'tempoChanger' output intouched as that's where the + // flushed samples are! +} + + +// Changes a setting controlling the processing system behaviour. See the +// 'SETTING_...' defines for available setting ID's. +BOOL SoundTouch::setSetting(int settingId, int value) +{ + int sampleRate, sequenceMs, seekWindowMs, overlapMs; + + // read current tdstretch routine parameters + pTDStretch->getParameters(&sampleRate, &sequenceMs, &seekWindowMs, &overlapMs); + + switch (settingId) + { + case SETTING_USE_AA_FILTER : + // enables / disabless anti-alias filter + pRateTransposer->enableAAFilter((value != 0) ? TRUE : FALSE); + return TRUE; + + case SETTING_AA_FILTER_LENGTH : + // sets anti-alias filter length + pRateTransposer->getAAFilter()->setLength(value); + return TRUE; + + case SETTING_USE_QUICKSEEK : + // enables / disables tempo routine quick seeking algorithm + pTDStretch->enableQuickSeek((value != 0) ? TRUE : FALSE); + return TRUE; + + case SETTING_SEQUENCE_MS: + // change time-stretch sequence duration parameter + pTDStretch->setParameters(sampleRate, value, seekWindowMs, overlapMs); + return TRUE; + + case SETTING_SEEKWINDOW_MS: + // change time-stretch seek window length parameter + pTDStretch->setParameters(sampleRate, sequenceMs, value, overlapMs); + return TRUE; + + case SETTING_OVERLAP_MS: + // change time-stretch overlap length parameter + pTDStretch->setParameters(sampleRate, sequenceMs, seekWindowMs, value); + return TRUE; + + default : + return FALSE; + } +} + + +// Reads a setting controlling the processing system behaviour. See the +// 'SETTING_...' defines for available setting ID's. +// +// Returns the setting value. +int SoundTouch::getSetting(int settingId) const +{ + int temp; + + switch (settingId) + { + case SETTING_USE_AA_FILTER : + return (uint)pRateTransposer->isAAFilterEnabled(); + + case SETTING_AA_FILTER_LENGTH : + return pRateTransposer->getAAFilter()->getLength(); + + case SETTING_USE_QUICKSEEK : + return (uint) pTDStretch->isQuickSeekEnabled(); + + case SETTING_SEQUENCE_MS: + pTDStretch->getParameters(NULL, &temp, NULL, NULL); + return temp; + + case SETTING_SEEKWINDOW_MS: + pTDStretch->getParameters(NULL, NULL, &temp, NULL); + return temp; + + case SETTING_OVERLAP_MS: + pTDStretch->getParameters(NULL, NULL, NULL, &temp); + return temp; + + case SETTING_NOMINAL_INPUT_SEQUENCE : + return pTDStretch->getInputSampleReq(); + + case SETTING_NOMINAL_OUTPUT_SEQUENCE : + return pTDStretch->getOutputBatchSize(); + + default : + return 0; + } +} + + +// Clears all the samples in the object's output and internal processing +// buffers. +void SoundTouch::clear() +{ + pRateTransposer->clear(); + pTDStretch->clear(); +} + + + +/// Returns number of samples currently unprocessed. +uint SoundTouch::numUnprocessedSamples() const +{ + FIFOSamplePipe * psp; + if (pTDStretch) + { + psp = pTDStretch->getInput(); + if (psp) + { + return psp->numSamples(); + } + } + return 0; +} diff --git a/Externals/SoundTouch/SoundTouch.h b/Externals/SoundTouch/SoundTouch.h new file mode 100644 index 0000000000..c6af895811 --- /dev/null +++ b/Externals/SoundTouch/SoundTouch.h @@ -0,0 +1,277 @@ +////////////////////////////////////////////////////////////////////////////// +/// +/// SoundTouch - main class for tempo/pitch/rate adjusting routines. +/// +/// Notes: +/// - Initialize the SoundTouch object instance by setting up the sound stream +/// parameters with functions 'setSampleRate' and 'setChannels', then set +/// desired tempo/pitch/rate settings with the corresponding functions. +/// +/// - The SoundTouch class behaves like a first-in-first-out pipeline: The +/// samples that are to be processed are fed into one of the pipe by calling +/// function 'putSamples', while the ready processed samples can be read +/// from the other end of the pipeline with function 'receiveSamples'. +/// +/// - The SoundTouch processing classes require certain sized 'batches' of +/// samples in order to process the sound. For this reason the classes buffer +/// incoming samples until there are enough of samples available for +/// processing, then they carry out the processing step and consequently +/// make the processed samples available for outputting. +/// +/// - For the above reason, the processing routines introduce a certain +/// 'latency' between the input and output, so that the samples input to +/// SoundTouch may not be immediately available in the output, and neither +/// the amount of outputtable samples may not immediately be in direct +/// relationship with the amount of previously input samples. +/// +/// - The tempo/pitch/rate control parameters can be altered during processing. +/// Please notice though that they aren't currently protected by semaphores, +/// so in multi-thread application external semaphore protection may be +/// required. +/// +/// - This class utilizes classes 'TDStretch' for tempo change (without modifying +/// pitch) and 'RateTransposer' for changing the playback rate (that is, both +/// tempo and pitch in the same ratio) of the sound. The third available control +/// 'pitch' (change pitch but maintain tempo) is produced by a combination of +/// combining the two other controls. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-12-28 21:32:59 +0200 (Fri, 28 Dec 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: SoundTouch.h 163 2012-12-28 19:32:59Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef SoundTouch_H +#define SoundTouch_H + +#include "FIFOSamplePipe.h" +#include "STTypes.h" + +namespace soundtouch +{ + +/// Soundtouch library version string +#define SOUNDTOUCH_VERSION "1.7.1" + +/// SoundTouch library version id +#define SOUNDTOUCH_VERSION_ID (10701) + +// +// Available setting IDs for the 'setSetting' & 'get_setting' functions: + +/// Enable/disable anti-alias filter in pitch transposer (0 = disable) +#define SETTING_USE_AA_FILTER 0 + +/// Pitch transposer anti-alias filter length (8 .. 128 taps, default = 32) +#define SETTING_AA_FILTER_LENGTH 1 + +/// Enable/disable quick seeking algorithm in tempo changer routine +/// (enabling quick seeking lowers CPU utilization but causes a minor sound +/// quality compromising) +#define SETTING_USE_QUICKSEEK 2 + +/// Time-stretch algorithm single processing sequence length in milliseconds. This determines +/// to how long sequences the original sound is chopped in the time-stretch algorithm. +/// See "STTypes.h" or README for more information. +#define SETTING_SEQUENCE_MS 3 + +/// Time-stretch algorithm seeking window length in milliseconds for algorithm that finds the +/// best possible overlapping location. This determines from how wide window the algorithm +/// may look for an optimal joining location when mixing the sound sequences back together. +/// See "STTypes.h" or README for more information. +#define SETTING_SEEKWINDOW_MS 4 + +/// Time-stretch algorithm overlap length in milliseconds. When the chopped sound sequences +/// are mixed back together, to form a continuous sound stream, this parameter defines over +/// how long period the two consecutive sequences are let to overlap each other. +/// See "STTypes.h" or README for more information. +#define SETTING_OVERLAP_MS 5 + + +/// Call "getSetting" with this ID to query nominal average processing sequence +/// size in samples. This value tells approcimate value how many input samples +/// SoundTouch needs to gather before it does DSP processing run for the sample batch. +/// +/// Notices: +/// - This is read-only parameter, i.e. setSetting ignores this parameter +/// - Returned value is approximate average value, exact processing batch +/// size may wary from time to time +/// - This parameter value is not constant but may change depending on +/// tempo/pitch/rate/samplerate settings. +#define SETTING_NOMINAL_INPUT_SEQUENCE 6 + + +/// Call "getSetting" with this ID to query nominal average processing output +/// size in samples. This value tells approcimate value how many output samples +/// SoundTouch outputs once it does DSP processing run for a batch of input samples. +/// +/// Notices: +/// - This is read-only parameter, i.e. setSetting ignores this parameter +/// - Returned value is approximate average value, exact processing batch +/// size may wary from time to time +/// - This parameter value is not constant but may change depending on +/// tempo/pitch/rate/samplerate settings. +#define SETTING_NOMINAL_OUTPUT_SEQUENCE 7 + +class SoundTouch : public FIFOProcessor +{ +private: + /// Rate transposer class instance + class RateTransposer *pRateTransposer; + + /// Time-stretch class instance + class TDStretch *pTDStretch; + + /// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters. + float virtualRate; + + /// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters. + float virtualTempo; + + /// Virtual pitch parameter. Effective rate & tempo are calculated from these parameters. + float virtualPitch; + + /// Flag: Has sample rate been set? + BOOL bSrateSet; + + /// Calculates effective rate & tempo valuescfrom 'virtualRate', 'virtualTempo' and + /// 'virtualPitch' parameters. + void calcEffectiveRateAndTempo(); + +protected : + /// Number of channels + uint channels; + + /// Effective 'rate' value calculated from 'virtualRate', 'virtualTempo' and 'virtualPitch' + float rate; + + /// Effective 'tempo' value calculated from 'virtualRate', 'virtualTempo' and 'virtualPitch' + float tempo; + +public: + SoundTouch(); + virtual ~SoundTouch(); + + /// Get SoundTouch library version string + static const char *getVersionString(); + + /// Get SoundTouch library version Id + static uint getVersionId(); + + /// Sets new rate control value. Normal rate = 1.0, smaller values + /// represent slower rate, larger faster rates. + void setRate(float newRate); + + /// Sets new tempo control value. Normal tempo = 1.0, smaller values + /// represent slower tempo, larger faster tempo. + void setTempo(float newTempo); + + /// Sets new rate control value as a difference in percents compared + /// to the original rate (-50 .. +100 %) + void setRateChange(float newRate); + + /// Sets new tempo control value as a difference in percents compared + /// to the original tempo (-50 .. +100 %) + void setTempoChange(float newTempo); + + /// Sets new pitch control value. Original pitch = 1.0, smaller values + /// represent lower pitches, larger values higher pitch. + void setPitch(float newPitch); + + /// Sets pitch change in octaves compared to the original pitch + /// (-1.00 .. +1.00) + void setPitchOctaves(float newPitch); + + /// Sets pitch change in semi-tones compared to the original pitch + /// (-12 .. +12) + void setPitchSemiTones(int newPitch); + void setPitchSemiTones(float newPitch); + + /// Sets the number of channels, 1 = mono, 2 = stereo + void setChannels(uint numChannels); + + /// Sets sample rate. + void setSampleRate(uint srate); + + /// Flushes the last samples from the processing pipeline to the output. + /// Clears also the internal processing buffers. + // + /// Note: This function is meant for extracting the last samples of a sound + /// stream. This function may introduce additional blank samples in the end + /// of the sound stream, and thus it's not recommended to call this function + /// in the middle of a sound stream. + void flush(); + + /// Adds 'numSamples' pcs of samples from the 'samples' memory position into + /// the input of the object. Notice that sample rate _has_to_ be set before + /// calling this function, otherwise throws a runtime_error exception. + virtual void putSamples( + const SAMPLETYPE *samples, ///< Pointer to sample buffer. + uint numSamples ///< Number of samples in buffer. Notice + ///< that in case of stereo-sound a single sample + ///< contains data for both channels. + ); + + /// Clears all the samples in the object's output and internal processing + /// buffers. + virtual void clear(); + + /// Changes a setting controlling the processing system behaviour. See the + /// 'SETTING_...' defines for available setting ID's. + /// + /// \return 'TRUE' if the setting was succesfully changed + BOOL setSetting(int settingId, ///< Setting ID number. see SETTING_... defines. + int value ///< New setting value. + ); + + /// Reads a setting controlling the processing system behaviour. See the + /// 'SETTING_...' defines for available setting ID's. + /// + /// \return the setting value. + int getSetting(int settingId ///< Setting ID number, see SETTING_... defines. + ) const; + + /// Returns number of samples currently unprocessed. + virtual uint numUnprocessedSamples() const; + + + /// Other handy functions that are implemented in the ancestor classes (see + /// classes 'FIFOProcessor' and 'FIFOSamplePipe') + /// + /// - receiveSamples() : Use this function to receive 'ready' processed samples from SoundTouch. + /// - numSamples() : Get number of 'ready' samples that can be received with + /// function 'receiveSamples()' + /// - isEmpty() : Returns nonzero if there aren't any 'ready' samples. + /// - clear() : Clears all samples from ready/processing buffers. +}; + +} +#endif diff --git a/Externals/SoundTouch/SoundTouch.vcxproj b/Externals/SoundTouch/SoundTouch.vcxproj new file mode 100644 index 0000000000..8f5c475687 --- /dev/null +++ b/Externals/SoundTouch/SoundTouch.vcxproj @@ -0,0 +1,352 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {68A5DD20-7057-448B-8FE0-B6AC8D205509} + + + + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + Release\ + Release\ + Release\ + Release\ + Debug\ + Debug\ + Debug\ + Debug\ + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + Full + AnySuitable + true + %(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Release/SoundTouch.pch + Release/ + Release/ + Release/ + Level3 + true + + + Default + + + Win32\SoundTouch.lib + true + + + + + + + NDEBUG;%(PreprocessorDefinitions) + 0x040b + + + + + Full + AnySuitable + true + %(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + Release/SoundTouch.pch + Release/ + Release/ + Release/ + Level3 + true + + + Default + StreamingSIMDExtensions2 + + + Win64\SoundTouch.lib + true + + + + + + + NDEBUG;%(PreprocessorDefinitions) + 0x040b + + + + + Disabled + %(AdditionalIncludeDirectories) + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Debug/SoundTouch.pch + Debug/ + Debug/ + Debug/ + true + Level3 + true + EditAndContinue + Default + + + Win32\SoundTouch.lib + true + + + + + + + _DEBUG;%(PreprocessorDefinitions) + 0x040b + + + + + Disabled + %(AdditionalIncludeDirectories) + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Debug/SoundTouch.pch + Debug/ + Debug/ + Debug/ + true + Level3 + true + ProgramDatabase + Default + + + Win64\SoundTouchD.lib + true + + + + + + + _DEBUG;%(PreprocessorDefinitions) + 0x040b + + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + true + true + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + true + true + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + true + true + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + true + true + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + true + true + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + Disabled + Disabled + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + EnableFastChecks + EnableFastChecks + true + true + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Externals/SoundTouch/SoundTouch.vcxproj.filters b/Externals/SoundTouch/SoundTouch.vcxproj.filters new file mode 100644 index 0000000000..1dee5b2a6e --- /dev/null +++ b/Externals/SoundTouch/SoundTouch.vcxproj.filters @@ -0,0 +1,60 @@ + + + + + {b7786182-6345-4203-8b48-39eec5ec85dc} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {75380bb9-1e58-4186-a9cd-ec7cd284e6a5} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\bpm + + + Source Files\bpm + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Externals/SoundTouch/TDStretch.cpp b/Externals/SoundTouch/TDStretch.cpp new file mode 100644 index 0000000000..779cf7aa65 --- /dev/null +++ b/Externals/SoundTouch/TDStretch.cpp @@ -0,0 +1,808 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// Sampled sound tempo changer/time stretch algorithm. Changes the sound tempo +/// while maintaining the original pitch by using a time domain WSOLA-like +/// method with several performance-increasing tweaks. +/// +/// Note : MMX optimized functions reside in a separate, platform-specific +/// file, e.g. 'mmx_win.cpp' or 'mmx_gcc.cpp' +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-11-08 20:53:01 +0200 (Thu, 08 Nov 2012) $ +// File revision : $Revision: 1.12 $ +// +// $Id: TDStretch.cpp 160 2012-11-08 18:53:01Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include + +#include "STTypes.h" +#include "cpu_detect.h" +#include "TDStretch.h" + +#include + +using namespace soundtouch; + +#define max(x, y) (((x) > (y)) ? (x) : (y)) + + +/***************************************************************************** + * + * Constant definitions + * + *****************************************************************************/ + +// Table for the hierarchical mixing position seeking algorithm +static const short _scanOffsets[5][24]={ + { 124, 186, 248, 310, 372, 434, 496, 558, 620, 682, 744, 806, + 868, 930, 992, 1054, 1116, 1178, 1240, 1302, 1364, 1426, 1488, 0}, + {-100, -75, -50, -25, 25, 50, 75, 100, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { -20, -15, -10, -5, 5, 10, 15, 20, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { -4, -3, -2, -1, 1, 2, 3, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 121, 114, 97, 114, 98, 105, 108, 32, 104, 99, 117, 111, + 116, 100, 110, 117, 111, 115, 0, 0, 0, 0, 0, 0}}; + +/***************************************************************************** + * + * Implementation of the class 'TDStretch' + * + *****************************************************************************/ + + +TDStretch::TDStretch() : FIFOProcessor(&outputBuffer) +{ + bQuickSeek = FALSE; + channels = 2; + + pMidBuffer = NULL; + pMidBufferUnaligned = NULL; + overlapLength = 0; + + bAutoSeqSetting = TRUE; + bAutoSeekSetting = TRUE; + +// outDebt = 0; + skipFract = 0; + + tempo = 1.0f; + setParameters(44100, DEFAULT_SEQUENCE_MS, DEFAULT_SEEKWINDOW_MS, DEFAULT_OVERLAP_MS); + setTempo(1.0f); + + clear(); +} + + + +TDStretch::~TDStretch() +{ + delete[] pMidBufferUnaligned; +} + + + +// Sets routine control parameters. These control are certain time constants +// defining how the sound is stretched to the desired duration. +// +// 'sampleRate' = sample rate of the sound +// 'sequenceMS' = one processing sequence length in milliseconds (default = 82 ms) +// 'seekwindowMS' = seeking window length for scanning the best overlapping +// position (default = 28 ms) +// 'overlapMS' = overlapping length (default = 12 ms) + +void TDStretch::setParameters(int aSampleRate, int aSequenceMS, + int aSeekWindowMS, int aOverlapMS) +{ + // accept only positive parameter values - if zero or negative, use old values instead + if (aSampleRate > 0) this->sampleRate = aSampleRate; + if (aOverlapMS > 0) this->overlapMs = aOverlapMS; + + if (aSequenceMS > 0) + { + this->sequenceMs = aSequenceMS; + bAutoSeqSetting = FALSE; + } + else if (aSequenceMS == 0) + { + // if zero, use automatic setting + bAutoSeqSetting = TRUE; + } + + if (aSeekWindowMS > 0) + { + this->seekWindowMs = aSeekWindowMS; + bAutoSeekSetting = FALSE; + } + else if (aSeekWindowMS == 0) + { + // if zero, use automatic setting + bAutoSeekSetting = TRUE; + } + + calcSeqParameters(); + + calculateOverlapLength(overlapMs); + + // set tempo to recalculate 'sampleReq' + setTempo(tempo); + +} + + + +/// Get routine control parameters, see setParameters() function. +/// Any of the parameters to this function can be NULL, in such case corresponding parameter +/// value isn't returned. +void TDStretch::getParameters(int *pSampleRate, int *pSequenceMs, int *pSeekWindowMs, int *pOverlapMs) const +{ + if (pSampleRate) + { + *pSampleRate = sampleRate; + } + + if (pSequenceMs) + { + *pSequenceMs = (bAutoSeqSetting) ? (USE_AUTO_SEQUENCE_LEN) : sequenceMs; + } + + if (pSeekWindowMs) + { + *pSeekWindowMs = (bAutoSeekSetting) ? (USE_AUTO_SEEKWINDOW_LEN) : seekWindowMs; + } + + if (pOverlapMs) + { + *pOverlapMs = overlapMs; + } +} + + +// Overlaps samples in 'midBuffer' with the samples in 'pInput' +void TDStretch::overlapMono(SAMPLETYPE *pOutput, const SAMPLETYPE *pInput) const +{ + int i; + SAMPLETYPE m1, m2; + + m1 = (SAMPLETYPE)0; + m2 = (SAMPLETYPE)overlapLength; + + for (i = 0; i < overlapLength ; i ++) + { + pOutput[i] = (pInput[i] * m1 + pMidBuffer[i] * m2 ) / overlapLength; + m1 += 1; + m2 -= 1; + } +} + + + +void TDStretch::clearMidBuffer() +{ + memset(pMidBuffer, 0, 2 * sizeof(SAMPLETYPE) * overlapLength); +} + + +void TDStretch::clearInput() +{ + inputBuffer.clear(); + clearMidBuffer(); +} + + +// Clears the sample buffers +void TDStretch::clear() +{ + outputBuffer.clear(); + clearInput(); +} + + + +// Enables/disables the quick position seeking algorithm. Zero to disable, nonzero +// to enable +void TDStretch::enableQuickSeek(BOOL enable) +{ + bQuickSeek = enable; +} + + +// Returns nonzero if the quick seeking algorithm is enabled. +BOOL TDStretch::isQuickSeekEnabled() const +{ + return bQuickSeek; +} + + +// Seeks for the optimal overlap-mixing position. +int TDStretch::seekBestOverlapPosition(const SAMPLETYPE *refPos) +{ + if (bQuickSeek) + { + return seekBestOverlapPositionQuick(refPos); + } + else + { + return seekBestOverlapPositionFull(refPos); + } +} + + +// Overlaps samples in 'midBuffer' with the samples in 'pInputBuffer' at position +// of 'ovlPos'. +inline void TDStretch::overlap(SAMPLETYPE *pOutput, const SAMPLETYPE *pInput, uint ovlPos) const +{ + if (channels == 2) + { + // stereo sound + overlapStereo(pOutput, pInput + 2 * ovlPos); + } else { + // mono sound. + overlapMono(pOutput, pInput + ovlPos); + } +} + + + +// Seeks for the optimal overlap-mixing position. The 'stereo' version of the +// routine +// +// The best position is determined as the position where the two overlapped +// sample sequences are 'most alike', in terms of the highest cross-correlation +// value over the overlapping period +int TDStretch::seekBestOverlapPositionFull(const SAMPLETYPE *refPos) +{ + int bestOffs; + double bestCorr, corr; + int i; + + bestCorr = FLT_MIN; + bestOffs = 0; + + // Scans for the best correlation value by testing each possible position + // over the permitted range. + for (i = 0; i < seekLength; i ++) + { + // Calculates correlation value for the mixing position corresponding + // to 'i' + corr = calcCrossCorr(refPos + channels * i, pMidBuffer); + // heuristic rule to slightly favour values close to mid of the range + double tmp = (double)(2 * i - seekLength) / (double)seekLength; + corr = ((corr + 0.1) * (1.0 - 0.25 * tmp * tmp)); + + // Checks for the highest correlation value + if (corr > bestCorr) + { + bestCorr = corr; + bestOffs = i; + } + } + // clear cross correlation routine state if necessary (is so e.g. in MMX routines). + clearCrossCorrState(); + + return bestOffs; +} + + +// Seeks for the optimal overlap-mixing position. The 'stereo' version of the +// routine +// +// The best position is determined as the position where the two overlapped +// sample sequences are 'most alike', in terms of the highest cross-correlation +// value over the overlapping period +int TDStretch::seekBestOverlapPositionQuick(const SAMPLETYPE *refPos) +{ + int j; + int bestOffs; + double bestCorr, corr; + int scanCount, corrOffset, tempOffset; + + bestCorr = FLT_MIN; + bestOffs = _scanOffsets[0][0]; + corrOffset = 0; + tempOffset = 0; + + // Scans for the best correlation value using four-pass hierarchical search. + // + // The look-up table 'scans' has hierarchical position adjusting steps. + // In first pass the routine searhes for the highest correlation with + // relatively coarse steps, then rescans the neighbourhood of the highest + // correlation with better resolution and so on. + for (scanCount = 0;scanCount < 4; scanCount ++) + { + j = 0; + while (_scanOffsets[scanCount][j]) + { + tempOffset = corrOffset + _scanOffsets[scanCount][j]; + if (tempOffset >= seekLength) break; + + // Calculates correlation value for the mixing position corresponding + // to 'tempOffset' + corr = (double)calcCrossCorr(refPos + channels * tempOffset, pMidBuffer); + // heuristic rule to slightly favour values close to mid of the range + double tmp = (double)(2 * tempOffset - seekLength) / seekLength; + corr = ((corr + 0.1) * (1.0 - 0.25 * tmp * tmp)); + + // Checks for the highest correlation value + if (corr > bestCorr) + { + bestCorr = corr; + bestOffs = tempOffset; + } + j ++; + } + corrOffset = bestOffs; + } + // clear cross correlation routine state if necessary (is so e.g. in MMX routines). + clearCrossCorrState(); + + return bestOffs; +} + + + +/// clear cross correlation routine state if necessary +void TDStretch::clearCrossCorrState() +{ + // default implementation is empty. +} + + +/// Calculates processing sequence length according to tempo setting +void TDStretch::calcSeqParameters() +{ + // Adjust tempo param according to tempo, so that variating processing sequence length is used + // at varius tempo settings, between the given low...top limits + #define AUTOSEQ_TEMPO_LOW 0.5 // auto setting low tempo range (-50%) + #define AUTOSEQ_TEMPO_TOP 2.0 // auto setting top tempo range (+100%) + + // sequence-ms setting values at above low & top tempo + #define AUTOSEQ_AT_MIN 125.0 + #define AUTOSEQ_AT_MAX 50.0 + #define AUTOSEQ_K ((AUTOSEQ_AT_MAX - AUTOSEQ_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW)) + #define AUTOSEQ_C (AUTOSEQ_AT_MIN - (AUTOSEQ_K) * (AUTOSEQ_TEMPO_LOW)) + + // seek-window-ms setting values at above low & top tempo + #define AUTOSEEK_AT_MIN 25.0 + #define AUTOSEEK_AT_MAX 15.0 + #define AUTOSEEK_K ((AUTOSEEK_AT_MAX - AUTOSEEK_AT_MIN) / (AUTOSEQ_TEMPO_TOP - AUTOSEQ_TEMPO_LOW)) + #define AUTOSEEK_C (AUTOSEEK_AT_MIN - (AUTOSEEK_K) * (AUTOSEQ_TEMPO_LOW)) + + #define CHECK_LIMITS(x, mi, ma) (((x) < (mi)) ? (mi) : (((x) > (ma)) ? (ma) : (x))) + + double seq, seek; + + if (bAutoSeqSetting) + { + seq = AUTOSEQ_C + AUTOSEQ_K * tempo; + seq = CHECK_LIMITS(seq, AUTOSEQ_AT_MAX, AUTOSEQ_AT_MIN); + sequenceMs = (int)(seq + 0.5); + } + + if (bAutoSeekSetting) + { + seek = AUTOSEEK_C + AUTOSEEK_K * tempo; + seek = CHECK_LIMITS(seek, AUTOSEEK_AT_MAX, AUTOSEEK_AT_MIN); + seekWindowMs = (int)(seek + 0.5); + } + + // Update seek window lengths + seekWindowLength = (sampleRate * sequenceMs) / 1000; + if (seekWindowLength < 2 * overlapLength) + { + seekWindowLength = 2 * overlapLength; + } + seekLength = (sampleRate * seekWindowMs) / 1000; +} + + + +// Sets new target tempo. Normal tempo = 'SCALE', smaller values represent slower +// tempo, larger faster tempo. +void TDStretch::setTempo(float newTempo) +{ + int intskip; + + tempo = newTempo; + + // Calculate new sequence duration + calcSeqParameters(); + + // Calculate ideal skip length (according to tempo value) + nominalSkip = tempo * (seekWindowLength - overlapLength); + intskip = (int)(nominalSkip + 0.5f); + + // Calculate how many samples are needed in the 'inputBuffer' to + // process another batch of samples + //sampleReq = max(intskip + overlapLength, seekWindowLength) + seekLength / 2; + sampleReq = max(intskip + overlapLength, seekWindowLength) + seekLength; +} + + + +// Sets the number of channels, 1 = mono, 2 = stereo +void TDStretch::setChannels(int numChannels) +{ + assert(numChannels > 0); + if (channels == numChannels) return; + assert(numChannels == 1 || numChannels == 2); + + channels = numChannels; + inputBuffer.setChannels(channels); + outputBuffer.setChannels(channels); +} + + +// nominal tempo, no need for processing, just pass the samples through +// to outputBuffer +/* +void TDStretch::processNominalTempo() +{ + assert(tempo == 1.0f); + + if (bMidBufferDirty) + { + // If there are samples in pMidBuffer waiting for overlapping, + // do a single sliding overlapping with them in order to prevent a + // clicking distortion in the output sound + if (inputBuffer.numSamples() < overlapLength) + { + // wait until we've got overlapLength input samples + return; + } + // Mix the samples in the beginning of 'inputBuffer' with the + // samples in 'midBuffer' using sliding overlapping + overlap(outputBuffer.ptrEnd(overlapLength), inputBuffer.ptrBegin(), 0); + outputBuffer.putSamples(overlapLength); + inputBuffer.receiveSamples(overlapLength); + clearMidBuffer(); + // now we've caught the nominal sample flow and may switch to + // bypass mode + } + + // Simply bypass samples from input to output + outputBuffer.moveSamples(inputBuffer); +} +*/ + +#include + +// Processes as many processing frames of the samples 'inputBuffer', store +// the result into 'outputBuffer' +void TDStretch::processSamples() +{ + int ovlSkip, offset; + int temp; + + /* Removed this small optimization - can introduce a click to sound when tempo setting + crosses the nominal value + if (tempo == 1.0f) + { + // tempo not changed from the original, so bypass the processing + processNominalTempo(); + return; + } + */ + + // Process samples as long as there are enough samples in 'inputBuffer' + // to form a processing frame. + while ((int)inputBuffer.numSamples() >= sampleReq) + { + // If tempo differs from the normal ('SCALE'), scan for the best overlapping + // position + offset = seekBestOverlapPosition(inputBuffer.ptrBegin()); + + // Mix the samples in the 'inputBuffer' at position of 'offset' with the + // samples in 'midBuffer' using sliding overlapping + // ... first partially overlap with the end of the previous sequence + // (that's in 'midBuffer') + overlap(outputBuffer.ptrEnd((uint)overlapLength), inputBuffer.ptrBegin(), (uint)offset); + outputBuffer.putSamples((uint)overlapLength); + + // ... then copy sequence samples from 'inputBuffer' to output: + + // length of sequence + temp = (seekWindowLength - 2 * overlapLength); + + // crosscheck that we don't have buffer overflow... + if ((int)inputBuffer.numSamples() < (offset + temp + overlapLength * 2)) + { + continue; // just in case, shouldn't really happen + } + + outputBuffer.putSamples(inputBuffer.ptrBegin() + channels * (offset + overlapLength), (uint)temp); + + // Copies the end of the current sequence from 'inputBuffer' to + // 'midBuffer' for being mixed with the beginning of the next + // processing sequence and so on + assert((offset + temp + overlapLength * 2) <= (int)inputBuffer.numSamples()); + memcpy(pMidBuffer, inputBuffer.ptrBegin() + channels * (offset + temp + overlapLength), + channels * sizeof(SAMPLETYPE) * overlapLength); + + // Remove the processed samples from the input buffer. Update + // the difference between integer & nominal skip step to 'skipFract' + // in order to prevent the error from accumulating over time. + skipFract += nominalSkip; // real skip size + ovlSkip = (int)skipFract; // rounded to integer skip + skipFract -= ovlSkip; // maintain the fraction part, i.e. real vs. integer skip + inputBuffer.receiveSamples((uint)ovlSkip); + } +} + + +// Adds 'numsamples' pcs of samples from the 'samples' memory position into +// the input of the object. +void TDStretch::putSamples(const SAMPLETYPE *samples, uint nSamples) +{ + // Add the samples into the input buffer + inputBuffer.putSamples(samples, nSamples); + // Process the samples in input buffer + processSamples(); +} + + + +/// Set new overlap length parameter & reallocate RefMidBuffer if necessary. +void TDStretch::acceptNewOverlapLength(int newOverlapLength) +{ + int prevOvl; + + assert(newOverlapLength >= 0); + prevOvl = overlapLength; + overlapLength = newOverlapLength; + + if (overlapLength > prevOvl) + { + delete[] pMidBufferUnaligned; + + pMidBufferUnaligned = new SAMPLETYPE[overlapLength * 2 + 16 / sizeof(SAMPLETYPE)]; + // ensure that 'pMidBuffer' is aligned to 16 byte boundary for efficiency + pMidBuffer = (SAMPLETYPE *)SOUNDTOUCH_ALIGN_POINTER_16(pMidBufferUnaligned); + + clearMidBuffer(); + } +} + + +// Operator 'new' is overloaded so that it automatically creates a suitable instance +// depending on if we've a MMX/SSE/etc-capable CPU available or not. +void * TDStretch::operator new(size_t s) +{ + // Notice! don't use "new TDStretch" directly, use "newInstance" to create a new instance instead! + ST_THROW_RT_ERROR("Error in TDStretch::new: Don't use 'new TDStretch' directly, use 'newInstance' member instead!"); + return newInstance(); +} + + +TDStretch * TDStretch::newInstance() +{ + uint uExtensions; + + uExtensions = detectCPUextensions(); + + // Check if MMX/SSE instruction set extensions supported by CPU + +#ifdef SOUNDTOUCH_ALLOW_MMX + // MMX routines available only with integer sample types + if (uExtensions & SUPPORT_MMX) + { + return ::new TDStretchMMX; + } + else +#endif // SOUNDTOUCH_ALLOW_MMX + + +#ifdef SOUNDTOUCH_ALLOW_SSE + if (uExtensions & SUPPORT_SSE) + { + // SSE support + return ::new TDStretchSSE; + } + else +#endif // SOUNDTOUCH_ALLOW_SSE + + { + // ISA optimizations not supported, use plain C version + return ::new TDStretch; + } +} + + +////////////////////////////////////////////////////////////////////////////// +// +// Integer arithmetics specific algorithm implementations. +// +////////////////////////////////////////////////////////////////////////////// + +#ifdef SOUNDTOUCH_INTEGER_SAMPLES + +// Overlaps samples in 'midBuffer' with the samples in 'input'. The 'Stereo' +// version of the routine. +void TDStretch::overlapStereo(short *poutput, const short *input) const +{ + int i; + short temp; + int cnt2; + + for (i = 0; i < overlapLength ; i ++) + { + temp = (short)(overlapLength - i); + cnt2 = 2 * i; + poutput[cnt2] = (input[cnt2] * i + pMidBuffer[cnt2] * temp ) / overlapLength; + poutput[cnt2 + 1] = (input[cnt2 + 1] * i + pMidBuffer[cnt2 + 1] * temp ) / overlapLength; + } +} + +// Calculates the x having the closest 2^x value for the given value +static int _getClosest2Power(double value) +{ + return (int)(log(value) / log(2.0) + 0.5); +} + + +/// Calculates overlap period length in samples. +/// Integer version rounds overlap length to closest power of 2 +/// for a divide scaling operation. +void TDStretch::calculateOverlapLength(int aoverlapMs) +{ + int newOvl; + + assert(aoverlapMs >= 0); + + // calculate overlap length so that it's power of 2 - thus it's easy to do + // integer division by right-shifting. Term "-1" at end is to account for + // the extra most significatnt bit left unused in result by signed multiplication + overlapDividerBits = _getClosest2Power((sampleRate * aoverlapMs) / 1000.0) - 1; + if (overlapDividerBits > 9) overlapDividerBits = 9; + if (overlapDividerBits < 3) overlapDividerBits = 3; + newOvl = (int)pow(2.0, (int)overlapDividerBits + 1); // +1 => account for -1 above + + acceptNewOverlapLength(newOvl); + + // calculate sloping divider so that crosscorrelation operation won't + // overflow 32-bit register. Max. sum of the crosscorrelation sum without + // divider would be 2^30*(N^3-N)/3, where N = overlap length + slopingDivider = (newOvl * newOvl - 1) / 3; +} + + +double TDStretch::calcCrossCorr(const short *mixingPos, const short *compare) const +{ + long corr; + long norm; + int i; + + corr = norm = 0; + // Same routine for stereo and mono. For stereo, unroll loop for better + // efficiency and gives slightly better resolution against rounding. + // For mono it same routine, just unrolls loop by factor of 4 + for (i = 0; i < channels * overlapLength; i += 4) + { + corr += (mixingPos[i] * compare[i] + + mixingPos[i + 1] * compare[i + 1] + + mixingPos[i + 2] * compare[i + 2] + + mixingPos[i + 3] * compare[i + 3]) >> overlapDividerBits; + norm += (mixingPos[i] * mixingPos[i] + + mixingPos[i + 1] * mixingPos[i + 1] + + mixingPos[i + 2] * mixingPos[i + 2] + + mixingPos[i + 3] * mixingPos[i + 3]) >> overlapDividerBits; + } + + // Normalize result by dividing by sqrt(norm) - this step is easiest + // done using floating point operation + if (norm == 0) norm = 1; // to avoid div by zero + return (double)corr / sqrt((double)norm); +} + +#endif // SOUNDTOUCH_INTEGER_SAMPLES + +////////////////////////////////////////////////////////////////////////////// +// +// Floating point arithmetics specific algorithm implementations. +// + +#ifdef SOUNDTOUCH_FLOAT_SAMPLES + +// Overlaps samples in 'midBuffer' with the samples in 'pInput' +void TDStretch::overlapStereo(float *pOutput, const float *pInput) const +{ + int i; + float fScale; + float f1; + float f2; + + fScale = 1.0f / (float)overlapLength; + + f1 = 0; + f2 = 1.0f; + + for (i = 0; i < 2 * (int)overlapLength ; i += 2) + { + pOutput[i + 0] = pInput[i + 0] * f1 + pMidBuffer[i + 0] * f2; + pOutput[i + 1] = pInput[i + 1] * f1 + pMidBuffer[i + 1] * f2; + + f1 += fScale; + f2 -= fScale; + } +} + + +/// Calculates overlapInMsec period length in samples. +void TDStretch::calculateOverlapLength(int overlapInMsec) +{ + int newOvl; + + assert(overlapInMsec >= 0); + newOvl = (sampleRate * overlapInMsec) / 1000; + if (newOvl < 16) newOvl = 16; + + // must be divisible by 8 + newOvl -= newOvl % 8; + + acceptNewOverlapLength(newOvl); +} + + +double TDStretch::calcCrossCorr(const float *mixingPos, const float *compare) const +{ + double corr; + double norm; + int i; + + corr = norm = 0; + // Same routine for stereo and mono. For Stereo, unroll by factor of 2. + // For mono it's same routine yet unrollsd by factor of 4. + for (i = 0; i < channels * overlapLength; i += 4) + { + corr += mixingPos[i] * compare[i] + + mixingPos[i + 1] * compare[i + 1]; + + norm += mixingPos[i] * mixingPos[i] + + mixingPos[i + 1] * mixingPos[i + 1]; + + // unroll the loop for better CPU efficiency: + corr += mixingPos[i + 2] * compare[i + 2] + + mixingPos[i + 3] * compare[i + 3]; + + norm += mixingPos[i + 2] * mixingPos[i + 2] + + mixingPos[i + 3] * mixingPos[i + 3]; + } + + if (norm < 1e-9) norm = 1.0; // to avoid div by zero + return corr / sqrt(norm); +} + +#endif // SOUNDTOUCH_FLOAT_SAMPLES diff --git a/Externals/SoundTouch/TDStretch.h b/Externals/SoundTouch/TDStretch.h new file mode 100644 index 0000000000..6d6e7359ff --- /dev/null +++ b/Externals/SoundTouch/TDStretch.h @@ -0,0 +1,268 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// Sampled sound tempo changer/time stretch algorithm. Changes the sound tempo +/// while maintaining the original pitch by using a time domain WSOLA-like method +/// with several performance-increasing tweaks. +/// +/// Note : MMX/SSE optimized functions reside in separate, platform-specific files +/// 'mmx_optimized.cpp' and 'sse_optimized.cpp' +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-04-01 22:49:30 +0300 (Sun, 01 Apr 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: TDStretch.h 137 2012-04-01 19:49:30Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef TDStretch_H +#define TDStretch_H + +#include +#include "STTypes.h" +#include "RateTransposer.h" +#include "FIFOSamplePipe.h" + +namespace soundtouch +{ + +/// Default values for sound processing parameters: +/// Notice that the default parameters are tuned for contemporary popular music +/// processing. For speech processing applications these parameters suit better: +/// #define DEFAULT_SEQUENCE_MS 40 +/// #define DEFAULT_SEEKWINDOW_MS 15 +/// #define DEFAULT_OVERLAP_MS 8 +/// + +/// Default length of a single processing sequence, in milliseconds. This determines to how +/// long sequences the original sound is chopped in the time-stretch algorithm. +/// +/// The larger this value is, the lesser sequences are used in processing. In principle +/// a bigger value sounds better when slowing down tempo, but worse when increasing tempo +/// and vice versa. +/// +/// Increasing this value reduces computational burden & vice versa. +//#define DEFAULT_SEQUENCE_MS 40 +#define DEFAULT_SEQUENCE_MS USE_AUTO_SEQUENCE_LEN + +/// Giving this value for the sequence length sets automatic parameter value +/// according to tempo setting (recommended) +#define USE_AUTO_SEQUENCE_LEN 0 + +/// Seeking window default length in milliseconds for algorithm that finds the best possible +/// overlapping location. This determines from how wide window the algorithm may look for an +/// optimal joining location when mixing the sound sequences back together. +/// +/// The bigger this window setting is, the higher the possibility to find a better mixing +/// position will become, but at the same time large values may cause a "drifting" artifact +/// because consequent sequences will be taken at more uneven intervals. +/// +/// If there's a disturbing artifact that sounds as if a constant frequency was drifting +/// around, try reducing this setting. +/// +/// Increasing this value increases computational burden & vice versa. +//#define DEFAULT_SEEKWINDOW_MS 15 +#define DEFAULT_SEEKWINDOW_MS USE_AUTO_SEEKWINDOW_LEN + +/// Giving this value for the seek window length sets automatic parameter value +/// according to tempo setting (recommended) +#define USE_AUTO_SEEKWINDOW_LEN 0 + +/// Overlap length in milliseconds. When the chopped sound sequences are mixed back together, +/// to form a continuous sound stream, this parameter defines over how long period the two +/// consecutive sequences are let to overlap each other. +/// +/// This shouldn't be that critical parameter. If you reduce the DEFAULT_SEQUENCE_MS setting +/// by a large amount, you might wish to try a smaller value on this. +/// +/// Increasing this value increases computational burden & vice versa. +#define DEFAULT_OVERLAP_MS 8 + + +/// Class that does the time-stretch (tempo change) effect for the processed +/// sound. +class TDStretch : public FIFOProcessor +{ +protected: + int channels; + int sampleReq; + float tempo; + + SAMPLETYPE *pMidBuffer; + SAMPLETYPE *pMidBufferUnaligned; + int overlapLength; + int seekLength; + int seekWindowLength; + int overlapDividerBits; + int slopingDivider; + float nominalSkip; + float skipFract; + FIFOSampleBuffer outputBuffer; + FIFOSampleBuffer inputBuffer; + BOOL bQuickSeek; + + int sampleRate; + int sequenceMs; + int seekWindowMs; + int overlapMs; + BOOL bAutoSeqSetting; + BOOL bAutoSeekSetting; + + void acceptNewOverlapLength(int newOverlapLength); + + virtual void clearCrossCorrState(); + void calculateOverlapLength(int overlapMs); + + virtual double calcCrossCorr(const SAMPLETYPE *mixingPos, const SAMPLETYPE *compare) const; + + virtual int seekBestOverlapPositionFull(const SAMPLETYPE *refPos); + virtual int seekBestOverlapPositionQuick(const SAMPLETYPE *refPos); + int seekBestOverlapPosition(const SAMPLETYPE *refPos); + + virtual void overlapStereo(SAMPLETYPE *output, const SAMPLETYPE *input) const; + virtual void overlapMono(SAMPLETYPE *output, const SAMPLETYPE *input) const; + + void clearMidBuffer(); + void overlap(SAMPLETYPE *output, const SAMPLETYPE *input, uint ovlPos) const; + + void calcSeqParameters(); + + /// Changes the tempo of the given sound samples. + /// Returns amount of samples returned in the "output" buffer. + /// The maximum amount of samples that can be returned at a time is set by + /// the 'set_returnBuffer_size' function. + void processSamples(); + +public: + TDStretch(); + virtual ~TDStretch(); + + /// Operator 'new' is overloaded so that it automatically creates a suitable instance + /// depending on if we've a MMX/SSE/etc-capable CPU available or not. + static void *operator new(size_t s); + + /// Use this function instead of "new" operator to create a new instance of this class. + /// This function automatically chooses a correct feature set depending on if the CPU + /// supports MMX/SSE/etc extensions. + static TDStretch *newInstance(); + + /// Returns the output buffer object + FIFOSamplePipe *getOutput() { return &outputBuffer; }; + + /// Returns the input buffer object + FIFOSamplePipe *getInput() { return &inputBuffer; }; + + /// Sets new target tempo. Normal tempo = 'SCALE', smaller values represent slower + /// tempo, larger faster tempo. + void setTempo(float newTempo); + + /// Returns nonzero if there aren't any samples available for outputting. + virtual void clear(); + + /// Clears the input buffer + void clearInput(); + + /// Sets the number of channels, 1 = mono, 2 = stereo + void setChannels(int numChannels); + + /// Enables/disables the quick position seeking algorithm. Zero to disable, + /// nonzero to enable + void enableQuickSeek(BOOL enable); + + /// Returns nonzero if the quick seeking algorithm is enabled. + BOOL isQuickSeekEnabled() const; + + /// Sets routine control parameters. These control are certain time constants + /// defining how the sound is stretched to the desired duration. + // + /// 'sampleRate' = sample rate of the sound + /// 'sequenceMS' = one processing sequence length in milliseconds + /// 'seekwindowMS' = seeking window length for scanning the best overlapping + /// position + /// 'overlapMS' = overlapping length + void setParameters(int sampleRate, ///< Samplerate of sound being processed (Hz) + int sequenceMS = -1, ///< Single processing sequence length (ms) + int seekwindowMS = -1, ///< Offset seeking window length (ms) + int overlapMS = -1 ///< Sequence overlapping length (ms) + ); + + /// Get routine control parameters, see setParameters() function. + /// Any of the parameters to this function can be NULL, in such case corresponding parameter + /// value isn't returned. + void getParameters(int *pSampleRate, int *pSequenceMs, int *pSeekWindowMs, int *pOverlapMs) const; + + /// Adds 'numsamples' pcs of samples from the 'samples' memory position into + /// the input of the object. + virtual void putSamples( + const SAMPLETYPE *samples, ///< Input sample data + uint numSamples ///< Number of samples in 'samples' so that one sample + ///< contains both channels if stereo + ); + + /// return nominal input sample requirement for triggering a processing batch + int getInputSampleReq() const + { + return (int)(nominalSkip + 0.5); + } + + /// return nominal output sample amount when running a processing batch + int getOutputBatchSize() const + { + return seekWindowLength - overlapLength; + } +}; + + + +// Implementation-specific class declarations: + +#ifdef SOUNDTOUCH_ALLOW_MMX + /// Class that implements MMX optimized routines for 16bit integer samples type. + class TDStretchMMX : public TDStretch + { + protected: + double calcCrossCorr(const short *mixingPos, const short *compare) const; + virtual void overlapStereo(short *output, const short *input) const; + virtual void clearCrossCorrState(); + }; +#endif /// SOUNDTOUCH_ALLOW_MMX + + +#ifdef SOUNDTOUCH_ALLOW_SSE + /// Class that implements SSE optimized routines for floating point samples type. + class TDStretchSSE : public TDStretch + { + protected: + double calcCrossCorr(const float *mixingPos, const float *compare) const; + }; + +#endif /// SOUNDTOUCH_ALLOW_SSE + +} +#endif /// TDStretch_H diff --git a/Externals/SoundTouch/cpu_detect.h b/Externals/SoundTouch/cpu_detect.h new file mode 100644 index 0000000000..7859ffb55d --- /dev/null +++ b/Externals/SoundTouch/cpu_detect.h @@ -0,0 +1,62 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// A header file for detecting the Intel MMX instructions set extension. +/// +/// Please see 'mmx_win.cpp', 'mmx_cpp.cpp' and 'mmx_non_x86.cpp' for the +/// routine implementations for x86 Windows, x86 gnu version and non-x86 +/// platforms, respectively. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2008-02-10 18:26:55 +0200 (Sun, 10 Feb 2008) $ +// File revision : $Revision: 4 $ +// +// $Id: cpu_detect.h 11 2008-02-10 16:26:55Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef _CPU_DETECT_H_ +#define _CPU_DETECT_H_ + +#include "STTypes.h" + +#define SUPPORT_MMX 0x0001 +#define SUPPORT_3DNOW 0x0002 +#define SUPPORT_ALTIVEC 0x0004 +#define SUPPORT_SSE 0x0008 +#define SUPPORT_SSE2 0x0010 + +/// Checks which instruction set extensions are supported by the CPU. +/// +/// \return A bitmask of supported extensions, see SUPPORT_... defines. +uint detectCPUextensions(void); + +/// Disables given set of instruction extensions. See SUPPORT_... defines. +void disableExtensions(uint wDisableMask); + +#endif // _CPU_DETECT_H_ diff --git a/Externals/SoundTouch/cpu_detect_x86.cpp b/Externals/SoundTouch/cpu_detect_x86.cpp new file mode 100644 index 0000000000..fff3240d8a --- /dev/null +++ b/Externals/SoundTouch/cpu_detect_x86.cpp @@ -0,0 +1,137 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// Generic version of the x86 CPU extension detection routine. +/// +/// This file is for GNU & other non-Windows compilers, see 'cpu_detect_x86_win.cpp' +/// for the Microsoft compiler version. +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-11-08 20:44:37 +0200 (Thu, 08 Nov 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: cpu_detect_x86.cpp 159 2012-11-08 18:44:37Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#include "cpu_detect.h" +#include "STTypes.h" + +#if defined(SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS) + + #if defined(__GNUC__) && defined(__i386__) + // gcc + #include "cpuid.h" + #elif defined(_M_IX86) + // windows non-gcc + #include + #define bit_MMX (1 << 23) + #define bit_SSE (1 << 25) + #define bit_SSE2 (1 << 26) + #endif + +#endif + + +////////////////////////////////////////////////////////////////////////////// +// +// processor instructions extension detection routines +// +////////////////////////////////////////////////////////////////////////////// + +// Flag variable indicating whick ISA extensions are disabled (for debugging) +static uint _dwDisabledISA = 0x00; // 0xffffffff; //<- use this to disable all extensions + +// Disables given set of instruction extensions. See SUPPORT_... defines. +void disableExtensions(uint dwDisableMask) +{ + _dwDisabledISA = dwDisableMask; +} + + + +/// Checks which instruction set extensions are supported by the CPU. +uint detectCPUextensions(void) +{ +/// If building for a 64bit system (no Itanium) and the user wants optimizations. +/// Return the OR of SUPPORT_{MMX,SSE,SSE2}. 11001 or 0x19. +/// Keep the _dwDisabledISA test (2 more operations, could be eliminated). +#if ((defined(__GNUC__) && defined(__x86_64__)) \ + || defined(_M_X64)) \ + && defined(SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS) + return 0x19 & ~_dwDisabledISA; + +/// If building for a 32bit system and the user wants optimizations. +/// Keep the _dwDisabledISA test (2 more operations, could be eliminated). +#elif ((defined(__GNUC__) && defined(__i386__)) \ + || defined(_M_IX86)) \ + && defined(SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS) + + if (_dwDisabledISA == 0xffffffff) return 0; + + uint res = 0; + +#if defined(__GNUC__) + // GCC version of cpuid. Requires GCC 4.3.0 or later for __cpuid intrinsic support. + uint eax, ebx, ecx, edx; // unsigned int is the standard type. uint is defined by the compiler and not guaranteed to be portable. + + // Check if no cpuid support. + if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) return 0; // always disable extensions. + + if (edx & bit_MMX) res = res | SUPPORT_MMX; + if (edx & bit_SSE) res = res | SUPPORT_SSE; + if (edx & bit_SSE2) res = res | SUPPORT_SSE2; + +#else + // Window / VS version of cpuid. Notice that Visual Studio 2005 or later required + // for __cpuid intrinsic support. + int reg[4] = {-1}; + + // Check if no cpuid support. + __cpuid(reg,0); + if ((unsigned int)reg[0] == 0) return 0; // always disable extensions. + + __cpuid(reg,1); + if ((unsigned int)reg[3] & bit_MMX) res = res | SUPPORT_MMX; + if ((unsigned int)reg[3] & bit_SSE) res = res | SUPPORT_SSE; + if ((unsigned int)reg[3] & bit_SSE2) res = res | SUPPORT_SSE2; + +#endif + + return res & ~_dwDisabledISA; + +#else + +/// One of these is true: +/// 1) We don't want optimizations. +/// 2) Using an unsupported compiler. +/// 3) Running on a non-x86 platform. + return 0; + +#endif +} diff --git a/Externals/SoundTouch/mmx_optimized.cpp b/Externals/SoundTouch/mmx_optimized.cpp new file mode 100644 index 0000000000..0952fd4f84 --- /dev/null +++ b/Externals/SoundTouch/mmx_optimized.cpp @@ -0,0 +1,317 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// MMX optimized routines. All MMX optimized functions have been gathered into +/// this single source code file, regardless to their class or original source +/// code file, in order to ease porting the library to other compiler and +/// processor platforms. +/// +/// The MMX-optimizations are programmed using MMX compiler intrinsics that +/// are supported both by Microsoft Visual C++ and GCC compilers, so this file +/// should compile with both toolsets. +/// +/// NOTICE: If using Visual Studio 6.0, you'll need to install the "Visual C++ +/// 6.0 processor pack" update to support compiler intrinsic syntax. The update +/// is available for download at Microsoft Developers Network, see here: +/// http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-11-08 20:53:01 +0200 (Thu, 08 Nov 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: mmx_optimized.cpp 160 2012-11-08 18:53:01Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#include "STTypes.h" + +#ifdef SOUNDTOUCH_ALLOW_MMX +// MMX routines available only with integer sample type + +using namespace soundtouch; + +////////////////////////////////////////////////////////////////////////////// +// +// implementation of MMX optimized functions of class 'TDStretchMMX' +// +////////////////////////////////////////////////////////////////////////////// + +#include "TDStretch.h" +#include +#include +#include + + +// Calculates cross correlation of two buffers +double TDStretchMMX::calcCrossCorr(const short *pV1, const short *pV2) const +{ + const __m64 *pVec1, *pVec2; + __m64 shifter; + __m64 accu, normaccu; + long corr, norm; + int i; + + pVec1 = (__m64*)pV1; + pVec2 = (__m64*)pV2; + + shifter = _m_from_int(overlapDividerBits); + normaccu = accu = _mm_setzero_si64(); + + // Process 4 parallel sets of 2 * stereo samples or 4 * mono samples + // during each round for improved CPU-level parallellization. + for (i = 0; i < channels * overlapLength / 16; i ++) + { + __m64 temp, temp2; + + // dictionary of instructions: + // _m_pmaddwd : 4*16bit multiply-add, resulting two 32bits = [a0*b0+a1*b1 ; a2*b2+a3*b3] + // _mm_add_pi32 : 2*32bit add + // _m_psrad : 32bit right-shift + + temp = _mm_add_pi32(_mm_madd_pi16(pVec1[0], pVec2[0]), + _mm_madd_pi16(pVec1[1], pVec2[1])); + temp2 = _mm_add_pi32(_mm_madd_pi16(pVec1[0], pVec1[0]), + _mm_madd_pi16(pVec1[1], pVec1[1])); + accu = _mm_add_pi32(accu, _mm_sra_pi32(temp, shifter)); + normaccu = _mm_add_pi32(normaccu, _mm_sra_pi32(temp2, shifter)); + + temp = _mm_add_pi32(_mm_madd_pi16(pVec1[2], pVec2[2]), + _mm_madd_pi16(pVec1[3], pVec2[3])); + temp2 = _mm_add_pi32(_mm_madd_pi16(pVec1[2], pVec1[2]), + _mm_madd_pi16(pVec1[3], pVec1[3])); + accu = _mm_add_pi32(accu, _mm_sra_pi32(temp, shifter)); + normaccu = _mm_add_pi32(normaccu, _mm_sra_pi32(temp2, shifter)); + + pVec1 += 4; + pVec2 += 4; + } + + // copy hi-dword of mm0 to lo-dword of mm1, then sum mmo+mm1 + // and finally store the result into the variable "corr" + + accu = _mm_add_pi32(accu, _mm_srli_si64(accu, 32)); + corr = _m_to_int(accu); + + normaccu = _mm_add_pi32(normaccu, _mm_srli_si64(normaccu, 32)); + norm = _m_to_int(normaccu); + + // Clear MMS state + _m_empty(); + + // Normalize result by dividing by sqrt(norm) - this step is easiest + // done using floating point operation + if (norm == 0) norm = 1; // to avoid div by zero + + return (double)corr / sqrt((double)norm); + // Note: Warning about the missing EMMS instruction is harmless + // as it'll be called elsewhere. +} + + + +void TDStretchMMX::clearCrossCorrState() +{ + // Clear MMS state + _m_empty(); + //_asm EMMS; +} + + + +// MMX-optimized version of the function overlapStereo +void TDStretchMMX::overlapStereo(short *output, const short *input) const +{ + const __m64 *pVinput, *pVMidBuf; + __m64 *pVdest; + __m64 mix1, mix2, adder, shifter; + int i; + + pVinput = (const __m64*)input; + pVMidBuf = (const __m64*)pMidBuffer; + pVdest = (__m64*)output; + + // mix1 = mixer values for 1st stereo sample + // mix1 = mixer values for 2nd stereo sample + // adder = adder for updating mixer values after each round + + mix1 = _mm_set_pi16(0, overlapLength, 0, overlapLength); + adder = _mm_set_pi16(1, -1, 1, -1); + mix2 = _mm_add_pi16(mix1, adder); + adder = _mm_add_pi16(adder, adder); + + // Overlaplength-division by shifter. "+1" is to account for "-1" deduced in + // overlapDividerBits calculation earlier. + shifter = _m_from_int(overlapDividerBits + 1); + + for (i = 0; i < overlapLength / 4; i ++) + { + __m64 temp1, temp2; + + // load & shuffle data so that input & mixbuffer data samples are paired + temp1 = _mm_unpacklo_pi16(pVMidBuf[0], pVinput[0]); // = i0l m0l i0r m0r + temp2 = _mm_unpackhi_pi16(pVMidBuf[0], pVinput[0]); // = i1l m1l i1r m1r + + // temp = (temp .* mix) >> shifter + temp1 = _mm_sra_pi32(_mm_madd_pi16(temp1, mix1), shifter); + temp2 = _mm_sra_pi32(_mm_madd_pi16(temp2, mix2), shifter); + pVdest[0] = _mm_packs_pi32(temp1, temp2); // pack 2*2*32bit => 4*16bit + + // update mix += adder + mix1 = _mm_add_pi16(mix1, adder); + mix2 = _mm_add_pi16(mix2, adder); + + // --- second round begins here --- + + // load & shuffle data so that input & mixbuffer data samples are paired + temp1 = _mm_unpacklo_pi16(pVMidBuf[1], pVinput[1]); // = i2l m2l i2r m2r + temp2 = _mm_unpackhi_pi16(pVMidBuf[1], pVinput[1]); // = i3l m3l i3r m3r + + // temp = (temp .* mix) >> shifter + temp1 = _mm_sra_pi32(_mm_madd_pi16(temp1, mix1), shifter); + temp2 = _mm_sra_pi32(_mm_madd_pi16(temp2, mix2), shifter); + pVdest[1] = _mm_packs_pi32(temp1, temp2); // pack 2*2*32bit => 4*16bit + + // update mix += adder + mix1 = _mm_add_pi16(mix1, adder); + mix2 = _mm_add_pi16(mix2, adder); + + pVinput += 2; + pVMidBuf += 2; + pVdest += 2; + } + + _m_empty(); // clear MMS state +} + + +////////////////////////////////////////////////////////////////////////////// +// +// implementation of MMX optimized functions of class 'FIRFilter' +// +////////////////////////////////////////////////////////////////////////////// + +#include "FIRFilter.h" + + +FIRFilterMMX::FIRFilterMMX() : FIRFilter() +{ + filterCoeffsUnalign = NULL; +} + + +FIRFilterMMX::~FIRFilterMMX() +{ + delete[] filterCoeffsUnalign; +} + + +// (overloaded) Calculates filter coefficients for MMX routine +void FIRFilterMMX::setCoefficients(const short *coeffs, uint newLength, uint uResultDivFactor) +{ + uint i; + FIRFilter::setCoefficients(coeffs, newLength, uResultDivFactor); + + // Ensure that filter coeffs array is aligned to 16-byte boundary + delete[] filterCoeffsUnalign; + filterCoeffsUnalign = new short[2 * newLength + 8]; + filterCoeffsAlign = (short *)SOUNDTOUCH_ALIGN_POINTER_16(filterCoeffsUnalign); + + // rearrange the filter coefficients for mmx routines + for (i = 0;i < length; i += 4) + { + filterCoeffsAlign[2 * i + 0] = coeffs[i + 0]; + filterCoeffsAlign[2 * i + 1] = coeffs[i + 2]; + filterCoeffsAlign[2 * i + 2] = coeffs[i + 0]; + filterCoeffsAlign[2 * i + 3] = coeffs[i + 2]; + + filterCoeffsAlign[2 * i + 4] = coeffs[i + 1]; + filterCoeffsAlign[2 * i + 5] = coeffs[i + 3]; + filterCoeffsAlign[2 * i + 6] = coeffs[i + 1]; + filterCoeffsAlign[2 * i + 7] = coeffs[i + 3]; + } +} + + + +// mmx-optimized version of the filter routine for stereo sound +uint FIRFilterMMX::evaluateFilterStereo(short *dest, const short *src, uint numSamples) const +{ + // Create stack copies of the needed member variables for asm routines : + uint i, j; + __m64 *pVdest = (__m64*)dest; + + if (length < 2) return 0; + + for (i = 0; i < (numSamples - length) / 2; i ++) + { + __m64 accu1; + __m64 accu2; + const __m64 *pVsrc = (const __m64*)src; + const __m64 *pVfilter = (const __m64*)filterCoeffsAlign; + + accu1 = accu2 = _mm_setzero_si64(); + for (j = 0; j < lengthDiv8 * 2; j ++) + { + __m64 temp1, temp2; + + temp1 = _mm_unpacklo_pi16(pVsrc[0], pVsrc[1]); // = l2 l0 r2 r0 + temp2 = _mm_unpackhi_pi16(pVsrc[0], pVsrc[1]); // = l3 l1 r3 r1 + + accu1 = _mm_add_pi32(accu1, _mm_madd_pi16(temp1, pVfilter[0])); // += l2*f2+l0*f0 r2*f2+r0*f0 + accu1 = _mm_add_pi32(accu1, _mm_madd_pi16(temp2, pVfilter[1])); // += l3*f3+l1*f1 r3*f3+r1*f1 + + temp1 = _mm_unpacklo_pi16(pVsrc[1], pVsrc[2]); // = l4 l2 r4 r2 + + accu2 = _mm_add_pi32(accu2, _mm_madd_pi16(temp2, pVfilter[0])); // += l3*f2+l1*f0 r3*f2+r1*f0 + accu2 = _mm_add_pi32(accu2, _mm_madd_pi16(temp1, pVfilter[1])); // += l4*f3+l2*f1 r4*f3+r2*f1 + + // accu1 += l2*f2+l0*f0 r2*f2+r0*f0 + // += l3*f3+l1*f1 r3*f3+r1*f1 + + // accu2 += l3*f2+l1*f0 r3*f2+r1*f0 + // l4*f3+l2*f1 r4*f3+r2*f1 + + pVfilter += 2; + pVsrc += 2; + } + // accu >>= resultDivFactor + accu1 = _mm_srai_pi32(accu1, resultDivFactor); + accu2 = _mm_srai_pi32(accu2, resultDivFactor); + + // pack 2*2*32bits => 4*16 bits + pVdest[0] = _mm_packs_pi32(accu1, accu2); + src += 4; + pVdest ++; + } + + _m_empty(); // clear emms state + + return (numSamples & 0xfffffffe) - length; +} + +#endif // SOUNDTOUCH_ALLOW_MMX diff --git a/Externals/SoundTouch/sse_optimized.cpp b/Externals/SoundTouch/sse_optimized.cpp new file mode 100644 index 0000000000..ffb6706288 --- /dev/null +++ b/Externals/SoundTouch/sse_optimized.cpp @@ -0,0 +1,361 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// SSE optimized routines for Pentium-III, Athlon-XP and later CPUs. All SSE +/// optimized functions have been gathered into this single source +/// code file, regardless to their class or original source code file, in order +/// to ease porting the library to other compiler and processor platforms. +/// +/// The SSE-optimizations are programmed using SSE compiler intrinsics that +/// are supported both by Microsoft Visual C++ and GCC compilers, so this file +/// should compile with both toolsets. +/// +/// NOTICE: If using Visual Studio 6.0, you'll need to install the "Visual C++ +/// 6.0 processor pack" update to support SSE instruction set. The update is +/// available for download at Microsoft Developers Network, see here: +/// http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx +/// +/// If the above URL is expired or removed, go to "http://msdn.microsoft.com" and +/// perform a search with keywords "processor pack". +/// +/// Author : Copyright (c) Olli Parviainen +/// Author e-mail : oparviai 'at' iki.fi +/// SoundTouch WWW: http://www.surina.net/soundtouch +/// +//////////////////////////////////////////////////////////////////////////////// +// +// Last changed : $Date: 2012-11-08 20:53:01 +0200 (Thu, 08 Nov 2012) $ +// File revision : $Revision: 4 $ +// +// $Id: sse_optimized.cpp 160 2012-11-08 18:53:01Z oparviai $ +// +//////////////////////////////////////////////////////////////////////////////// +// +// License : +// +// SoundTouch audio processing library +// Copyright (c) Olli Parviainen +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser 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 +// +//////////////////////////////////////////////////////////////////////////////// + +#include "cpu_detect.h" +#include "STTypes.h" + +using namespace soundtouch; + +#ifdef SOUNDTOUCH_ALLOW_SSE + +// SSE routines available only with float sample type + +////////////////////////////////////////////////////////////////////////////// +// +// implementation of SSE optimized functions of class 'TDStretchSSE' +// +////////////////////////////////////////////////////////////////////////////// + +#include "TDStretch.h" +#include +#include + +// Calculates cross correlation of two buffers +double TDStretchSSE::calcCrossCorr(const float *pV1, const float *pV2) const +{ + int i; + const float *pVec1; + const __m128 *pVec2; + __m128 vSum, vNorm; + + // Note. It means a major slow-down if the routine needs to tolerate + // unaligned __m128 memory accesses. It's way faster if we can skip + // unaligned slots and use _mm_load_ps instruction instead of _mm_loadu_ps. + // This can mean up to ~ 10-fold difference (incl. part of which is + // due to skipping every second round for stereo sound though). + // + // Compile-time define SOUNDTOUCH_ALLOW_NONEXACT_SIMD_OPTIMIZATION is provided + // for choosing if this little cheating is allowed. + +#ifdef SOUNDTOUCH_ALLOW_NONEXACT_SIMD_OPTIMIZATION + // Little cheating allowed, return valid correlation only for + // aligned locations, meaning every second round for stereo sound. + + #define _MM_LOAD _mm_load_ps + + if (((ulongptr)pV1) & 15) return -1e50; // skip unaligned locations + +#else + // No cheating allowed, use unaligned load & take the resulting + // performance hit. + #define _MM_LOAD _mm_loadu_ps +#endif + + // ensure overlapLength is divisible by 8 + assert((overlapLength % 8) == 0); + + // Calculates the cross-correlation value between 'pV1' and 'pV2' vectors + // Note: pV2 _must_ be aligned to 16-bit boundary, pV1 need not. + pVec1 = (const float*)pV1; + pVec2 = (const __m128*)pV2; + vSum = vNorm = _mm_setzero_ps(); + + // Unroll the loop by factor of 4 * 4 operations. Use same routine for + // stereo & mono, for mono it just means twice the amount of unrolling. + for (i = 0; i < channels * overlapLength / 16; i ++) + { + __m128 vTemp; + // vSum += pV1[0..3] * pV2[0..3] + vTemp = _MM_LOAD(pVec1); + vSum = _mm_add_ps(vSum, _mm_mul_ps(vTemp ,pVec2[0])); + vNorm = _mm_add_ps(vNorm, _mm_mul_ps(vTemp ,vTemp)); + + // vSum += pV1[4..7] * pV2[4..7] + vTemp = _MM_LOAD(pVec1 + 4); + vSum = _mm_add_ps(vSum, _mm_mul_ps(vTemp, pVec2[1])); + vNorm = _mm_add_ps(vNorm, _mm_mul_ps(vTemp ,vTemp)); + + // vSum += pV1[8..11] * pV2[8..11] + vTemp = _MM_LOAD(pVec1 + 8); + vSum = _mm_add_ps(vSum, _mm_mul_ps(vTemp, pVec2[2])); + vNorm = _mm_add_ps(vNorm, _mm_mul_ps(vTemp ,vTemp)); + + // vSum += pV1[12..15] * pV2[12..15] + vTemp = _MM_LOAD(pVec1 + 12); + vSum = _mm_add_ps(vSum, _mm_mul_ps(vTemp, pVec2[3])); + vNorm = _mm_add_ps(vNorm, _mm_mul_ps(vTemp ,vTemp)); + + pVec1 += 16; + pVec2 += 4; + } + + // return value = vSum[0] + vSum[1] + vSum[2] + vSum[3] + float *pvNorm = (float*)&vNorm; + double norm = sqrt(pvNorm[0] + pvNorm[1] + pvNorm[2] + pvNorm[3]); + if (norm < 1e-9) norm = 1.0; // to avoid div by zero + + float *pvSum = (float*)&vSum; + return (double)(pvSum[0] + pvSum[1] + pvSum[2] + pvSum[3]) / norm; + + /* This is approximately corresponding routine in C-language yet without normalization: + double corr, norm; + uint i; + + // Calculates the cross-correlation value between 'pV1' and 'pV2' vectors + corr = norm = 0.0; + for (i = 0; i < channels * overlapLength / 16; i ++) + { + corr += pV1[0] * pV2[0] + + pV1[1] * pV2[1] + + pV1[2] * pV2[2] + + pV1[3] * pV2[3] + + pV1[4] * pV2[4] + + pV1[5] * pV2[5] + + pV1[6] * pV2[6] + + pV1[7] * pV2[7] + + pV1[8] * pV2[8] + + pV1[9] * pV2[9] + + pV1[10] * pV2[10] + + pV1[11] * pV2[11] + + pV1[12] * pV2[12] + + pV1[13] * pV2[13] + + pV1[14] * pV2[14] + + pV1[15] * pV2[15]; + + for (j = 0; j < 15; j ++) norm += pV1[j] * pV1[j]; + + pV1 += 16; + pV2 += 16; + } + return corr / sqrt(norm); + */ +} + + +////////////////////////////////////////////////////////////////////////////// +// +// implementation of SSE optimized functions of class 'FIRFilter' +// +////////////////////////////////////////////////////////////////////////////// + +#include "FIRFilter.h" + +FIRFilterSSE::FIRFilterSSE() : FIRFilter() +{ + filterCoeffsAlign = NULL; + filterCoeffsUnalign = NULL; +} + + +FIRFilterSSE::~FIRFilterSSE() +{ + delete[] filterCoeffsUnalign; + filterCoeffsAlign = NULL; + filterCoeffsUnalign = NULL; +} + + +// (overloaded) Calculates filter coefficients for SSE routine +void FIRFilterSSE::setCoefficients(const float *coeffs, uint newLength, uint uResultDivFactor) +{ + uint i; + float fDivider; + + FIRFilter::setCoefficients(coeffs, newLength, uResultDivFactor); + + // Scale the filter coefficients so that it won't be necessary to scale the filtering result + // also rearrange coefficients suitably for SSE + // Ensure that filter coeffs array is aligned to 16-byte boundary + delete[] filterCoeffsUnalign; + filterCoeffsUnalign = new float[2 * newLength + 4]; + filterCoeffsAlign = (float *)SOUNDTOUCH_ALIGN_POINTER_16(filterCoeffsUnalign); + + fDivider = (float)resultDivider; + + // rearrange the filter coefficients for mmx routines + for (i = 0; i < newLength; i ++) + { + filterCoeffsAlign[2 * i + 0] = + filterCoeffsAlign[2 * i + 1] = coeffs[i + 0] / fDivider; + } +} + + + +// SSE-optimized version of the filter routine for stereo sound +uint FIRFilterSSE::evaluateFilterStereo(float *dest, const float *source, uint numSamples) const +{ + int count = (int)((numSamples - length) & (uint)-2); + int j; + + assert(count % 2 == 0); + + if (count < 2) return 0; + + assert(source != NULL); + assert(dest != NULL); + assert((length % 8) == 0); + assert(filterCoeffsAlign != NULL); + assert(((ulongptr)filterCoeffsAlign) % 16 == 0); + + // filter is evaluated for two stereo samples with each iteration, thus use of 'j += 2' + for (j = 0; j < count; j += 2) + { + const float *pSrc; + const __m128 *pFil; + __m128 sum1, sum2; + uint i; + + pSrc = (const float*)source; // source audio data + pFil = (const __m128*)filterCoeffsAlign; // filter coefficients. NOTE: Assumes coefficients + // are aligned to 16-byte boundary + sum1 = sum2 = _mm_setzero_ps(); + + for (i = 0; i < length / 8; i ++) + { + // Unroll loop for efficiency & calculate filter for 2*2 stereo samples + // at each pass + + // sum1 is accu for 2*2 filtered stereo sound data at the primary sound data offset + // sum2 is accu for 2*2 filtered stereo sound data for the next sound sample offset. + + sum1 = _mm_add_ps(sum1, _mm_mul_ps(_mm_loadu_ps(pSrc) , pFil[0])); + sum2 = _mm_add_ps(sum2, _mm_mul_ps(_mm_loadu_ps(pSrc + 2), pFil[0])); + + sum1 = _mm_add_ps(sum1, _mm_mul_ps(_mm_loadu_ps(pSrc + 4), pFil[1])); + sum2 = _mm_add_ps(sum2, _mm_mul_ps(_mm_loadu_ps(pSrc + 6), pFil[1])); + + sum1 = _mm_add_ps(sum1, _mm_mul_ps(_mm_loadu_ps(pSrc + 8) , pFil[2])); + sum2 = _mm_add_ps(sum2, _mm_mul_ps(_mm_loadu_ps(pSrc + 10), pFil[2])); + + sum1 = _mm_add_ps(sum1, _mm_mul_ps(_mm_loadu_ps(pSrc + 12), pFil[3])); + sum2 = _mm_add_ps(sum2, _mm_mul_ps(_mm_loadu_ps(pSrc + 14), pFil[3])); + + pSrc += 16; + pFil += 4; + } + + // Now sum1 and sum2 both have a filtered 2-channel sample each, but we still need + // to sum the two hi- and lo-floats of these registers together. + + // post-shuffle & add the filtered values and store to dest. + _mm_storeu_ps(dest, _mm_add_ps( + _mm_shuffle_ps(sum1, sum2, _MM_SHUFFLE(1,0,3,2)), // s2_1 s2_0 s1_3 s1_2 + _mm_shuffle_ps(sum1, sum2, _MM_SHUFFLE(3,2,1,0)) // s2_3 s2_2 s1_1 s1_0 + )); + source += 4; + dest += 4; + } + + // Ideas for further improvement: + // 1. If it could be guaranteed that 'source' were always aligned to 16-byte + // boundary, a faster aligned '_mm_load_ps' instruction could be used. + // 2. If it could be guaranteed that 'dest' were always aligned to 16-byte + // boundary, a faster '_mm_store_ps' instruction could be used. + + return (uint)count; + + /* original routine in C-language. please notice the C-version has differently + organized coefficients though. + double suml1, suml2; + double sumr1, sumr2; + uint i, j; + + for (j = 0; j < count; j += 2) + { + const float *ptr; + const float *pFil; + + suml1 = sumr1 = 0.0; + suml2 = sumr2 = 0.0; + ptr = src; + pFil = filterCoeffs; + for (i = 0; i < lengthLocal; i ++) + { + // unroll loop for efficiency. + + suml1 += ptr[0] * pFil[0] + + ptr[2] * pFil[2] + + ptr[4] * pFil[4] + + ptr[6] * pFil[6]; + + sumr1 += ptr[1] * pFil[1] + + ptr[3] * pFil[3] + + ptr[5] * pFil[5] + + ptr[7] * pFil[7]; + + suml2 += ptr[8] * pFil[0] + + ptr[10] * pFil[2] + + ptr[12] * pFil[4] + + ptr[14] * pFil[6]; + + sumr2 += ptr[9] * pFil[1] + + ptr[11] * pFil[3] + + ptr[13] * pFil[5] + + ptr[15] * pFil[7]; + + ptr += 16; + pFil += 8; + } + dest[0] = (float)suml1; + dest[1] = (float)sumr1; + dest[2] = (float)suml2; + dest[3] = (float)sumr2; + + src += 4; + dest += 4; + } + */ +} + +#endif // SOUNDTOUCH_ALLOW_SSE diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj b/Source/Core/AudioCommon/AudioCommon.vcxproj index 4bcee7559b..85608330dd 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcxproj +++ b/Source/Core/AudioCommon/AudioCommon.vcxproj @@ -115,8 +115,8 @@ true - OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win32;%(AdditionalLibraryDirectories) + SoundTouchD.lib;OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win32;..\..\..\Externals\SoundTouch\Win32;%(AdditionalLibraryDirectories) @@ -127,8 +127,8 @@ true - OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win64;%(AdditionalLibraryDirectories) + SoundTouchD.lib;OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win64;..\..\..\Externals\SoundTouch\Win64;%(AdditionalLibraryDirectories) @@ -141,8 +141,8 @@ true - OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win32;%(AdditionalLibraryDirectories) + SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win32;..\..\..\Externals\SoundTouch\Win32;%(AdditionalLibraryDirectories) @@ -155,8 +155,8 @@ true - OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win32;%(AdditionalLibraryDirectories) + SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win32;..\..\..\Externals\SoundTouch\Win32;%(AdditionalLibraryDirectories) @@ -169,8 +169,8 @@ true - OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win64;%(AdditionalLibraryDirectories) + SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win64;..\..\..\Externals\SoundTouch\Win64;%(AdditionalLibraryDirectories) @@ -183,8 +183,8 @@ true - OpenAL32.lib;dsound.lib;dxerr.lib - ..\..\..\Externals\OpenAL\Win64;%(AdditionalLibraryDirectories) + SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib + ..\..\..\Externals\OpenAL\Win64;..\..\..\Externals\SoundTouch\Win64;%(AdditionalLibraryDirectories) diff --git a/Source/Core/AudioCommon/Src/Mixer.h b/Source/Core/AudioCommon/Src/Mixer.h index da456d5bf7..c1a387cf49 100644 --- a/Source/Core/AudioCommon/Src/Mixer.h +++ b/Source/Core/AudioCommon/Src/Mixer.h @@ -92,6 +92,9 @@ public: std::mutex& MixerCritical() { return m_csMixing; } + volatile float GetCurrentSpeed() const { return m_speed; } + void UpdateSpeed(volatile float val) { m_speed = val; } + protected: unsigned int m_sampleRate; unsigned int m_aiSampleRate; @@ -113,6 +116,8 @@ protected: bool m_AIplaying; std::mutex m_csMixing; + + volatile float m_speed; // Current rate of the emulation (1.0 = 100% speed) private: }; diff --git a/Source/Core/AudioCommon/Src/OpenALStream.cpp b/Source/Core/AudioCommon/Src/OpenALStream.cpp index 4cc64a17de..6f429db495 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.cpp +++ b/Source/Core/AudioCommon/Src/OpenALStream.cpp @@ -19,11 +19,12 @@ #include "aldlist.h" #include "OpenALStream.h" -#include "../../Core/Src/HW/SystemTimers.h" -#include "../../Core/Src/HW/AudioInterface.h" #if defined HAVE_OPENAL && HAVE_OPENAL +using namespace soundtouch; +SoundTouch soundTouch; + // // AyuanX: Spec says OpenAL1.1 is thread safe already // @@ -67,6 +68,7 @@ bool OpenALStream::Start() PanicAlertT("OpenAL: can't find sound devices"); } + soundTouch.clear(); return bReturn; } @@ -76,6 +78,8 @@ void OpenALStream::Stop() // kick the thread if it's waiting soundSyncEvent.Set(); + soundTouch.clear(); + thread.join(); alSourceStop(uiSource); @@ -105,6 +109,7 @@ void OpenALStream::SetVolume(int volume) void OpenALStream::Update() { soundSyncEvent.Set(); + mainSyncEvent.Wait(); } void OpenALStream::Clear(bool mute) @@ -113,6 +118,7 @@ void OpenALStream::Clear(bool mute) if(m_muted) { + soundTouch.clear(); alSourceStop(uiSource); } else @@ -136,9 +142,10 @@ void OpenALStream::SoundLoop() alGenSources(1, &uiSource); // Short Silence + memset(sampleBuffer, 0, OAL_MAX_SAMPLES * 4 * OAL_NUM_BUFFERS); memset(realtimeBuffer, 0, OAL_MAX_SAMPLES * 4); for (int i = 0; i < OAL_NUM_BUFFERS; i++) - alBufferData(uiBuffers[i], AL_FORMAT_STEREO16, realtimeBuffer, OAL_MAX_SAMPLES, ulFrequency); + alBufferData(uiBuffers[i], AL_FORMAT_STEREO16, realtimeBuffer, OAL_MAX_SAMPLES * 4, ulFrequency); alSourceQueueBuffers(uiSource, OAL_NUM_BUFFERS, uiBuffers); alSourcePlay(uiSource); @@ -152,42 +159,68 @@ void OpenALStream::SoundLoop() ALint iBuffersProcessed = 0; ALuint uiBufferTemp[OAL_NUM_BUFFERS] = {0}; + soundTouch.setChannels(2); + soundTouch.setSampleRate(ulFrequency); + soundTouch.setSetting(SETTING_USE_QUICKSEEK, 0); + soundTouch.setSetting(SETTING_USE_AA_FILTER, 0); + soundTouch.setSetting(SETTING_SEQUENCE_MS, 1); + soundTouch.setSetting(SETTING_SEEKWINDOW_MS, 28); + soundTouch.setSetting(SETTING_OVERLAP_MS, 12); + while (!threadData) { + // num_samples_to_render in this update - depends on SystemTimers::AUDIO_DMA_PERIOD. + const u32 stereo_16_bit_size = 4; + const u32 dma_length = 32; + const u64 ais_samples_per_second = 48000 * stereo_16_bit_size; + u64 audio_dma_period = SystemTimers::GetTicksPerSecond() / (AudioInterface::GetAIDSampleRate() * stereo_16_bit_size / dma_length); + u64 num_samples_to_render = (audio_dma_period * ais_samples_per_second) / SystemTimers::GetTicksPerSecond(); + + unsigned int numSamples = (unsigned int)num_samples_to_render; + + numSamples = (numSamples > OAL_MAX_SAMPLES) ? OAL_MAX_SAMPLES : numSamples; + numSamples = m_mixer->Mix(realtimeBuffer, numSamples); + soundTouch.putSamples(realtimeBuffer, numSamples); + if (iBuffersProcessed == iBuffersFilled) { alGetSourcei(uiSource, AL_BUFFERS_PROCESSED, &iBuffersProcessed); iBuffersFilled = 0; } - // num_samples_to_render in this update - depends on SystemTimers::AUDIO_DMA_PERIOD. - const u32 stereo_16_bit_size = 4; - const u32 dma_length = 32; - const u64 audio_dma_period = SystemTimers::GetTicksPerSecond() / (AudioInterface::GetAIDSampleRate() * stereo_16_bit_size / dma_length); - const u64 ais_samples_per_second = 48000 * stereo_16_bit_size; - const u64 num_samples_to_render = (audio_dma_period * ais_samples_per_second) / SystemTimers::GetTicksPerSecond(); - - unsigned int numSamples = (unsigned int)num_samples_to_render; - if (iBuffersProcessed) { - numSamples = (numSamples > OAL_MAX_SAMPLES) ? OAL_MAX_SAMPLES : numSamples; - // Remove the Buffer from the Queue. (uiBuffer contains the Buffer ID for the unqueued Buffer) - if (iBuffersFilled == 0) - alSourceUnqueueBuffers(uiSource, iBuffersProcessed, uiBufferTemp); + float rate = m_mixer->GetCurrentSpeed(); + if (rate <= 0) + { + Core::RequestRefreshInfo(); + rate = m_mixer->GetCurrentSpeed(); + } + if (rate > 0) + { + // Adjust SETTING_SEQUENCE_MS to balance between lag vs hollow audio + soundTouch.setSetting(SETTING_SEQUENCE_MS, (int)pow(1 / rate, 2)); + soundTouch.setTempo(rate); + } + unsigned int nSamples = soundTouch.receiveSamples(sampleBuffer, OAL_MAX_SAMPLES * 2 * OAL_NUM_BUFFERS); + if (nSamples > 0) + { + // Remove the Buffer from the Queue. (uiBuffer contains the Buffer ID for the unqueued Buffer) + if (iBuffersFilled == 0) + alSourceUnqueueBuffers(uiSource, iBuffersProcessed, uiBufferTemp); + alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_STEREO16, sampleBuffer, nSamples * 4, ulFrequency); + alSourceQueueBuffers(uiSource, 1, &uiBufferTemp[iBuffersFilled]); + iBuffersFilled++; - m_mixer->Mix(realtimeBuffer, numSamples); - alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_STEREO16, realtimeBuffer, numSamples * 4, ulFrequency); - alSourceQueueBuffers(uiSource, 1, &uiBufferTemp[iBuffersFilled]); - iBuffersFilled++; - - if (iBuffersFilled == OAL_NUM_BUFFERS) - alSourcePlay(uiSource); + if (iBuffersFilled == OAL_NUM_BUFFERS) + alSourcePlay(uiSource); + } } else { soundSyncEvent.Wait(); } + mainSyncEvent.Set(); } } diff --git a/Source/Core/AudioCommon/Src/OpenALStream.h b/Source/Core/AudioCommon/Src/OpenALStream.h index a9c1f51399..c6dfe519ae 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.h +++ b/Source/Core/AudioCommon/Src/OpenALStream.h @@ -34,10 +34,16 @@ #include #endif +#include "../../Core/Src/Core.h" +#include "../../Core/Src/HW/SystemTimers.h" +#include "../../Core/Src/HW/AudioInterface.h" +#include "../../../../Externals/SoundTouch/STTypes.h" +#include "../../../../Externals/SoundTouch/SoundTouch.h" + // 16 bit Stereo #define SFX_MAX_SOURCE 1 #define OAL_NUM_BUFFERS 16 -#define OAL_MAX_SAMPLES 512 // AyuanX: Don't make it too large, as larger buffer means longer delay +#define OAL_MAX_SAMPLES 512 #endif class OpenALStream: public SoundStream @@ -63,8 +69,10 @@ public: private: std::thread thread; Common::Event soundSyncEvent; - + Common::Event mainSyncEvent; + short realtimeBuffer[OAL_MAX_SAMPLES * 2]; + soundtouch::SAMPLETYPE sampleBuffer[OAL_MAX_SAMPLES * 2 * OAL_NUM_BUFFERS]; ALuint uiBuffers[OAL_NUM_BUFFERS]; ALuint uiSource; ALfloat fVolume; diff --git a/Source/Core/Core/Src/Core.cpp b/Source/Core/Core/Src/Core.cpp index e92b9088bc..c06755a90b 100644 --- a/Source/Core/Core/Src/Core.cpp +++ b/Source/Core/Core/Src/Core.cpp @@ -683,7 +683,14 @@ void VideoThrottle() SMessage; // Show message - g_video_backend->UpdateFPSDisplay(SMessage.c_str()); + g_video_backend->UpdateFPSDisplay(SMessage.c_str()); + + // Update the audio timestretcher with the current speed + if (soundStream) + { + CMixer* pMixer = soundStream->GetMixer(); + pMixer->UpdateSpeed((float)Speed / 100); + } if (_CoreParameter.bRenderToMain && SConfig::GetInstance().m_InterfaceStatusbar) { diff --git a/Source/Dolphin_2010.sln b/Source/Dolphin_2010.sln index 041f6c95bb..a65ba2e894 100644 --- a/Source/Dolphin_2010.sln +++ b/Source/Dolphin_2010.sln @@ -108,6 +108,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "png", "..\Externals\libpng\ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SCMRevGen", "Core\Common\SVNRevGen.vcxproj", "{69F00340-5C3D-449F-9A80-958435C6CF06}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "..\Externals\SoundTouch\SoundTouch.vcxproj", "{68A5DD20-7057-448B-8FE0-B6AC8D205509}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -382,6 +384,18 @@ Global {69F00340-5C3D-449F-9A80-958435C6CF06}.Release|Win32.Build.0 = Release|x64 {69F00340-5C3D-449F-9A80-958435C6CF06}.Release|x64.ActiveCfg = Release|x64 {69F00340-5C3D-449F-9A80-958435C6CF06}.Release|x64.Build.0 = Release|x64 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|Win32.ActiveCfg = Debug|Win32 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|Win32.Build.0 = Debug|Win32 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|x64.ActiveCfg = Debug|x64 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Debug|x64.Build.0 = Debug|x64 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.DebugFast|Win32.ActiveCfg = Debug|Win32 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.DebugFast|Win32.Build.0 = Debug|Win32 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.DebugFast|x64.ActiveCfg = Release|x64 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.DebugFast|x64.Build.0 = Release|x64 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|Win32.ActiveCfg = Release|Win32 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|Win32.Build.0 = Release|Win32 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|x64.ActiveCfg = Release|x64 + {68A5DD20-7057-448B-8FE0-B6AC8D205509}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 91fe5cc821b0532154dc5a8a34869f13284394c5 Mon Sep 17 00:00:00 2001 From: skidau Date: Wed, 9 Jan 2013 23:45:13 +1100 Subject: [PATCH 04/17] Build fix Added SoundTouch as a dependency of AudioCommon. Removed the "soundtouch_config.h" include on Linux and OSX. --- Externals/SoundTouch/STTypes.h | 2 +- Source/Core/AudioCommon/AudioCommon.vcxproj | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Externals/SoundTouch/STTypes.h b/Externals/SoundTouch/STTypes.h index 24828f3295..ad9efedb5f 100644 --- a/Externals/SoundTouch/STTypes.h +++ b/Externals/SoundTouch/STTypes.h @@ -57,7 +57,7 @@ typedef unsigned long ulong; #if (defined(__GNUC__) && !defined(ANDROID)) // In GCC, include soundtouch_config.h made by config scritps. // Skip this in Android compilation that uses GCC but without configure scripts. - #include "soundtouch_config.h" + //#include "soundtouch_config.h" #endif #ifndef _WINDEF_ diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj b/Source/Core/AudioCommon/AudioCommon.vcxproj index 85608330dd..5a6896f5e2 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcxproj +++ b/Source/Core/AudioCommon/AudioCommon.vcxproj @@ -216,6 +216,14 @@ + + {68a5dd20-7057-448b-8fe0-b6ac8d205509} + true + true + false + true + false + {c87a4178-44f6-49b2-b7aa-c79af1b8c534} true From 8494a439c74bdd2eed60d7aba678761c1a8a7284 Mon Sep 17 00:00:00 2001 From: skidau Date: Thu, 10 Jan 2013 00:06:35 +1100 Subject: [PATCH 05/17] OSX build fix --- Externals/SoundTouch/STTypes.h | 4 ++-- Externals/SoundTouch/cpu_detect_x86.cpp | 6 +++--- Source/Core/AudioCommon/Src/OpenALStream.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Externals/SoundTouch/STTypes.h b/Externals/SoundTouch/STTypes.h index ad9efedb5f..8542556e5b 100644 --- a/Externals/SoundTouch/STTypes.h +++ b/Externals/SoundTouch/STTypes.h @@ -62,9 +62,9 @@ typedef unsigned long ulong; #ifndef _WINDEF_ // if these aren't defined already by Windows headers, define now - +#if !defined(__APPLE__) typedef int BOOL; - +#endif #define FALSE 0 #define TRUE 1 diff --git a/Externals/SoundTouch/cpu_detect_x86.cpp b/Externals/SoundTouch/cpu_detect_x86.cpp index fff3240d8a..1103adab57 100644 --- a/Externals/SoundTouch/cpu_detect_x86.cpp +++ b/Externals/SoundTouch/cpu_detect_x86.cpp @@ -50,11 +50,11 @@ #elif defined(_M_IX86) // windows non-gcc #include - #define bit_MMX (1 << 23) - #define bit_SSE (1 << 25) - #define bit_SSE2 (1 << 26) #endif + #define bit_MMX (1 << 23) + #define bit_SSE (1 << 25) + #define bit_SSE2 (1 << 26) #endif diff --git a/Source/Core/AudioCommon/Src/OpenALStream.cpp b/Source/Core/AudioCommon/Src/OpenALStream.cpp index 6f429db495..85685b42cb 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.cpp +++ b/Source/Core/AudioCommon/Src/OpenALStream.cpp @@ -199,7 +199,7 @@ void OpenALStream::SoundLoop() if (rate > 0) { // Adjust SETTING_SEQUENCE_MS to balance between lag vs hollow audio - soundTouch.setSetting(SETTING_SEQUENCE_MS, (int)pow(1 / rate, 2)); + soundTouch.setSetting(SETTING_SEQUENCE_MS, (int)(1 / (rate * rate))); soundTouch.setTempo(rate); } unsigned int nSamples = soundTouch.receiveSamples(sampleBuffer, OAL_MAX_SAMPLES * 2 * OAL_NUM_BUFFERS); From 7600cf106bdc6cde7d63dd325764d41707d5376a Mon Sep 17 00:00:00 2001 From: skidau Date: Thu, 10 Jan 2013 00:24:42 +1100 Subject: [PATCH 06/17] OSX: typedef signed char BOOL --- Externals/SoundTouch/STTypes.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Externals/SoundTouch/STTypes.h b/Externals/SoundTouch/STTypes.h index 8542556e5b..28f0ee9110 100644 --- a/Externals/SoundTouch/STTypes.h +++ b/Externals/SoundTouch/STTypes.h @@ -62,7 +62,9 @@ typedef unsigned long ulong; #ifndef _WINDEF_ // if these aren't defined already by Windows headers, define now -#if !defined(__APPLE__) +#if defined(__APPLE__) + typedef signed char BOOL; +#else typedef int BOOL; #endif #define FALSE 0 From 01f4d9f386d225675d12cea7fedc1144dd2e02d4 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 9 Jan 2013 10:26:12 -0600 Subject: [PATCH 07/17] Fix include paths and compiling in Linux. Externals soundtouch is 1.7.1, while Ubuntu 12.10 is 1.6.x. Externals soundtouch is compiled with integer samples, while ubuntu is compiled with float samples. Float samples is probably the more common route. If you're going to use soundtouch, you should probably use SAMPLETYPE instead of explicitly choosing short. This probably breaks the windows build since its includes aren't setup. --- CMakeLists.txt | 24 ++++++++++--------- .../{SoundTouch => soundtouch}/AAFilter.cpp | 0 .../{SoundTouch => soundtouch}/AAFilter.h | 0 .../{SoundTouch => soundtouch}/BPMDetect.cpp | 0 .../{SoundTouch => soundtouch}/BPMDetect.h | 0 .../{SoundTouch => soundtouch}/CMakeLists.txt | 0 .../FIFOSampleBuffer.cpp | 0 .../FIFOSampleBuffer.h | 0 .../FIFOSamplePipe.h | 0 .../{SoundTouch => soundtouch}/FIRFilter.cpp | 0 .../{SoundTouch => soundtouch}/FIRFilter.h | 0 .../{SoundTouch => soundtouch}/PeakFinder.cpp | 0 .../{SoundTouch => soundtouch}/PeakFinder.h | 0 .../RateTransposer.cpp | 0 .../RateTransposer.h | 0 .../{SoundTouch => soundtouch}/STTypes.h | 0 .../{SoundTouch => soundtouch}/SoundTouch.cpp | 0 .../{SoundTouch => soundtouch}/SoundTouch.h | 0 .../SoundTouch.vcxproj | 0 .../SoundTouch.vcxproj.filters | 0 .../{SoundTouch => soundtouch}/TDStretch.cpp | 0 .../{SoundTouch => soundtouch}/TDStretch.h | 0 .../{SoundTouch => soundtouch}/cpu_detect.h | 0 .../cpu_detect_x86.cpp | 0 .../mmx_optimized.cpp | 0 .../sse_optimized.cpp | 0 Source/Core/AudioCommon/CMakeLists.txt | 2 +- Source/Core/AudioCommon/Src/OpenALStream.cpp | 3 +-- Source/Core/AudioCommon/Src/OpenALStream.h | 10 ++++---- 29 files changed, 20 insertions(+), 19 deletions(-) rename Externals/{SoundTouch => soundtouch}/AAFilter.cpp (100%) rename Externals/{SoundTouch => soundtouch}/AAFilter.h (100%) rename Externals/{SoundTouch => soundtouch}/BPMDetect.cpp (100%) rename Externals/{SoundTouch => soundtouch}/BPMDetect.h (100%) rename Externals/{SoundTouch => soundtouch}/CMakeLists.txt (100%) rename Externals/{SoundTouch => soundtouch}/FIFOSampleBuffer.cpp (100%) rename Externals/{SoundTouch => soundtouch}/FIFOSampleBuffer.h (100%) rename Externals/{SoundTouch => soundtouch}/FIFOSamplePipe.h (100%) rename Externals/{SoundTouch => soundtouch}/FIRFilter.cpp (100%) rename Externals/{SoundTouch => soundtouch}/FIRFilter.h (100%) rename Externals/{SoundTouch => soundtouch}/PeakFinder.cpp (100%) rename Externals/{SoundTouch => soundtouch}/PeakFinder.h (100%) rename Externals/{SoundTouch => soundtouch}/RateTransposer.cpp (100%) rename Externals/{SoundTouch => soundtouch}/RateTransposer.h (100%) rename Externals/{SoundTouch => soundtouch}/STTypes.h (100%) rename Externals/{SoundTouch => soundtouch}/SoundTouch.cpp (100%) rename Externals/{SoundTouch => soundtouch}/SoundTouch.h (100%) rename Externals/{SoundTouch => soundtouch}/SoundTouch.vcxproj (100%) rename Externals/{SoundTouch => soundtouch}/SoundTouch.vcxproj.filters (100%) rename Externals/{SoundTouch => soundtouch}/TDStretch.cpp (100%) rename Externals/{SoundTouch => soundtouch}/TDStretch.h (100%) rename Externals/{SoundTouch => soundtouch}/cpu_detect.h (100%) rename Externals/{SoundTouch => soundtouch}/cpu_detect_x86.cpp (100%) rename Externals/{SoundTouch => soundtouch}/mmx_optimized.cpp (100%) rename Externals/{SoundTouch => soundtouch}/sse_optimized.cpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index f286cb3502..235c5fa206 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -405,6 +405,19 @@ else() set(LZO lzo2) endif() +if(OPENAL_FOUND) + if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + check_lib(SOUNDTOUCH SoundTouch soundtouch/soundtouch.h QUIET) + endif() + if (SOUNDTOUCH_FOUND) + message("Using shared soundtouch") + else() + message("Using static soundtouch from Externals") + add_subdirectory(Externals/soundtouch) + include_directories(Externals/soundtouch) + endif() +endif() + if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") include(FindSDL2 OPTIONAL) endif() @@ -452,17 +465,6 @@ else() include_directories(Externals/SOIL) endif() -if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - check_lib(SoundTouch SoundTouch SoundTouch.h QUIET) -endif() -if(SOUNDTOUCH_FOUND) - message("Using shared SoundTouch") -else() - message("Using static SoundTouch from Externals") - add_subdirectory(Externals/SoundTouch) - include_directories(Externals/SoundTouch) -endif() - # If zlib has already been found on a previous run of cmake don't check again # as the check seems to take a long time. if(NOT ZLIB_FOUND) diff --git a/Externals/SoundTouch/AAFilter.cpp b/Externals/soundtouch/AAFilter.cpp similarity index 100% rename from Externals/SoundTouch/AAFilter.cpp rename to Externals/soundtouch/AAFilter.cpp diff --git a/Externals/SoundTouch/AAFilter.h b/Externals/soundtouch/AAFilter.h similarity index 100% rename from Externals/SoundTouch/AAFilter.h rename to Externals/soundtouch/AAFilter.h diff --git a/Externals/SoundTouch/BPMDetect.cpp b/Externals/soundtouch/BPMDetect.cpp similarity index 100% rename from Externals/SoundTouch/BPMDetect.cpp rename to Externals/soundtouch/BPMDetect.cpp diff --git a/Externals/SoundTouch/BPMDetect.h b/Externals/soundtouch/BPMDetect.h similarity index 100% rename from Externals/SoundTouch/BPMDetect.h rename to Externals/soundtouch/BPMDetect.h diff --git a/Externals/SoundTouch/CMakeLists.txt b/Externals/soundtouch/CMakeLists.txt similarity index 100% rename from Externals/SoundTouch/CMakeLists.txt rename to Externals/soundtouch/CMakeLists.txt diff --git a/Externals/SoundTouch/FIFOSampleBuffer.cpp b/Externals/soundtouch/FIFOSampleBuffer.cpp similarity index 100% rename from Externals/SoundTouch/FIFOSampleBuffer.cpp rename to Externals/soundtouch/FIFOSampleBuffer.cpp diff --git a/Externals/SoundTouch/FIFOSampleBuffer.h b/Externals/soundtouch/FIFOSampleBuffer.h similarity index 100% rename from Externals/SoundTouch/FIFOSampleBuffer.h rename to Externals/soundtouch/FIFOSampleBuffer.h diff --git a/Externals/SoundTouch/FIFOSamplePipe.h b/Externals/soundtouch/FIFOSamplePipe.h similarity index 100% rename from Externals/SoundTouch/FIFOSamplePipe.h rename to Externals/soundtouch/FIFOSamplePipe.h diff --git a/Externals/SoundTouch/FIRFilter.cpp b/Externals/soundtouch/FIRFilter.cpp similarity index 100% rename from Externals/SoundTouch/FIRFilter.cpp rename to Externals/soundtouch/FIRFilter.cpp diff --git a/Externals/SoundTouch/FIRFilter.h b/Externals/soundtouch/FIRFilter.h similarity index 100% rename from Externals/SoundTouch/FIRFilter.h rename to Externals/soundtouch/FIRFilter.h diff --git a/Externals/SoundTouch/PeakFinder.cpp b/Externals/soundtouch/PeakFinder.cpp similarity index 100% rename from Externals/SoundTouch/PeakFinder.cpp rename to Externals/soundtouch/PeakFinder.cpp diff --git a/Externals/SoundTouch/PeakFinder.h b/Externals/soundtouch/PeakFinder.h similarity index 100% rename from Externals/SoundTouch/PeakFinder.h rename to Externals/soundtouch/PeakFinder.h diff --git a/Externals/SoundTouch/RateTransposer.cpp b/Externals/soundtouch/RateTransposer.cpp similarity index 100% rename from Externals/SoundTouch/RateTransposer.cpp rename to Externals/soundtouch/RateTransposer.cpp diff --git a/Externals/SoundTouch/RateTransposer.h b/Externals/soundtouch/RateTransposer.h similarity index 100% rename from Externals/SoundTouch/RateTransposer.h rename to Externals/soundtouch/RateTransposer.h diff --git a/Externals/SoundTouch/STTypes.h b/Externals/soundtouch/STTypes.h similarity index 100% rename from Externals/SoundTouch/STTypes.h rename to Externals/soundtouch/STTypes.h diff --git a/Externals/SoundTouch/SoundTouch.cpp b/Externals/soundtouch/SoundTouch.cpp similarity index 100% rename from Externals/SoundTouch/SoundTouch.cpp rename to Externals/soundtouch/SoundTouch.cpp diff --git a/Externals/SoundTouch/SoundTouch.h b/Externals/soundtouch/SoundTouch.h similarity index 100% rename from Externals/SoundTouch/SoundTouch.h rename to Externals/soundtouch/SoundTouch.h diff --git a/Externals/SoundTouch/SoundTouch.vcxproj b/Externals/soundtouch/SoundTouch.vcxproj similarity index 100% rename from Externals/SoundTouch/SoundTouch.vcxproj rename to Externals/soundtouch/SoundTouch.vcxproj diff --git a/Externals/SoundTouch/SoundTouch.vcxproj.filters b/Externals/soundtouch/SoundTouch.vcxproj.filters similarity index 100% rename from Externals/SoundTouch/SoundTouch.vcxproj.filters rename to Externals/soundtouch/SoundTouch.vcxproj.filters diff --git a/Externals/SoundTouch/TDStretch.cpp b/Externals/soundtouch/TDStretch.cpp similarity index 100% rename from Externals/SoundTouch/TDStretch.cpp rename to Externals/soundtouch/TDStretch.cpp diff --git a/Externals/SoundTouch/TDStretch.h b/Externals/soundtouch/TDStretch.h similarity index 100% rename from Externals/SoundTouch/TDStretch.h rename to Externals/soundtouch/TDStretch.h diff --git a/Externals/SoundTouch/cpu_detect.h b/Externals/soundtouch/cpu_detect.h similarity index 100% rename from Externals/SoundTouch/cpu_detect.h rename to Externals/soundtouch/cpu_detect.h diff --git a/Externals/SoundTouch/cpu_detect_x86.cpp b/Externals/soundtouch/cpu_detect_x86.cpp similarity index 100% rename from Externals/SoundTouch/cpu_detect_x86.cpp rename to Externals/soundtouch/cpu_detect_x86.cpp diff --git a/Externals/SoundTouch/mmx_optimized.cpp b/Externals/soundtouch/mmx_optimized.cpp similarity index 100% rename from Externals/SoundTouch/mmx_optimized.cpp rename to Externals/soundtouch/mmx_optimized.cpp diff --git a/Externals/SoundTouch/sse_optimized.cpp b/Externals/soundtouch/sse_optimized.cpp similarity index 100% rename from Externals/SoundTouch/sse_optimized.cpp rename to Externals/soundtouch/sse_optimized.cpp diff --git a/Source/Core/AudioCommon/CMakeLists.txt b/Source/Core/AudioCommon/CMakeLists.txt index be8c58d14a..93547681b0 100644 --- a/Source/Core/AudioCommon/CMakeLists.txt +++ b/Source/Core/AudioCommon/CMakeLists.txt @@ -18,7 +18,7 @@ endif(AO_FOUND) if(OPENAL_FOUND) set(SRCS ${SRCS} Src/OpenALStream.cpp Src/aldlist.cpp) - set(LIBS ${LIBS} ${OPENAL_LIBRARY}) + set(LIBS ${LIBS} ${OPENAL_LIBRARY} SoundTouch ) endif(OPENAL_FOUND) if(PULSEAUDIO_FOUND) diff --git a/Source/Core/AudioCommon/Src/OpenALStream.cpp b/Source/Core/AudioCommon/Src/OpenALStream.cpp index 85685b42cb..b0c856dcad 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.cpp +++ b/Source/Core/AudioCommon/Src/OpenALStream.cpp @@ -22,8 +22,7 @@ #if defined HAVE_OPENAL && HAVE_OPENAL -using namespace soundtouch; -SoundTouch soundTouch; +soundtouch::SoundTouch soundTouch; // // AyuanX: Spec says OpenAL1.1 is thread safe already diff --git a/Source/Core/AudioCommon/Src/OpenALStream.h b/Source/Core/AudioCommon/Src/OpenALStream.h index c6dfe519ae..6f39c8a49c 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.h +++ b/Source/Core/AudioCommon/Src/OpenALStream.h @@ -34,11 +34,11 @@ #include #endif -#include "../../Core/Src/Core.h" -#include "../../Core/Src/HW/SystemTimers.h" -#include "../../Core/Src/HW/AudioInterface.h" -#include "../../../../Externals/SoundTouch/STTypes.h" -#include "../../../../Externals/SoundTouch/SoundTouch.h" +#include "Core.h" +#include "HW/SystemTimers.h" +#include "HW/AudioInterface.h" +#include +#include // 16 bit Stereo #define SFX_MAX_SOURCE 1 From 6b29918ea3f8759b8cb2838a086580c84982a3c6 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 9 Jan 2013 10:42:05 -0600 Subject: [PATCH 08/17] Messed up the static include line --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 235c5fa206..a4f6bb7b80 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -414,7 +414,7 @@ if(OPENAL_FOUND) else() message("Using static soundtouch from Externals") add_subdirectory(Externals/soundtouch) - include_directories(Externals/soundtouch) + include_directories(Externals) endif() endif() From d34c847eddf72c8a928472c7512cddad02a8d853 Mon Sep 17 00:00:00 2001 From: skidau Date: Thu, 10 Jan 2013 07:43:59 +1100 Subject: [PATCH 09/17] Fixed the include directories in Audio Common for the Windows build. --- Source/Core/AudioCommon/AudioCommon.vcxproj | 2 +- Source/Core/AudioCommon/Src/OpenALStream.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj b/Source/Core/AudioCommon/AudioCommon.vcxproj index 5a6896f5e2..bc004268ea 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcxproj +++ b/Source/Core/AudioCommon/AudioCommon.vcxproj @@ -161,7 +161,7 @@ - ..\Common\Src;%(AdditionalIncludeDirectories) + ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) true diff --git a/Source/Core/AudioCommon/Src/OpenALStream.h b/Source/Core/AudioCommon/Src/OpenALStream.h index 6f39c8a49c..c775d31cf2 100644 --- a/Source/Core/AudioCommon/Src/OpenALStream.h +++ b/Source/Core/AudioCommon/Src/OpenALStream.h @@ -24,8 +24,8 @@ #if defined HAVE_OPENAL && HAVE_OPENAL #ifdef _WIN32 -#include "../../../../Externals/OpenAL/include/al.h" -#include "../../../../Externals/OpenAL/include/alc.h" +#include +#include #elif defined __APPLE__ #include #include From ad28986d510cfe7e064acd9f95d1de0d08b36325 Mon Sep 17 00:00:00 2001 From: skidau Date: Thu, 10 Jan 2013 07:55:13 +1100 Subject: [PATCH 10/17] Fixed the include directories in Audio Common for the Windows 32bit build. --- Source/Core/AudioCommon/AudioCommon.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj b/Source/Core/AudioCommon/AudioCommon.vcxproj index bc004268ea..2e13aedb46 100644 --- a/Source/Core/AudioCommon/AudioCommon.vcxproj +++ b/Source/Core/AudioCommon/AudioCommon.vcxproj @@ -133,7 +133,7 @@ - ..\Common\Src;%(AdditionalIncludeDirectories) + ..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories) true From c7ccf7e5c6a78f2a41b6625dec64356318e27079 Mon Sep 17 00:00:00 2001 From: skidau Date: Thu, 10 Jan 2013 09:11:37 +1100 Subject: [PATCH 11/17] Removed the system timing hack which was activated when the Accurate VBeam option was enabled. --- Source/Core/Core/Src/HW/SystemTimers.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Core/Core/Src/HW/SystemTimers.cpp b/Source/Core/Core/Src/HW/SystemTimers.cpp index b9f9fe0107..b520c51b39 100644 --- a/Source/Core/Core/Src/HW/SystemTimers.cpp +++ b/Source/Core/Core/Src/HW/SystemTimers.cpp @@ -160,8 +160,7 @@ void DSPCallback(u64 userdata, int cyclesLate) void AudioDMACallback(u64 userdata, int cyclesLate) { - int fields = SConfig::GetInstance().m_LocalCoreStartupParameter.bVBeam?2:1; - int period = CPU_CORE_CLOCK / (AudioInterface::GetAIDSampleRate() * 4 / 32 * fields); + int period = CPU_CORE_CLOCK / (AudioInterface::GetAIDSampleRate() * 4 / 32); DSP::UpdateAudioDMA(); // Push audio to speakers. CoreTiming::ScheduleEvent(period - cyclesLate, et_AudioDMA); } From 80f4475e76be299e19ff88283d8f8aa02726506b Mon Sep 17 00:00:00 2001 From: skidau Date: Fri, 11 Jan 2013 14:03:09 +1100 Subject: [PATCH 12/17] Added a Dolby Pro Logic II (DPL2) decoder in the OpenAL backend. DPL2 audio is decoded to 5.1. Code adapted from ffdshow. Added an option in the DSP settings to disable the DPL2 decoder in case Dolphin incorrectly detects a 5.1 audio system. Updated the OpenAL files to OpenAL Soft 1.15.1 in the Windows build. Fixes issue 3023. --- Externals/OpenAL/Win32/soft_oal.dll | Bin 0 -> 402553 bytes Externals/OpenAL/Win64/soft_oal.dll | Bin 0 -> 417320 bytes Externals/OpenAL/include/al.h | 1110 +++++++------- Externals/OpenAL/include/alc.h | 258 ++-- Externals/OpenAL/include/alext.h | 355 +++++ Externals/OpenAL/include/efx-creative.h | 154 +- Externals/OpenAL/include/efx-presets.h | 402 +++++ Externals/OpenAL/include/efx.h | 1336 +++++++++-------- Source/Core/AudioCommon/AudioCommon.vcxproj | 10 +- .../AudioCommon/AudioCommon.vcxproj.filters | 2 + Source/Core/AudioCommon/CMakeLists.txt | 1 + Source/Core/AudioCommon/Src/DPL2Decoder.cpp | 397 +++++ Source/Core/AudioCommon/Src/DPL2Decoder.h | 24 + Source/Core/AudioCommon/Src/OpenALStream.cpp | 85 +- Source/Core/AudioCommon/Src/OpenALStream.h | 6 +- Source/Core/Core/Src/ConfigManager.cpp | 2 + Source/Core/Core/Src/CoreParameter.cpp | 2 + Source/Core/Core/Src/CoreParameter.h | 2 + Source/Core/DolphinWX/Src/ConfigMain.cpp | 16 + Source/Core/DolphinWX/Src/ConfigMain.h | 2 + 20 files changed, 2598 insertions(+), 1566 deletions(-) create mode 100644 Externals/OpenAL/Win32/soft_oal.dll create mode 100644 Externals/OpenAL/Win64/soft_oal.dll create mode 100644 Externals/OpenAL/include/alext.h create mode 100644 Externals/OpenAL/include/efx-presets.h create mode 100644 Source/Core/AudioCommon/Src/DPL2Decoder.cpp create mode 100644 Source/Core/AudioCommon/Src/DPL2Decoder.h diff --git a/Externals/OpenAL/Win32/soft_oal.dll b/Externals/OpenAL/Win32/soft_oal.dll new file mode 100644 index 0000000000000000000000000000000000000000..71ced6a21f8add6fdbd7571a81d4c4a36eca3418 GIT binary patch literal 402553 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