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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 ZDl9EWWMi>RL=a&pmU2u^IpX 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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 literal 0 HcmV?d00001 diff --git a/Externals/OpenAL/Win32/OpenAL32.lib b/Externals/OpenAL/Win32/OpenAL32.lib new file mode 100644 index 0000000000000000000000000000000000000000..d635de97efe4265f914eadb751dd7b34451c6f52 GIT binary patch literal 20552 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 HN3jn8v;lO1 literal 0 HcmV?d00001 diff --git a/Externals/OpenAL/Win32/wrap_oal.dll b/Externals/OpenAL/Win32/wrap_oal.dll new file mode 100644 index 0000000000000000000000000000000000000000..9752892aab8b641bd97f9f33c37bcafe18e680ee GIT binary patch literal 413696 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 literal 0 HcmV?d00001 diff --git a/Externals/OpenAL/Win64/EFX-Util.lib b/Externals/OpenAL/Win64/EFX-Util.lib new file mode 100644 index 0000000000000000000000000000000000000000..5c5e98177a2d1e9ed7a0e4d9c36005de3c1de893 GIT binary patch literal 15984 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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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 ZB^9LA#vrTV6)RQki-XvQww4*yJ^-0K<3Rub 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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%0DMz^4bi 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�-)JGrc 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 z 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 S0;3@?8UmvsFd72%2>}3sJ2tWa 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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 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);