diff --git a/.gitmodules b/.gitmodules index 3ab4d8cf55..388392b763 100644 --- a/.gitmodules +++ b/.gitmodules @@ -26,10 +26,6 @@ path = Externals/VulkanMemoryAllocator url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git shallow = true -[submodule "Externals/cubeb/cubeb"] - path = Externals/cubeb/cubeb - url = https://github.com/mozilla/cubeb.git - shallow = true [submodule "Externals/implot/implot"] path = Externals/implot/implot url = https://github.com/epezent/implot.git diff --git a/Externals/OpenAL/include/al.h b/Externals/OpenAL/include/al.h deleted file mode 100644 index 413b38331e..0000000000 --- a/Externals/OpenAL/include/al.h +++ /dev/null @@ -1,656 +0,0 @@ -#ifndef AL_AL_H -#define AL_AL_H - -#if defined(__cplusplus) -extern "C" { -#endif - -#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 -#endif - -#if defined(_WIN32) - #define AL_APIENTRY __cdecl -#else - #define AL_APIENTRY -#endif - - -/** Deprecated macro. */ -#define OPENAL -#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; - -/** character */ -typedef char ALchar; - -/** signed 8-bit 2's complement integer */ -typedef signed 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. */ - -/** "no distance model" or "no buffer" */ -#define AL_NONE 0 - -/** Boolean False. */ -#define AL_FALSE 0 - -/** Boolean True. */ -#define AL_TRUE 1 - - -/** - * Relative source. - * Type: ALboolean - * Range: [AL_TRUE, AL_FALSE] - * Default: AL_FALSE - * - * Specifies if the Source has relative coordinates. - */ -#define AL_SOURCE_RELATIVE 0x202 - - -/** - * Inner cone angle, in degrees. - * Type: ALint, ALfloat - * Range: [0 - 360] - * Default: 360 - * - * The angle covered by the inner cone, where the source will not attenuate. - */ -#define AL_CONE_INNER_ANGLE 0x1001 - -/** - * Outer cone angle, in degrees. - * Range: [0 - 360] - * Default: 360 - * - * The angle covered by the outer cone, where the source will be fully - * attenuated. - */ -#define AL_CONE_OUTER_ANGLE 0x1002 - -/** - * Source pitch. - * Type: ALfloat - * Range: [0.5 - 2.0] - * Default: 1.0 - * - * A multiplier for the frequency (sample rate) of the source's buffer. - */ -#define AL_PITCH 0x1003 - -/** - * 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_POSITION 0x1004 - -/** - * Source direction. - * Type: ALfloat[3], ALint[3] - * Default: {0, 0, 0} - * - * Specifies the current direction in local space. - * A zero-length vector specifies an omni-directional source (cone is ignored). - */ -#define AL_DIRECTION 0x1005 - -/** - * 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 - * - * 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 - -/** 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_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 for public use. - */ -#define AL_UNUSED 0x2010 -#define AL_PENDING 0x2011 -#define AL_PROCESSED 0x2012 - - -/** No error. */ -#define AL_NO_ERROR 0 - -/** Invalid name paramater passed to AL call. */ -#define AL_INVALID_NAME 0xA001 - -/** Invalid enum parameter passed to AL call. */ -#define AL_INVALID_ENUM 0xA002 - -/** Invalid value parameter passed to AL call. */ -#define AL_INVALID_VALUE 0xA003 - -/** Illegal AL call. */ -#define AL_INVALID_OPERATION 0xA004 - -/** Not enough memory. */ -#define AL_OUT_OF_MEMORY 0xA005 - - -/** 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 - - -/** - * Doppler scale. - * Type: ALfloat - * Range: [0.0 - ] - * Default: 1.0 - * - * Scale for source and listener velocities. - */ -#define AL_DOPPLER_FACTOR 0xC000 -AL_API void AL_APIENTRY alDopplerFactor(ALfloat value); - -/** - * Doppler velocity (deprecated). - * - * A multiplier applied to the Speed of Sound. - */ -#define AL_DOPPLER_VELOCITY 0xC001 -AL_API void AL_APIENTRY alDopplerVelocity(ALfloat value); - -/** - * 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. - */ -#define AL_SPEED_OF_SOUND 0xC003 -AL_API void AL_APIENTRY alSpeedOfSound(ALfloat value); - -/** - * 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. - */ -#define AL_DISTANCE_MODEL 0xD000 -AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel); - -/** 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 - -/** 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 *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); - -/** - * Error retrieval. - * - * Obtain the first error generated in the AL context since the last check. - */ -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); - - -/** 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" */ -#endif - -#endif /* AL_AL_H */ diff --git a/Externals/OpenAL/include/alc.h b/Externals/OpenAL/include/alc.h deleted file mode 100644 index 294e8b33c6..0000000000 --- a/Externals/OpenAL/include/alc.h +++ /dev/null @@ -1,237 +0,0 @@ -#ifndef AL_ALC_H -#define AL_ALC_H - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef ALC_API - #if defined(AL_LIBTYPE_STATIC) - #define ALC_API - #elif defined(_WIN32) - #define ALC_API __declspec(dllimport) - #else - #define ALC_API extern - #endif -#endif - -#if defined(_WIN32) - #define ALC_APIENTRY __cdecl -#else - #define ALC_APIENTRY -#endif - - -/** Deprecated macro. */ -#define ALCAPI ALC_API -#define ALCAPIENTRY ALC_APIENTRY -#define ALC_INVALID 0 - -/** Supported ALC version? */ -#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; - -/** character */ -typedef char ALCchar; - -/** signed 8-bit 2's complement integer */ -typedef signed 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 - -/** Context attribute: Hz. */ -#define ALC_FREQUENCY 0x1007 - -/** Context attribute: Hz. */ -#define ALC_REFRESH 0x1008 - -/** Context attribute: AL_TRUE or AL_FALSE. */ -#define ALC_SYNC 0x1009 - -/** Context attribute: requested Mono (3D) Sources. */ -#define ALC_MONO_SOURCES 0x1010 - -/** Context attribute: requested Stereo Sources. */ -#define ALC_STEREO_SOURCES 0x1011 - -/** No error. */ -#define ALC_NO_ERROR 0 - -/** Invalid device handle. */ -#define ALC_INVALID_DEVICE 0xA001 - -/** Invalid context handle. */ -#define ALC_INVALID_CONTEXT 0xA002 - -/** Invalid enum parameter passed to an ALC call. */ -#define ALC_INVALID_ENUM 0xA003 - -/** Invalid value parameter passed to an ALC call. */ -#define ALC_INVALID_VALUE 0xA004 - -/** Out of memory. */ -#define ALC_OUT_OF_MEMORY 0xA005 - - -/** 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 -/** - * 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_DEVICE_SPECIFIER 0x1005 -/** String for space-separated list of ALC extensions. */ -#define ALC_EXTENSIONS 0x1006 - - -/** Capture extension */ -#define ALC_EXT_CAPTURE 1 -/** - * 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 - - -/** 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). - */ -#define ALC_ALL_DEVICES_SPECIFIER 0x1013 - - -/** 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 Device 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 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); - -/** 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); - -/** 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) -} -#endif - -#endif /* AL_ALC_H */ diff --git a/Externals/OpenAL/include/alext.h b/Externals/OpenAL/include/alext.h deleted file mode 100644 index 7d2a95274a..0000000000 --- a/Externals/OpenAL/include/alext.h +++ /dev/null @@ -1,400 +0,0 @@ -/** - * 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 - -#ifndef ALC_EXT_DEFAULT_FILTER_ORDER -#define ALC_EXT_DEFAULT_FILTER_ORDER 1 -#define ALC_DEFAULT_FILTER_ORDER 0x1100 -#endif - -#ifndef AL_SOFT_deferred_updates -#define AL_SOFT_deferred_updates 1 -#define AL_DEFERRED_UPDATES_SOFT 0xC002 -typedef ALvoid (AL_APIENTRY*LPALDEFERUPDATESSOFT)(void); -typedef ALvoid (AL_APIENTRY*LPALPROCESSUPDATESSOFT)(void); -#ifdef AL_ALEXT_PROTOTYPES -AL_API ALvoid AL_APIENTRY alDeferUpdatesSOFT(void); -AL_API ALvoid AL_APIENTRY alProcessUpdatesSOFT(void); -#endif -#endif - -#ifndef AL_SOFT_block_alignment -#define AL_SOFT_block_alignment 1 -#define AL_UNPACK_BLOCK_ALIGNMENT_SOFT 0x200C -#define AL_PACK_BLOCK_ALIGNMENT_SOFT 0x200D -#endif - -#ifndef AL_SOFT_MSADPCM -#define AL_SOFT_MSADPCM 1 -#define AL_FORMAT_MONO_MSADPCM_SOFT 0x1302 -#define AL_FORMAT_STEREO_MSADPCM_SOFT 0x1303 -#endif - -#ifndef AL_SOFT_source_length -#define AL_SOFT_source_length 1 -/*#define AL_BYTE_LENGTH_SOFT 0x2009*/ -/*#define AL_SAMPLE_LENGTH_SOFT 0x200A*/ -/*#define AL_SEC_LENGTH_SOFT 0x200B*/ -#endif - -#ifndef ALC_SOFT_pause_device -#define ALC_SOFT_pause_device 1 -typedef void (ALC_APIENTRY*LPALCDEVICEPAUSESOFT)(ALCdevice *device); -typedef void (ALC_APIENTRY*LPALCDEVICERESUMESOFT)(ALCdevice *device); -#ifdef AL_ALEXT_PROTOTYPES -ALC_API void ALC_APIENTRY alcDevicePauseSOFT(ALCdevice *device); -ALC_API void ALC_APIENTRY alcDeviceResumeSOFT(ALCdevice *device); -#endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Externals/OpenAL/include/efx-creative.h b/Externals/OpenAL/include/efx-creative.h deleted file mode 100644 index 0a04c982e1..0000000000 --- a/Externals/OpenAL/include/efx-creative.h +++ /dev/null @@ -1,3 +0,0 @@ -/* 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 deleted file mode 100644 index 86dcbda2f3..0000000000 --- a/Externals/OpenAL/include/efx-presets.h +++ /dev/null @@ -1,402 +0,0 @@ -/* 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 deleted file mode 100644 index 57766983f6..0000000000 --- a/Externals/OpenAL/include/efx.h +++ /dev/null @@ -1,761 +0,0 @@ -#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_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 - - -/* 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 - -/* 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 - -/* 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 - -/* Pitchshifter effect parameters */ -#define AL_PITCH_SHIFTER_COARSE_TUNE 0x0001 -#define AL_PITCH_SHIFTER_FINE_TUNE 0x0002 - -/* Ringmodulator effect parameters */ -#define AL_RING_MODULATOR_FREQUENCY 0x0001 -#define AL_RING_MODULATOR_HIGHPASS_CUTOFF 0x0002 -#define AL_RING_MODULATOR_WAVEFORM 0x0003 - -/* 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 - -/* Compressor effect parameters */ -#define AL_COMPRESSOR_ONOFF 0x0001 - -/* 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 - -/* 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 Effect Slot properties. */ -#define AL_EFFECTSLOT_EFFECT 0x0001 -#define AL_EFFECTSLOT_GAIN 0x0002 -#define AL_EFFECTSLOT_AUXILIARY_SEND_AUTO 0x0003 - -/* NULL Auxiliary Slot ID to disable a source send. */ -#define AL_EFFECTSLOT_NULL 0x0000 - - -/* Filter properties. */ - -/* Lowpass filter parameters */ -#define AL_LOWPASS_GAIN 0x0001 -#define AL_LOWPASS_GAINHF 0x0002 - -/* Highpass filter parameters */ -#define AL_HIGHPASS_GAIN 0x0001 -#define AL_HIGHPASS_GAINLF 0x0002 - -/* 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 - -/* 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) - -#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_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) - -#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_XYZ (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 - -/* Chorus effect */ -#define AL_CHORUS_WAVEFORM_SINUSOID (0) -#define AL_CHORUS_WAVEFORM_TRIANGLE (1) - -#define AL_CHORUS_MIN_WAVEFORM (0) -#define AL_CHORUS_MAX_WAVEFORM (1) -#define AL_CHORUS_DEFAULT_WAVEFORM (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) - -/* 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) - - -/* 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) - -#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 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 /* AL_EFX_H */ diff --git a/Externals/cubeb/cubeb b/Externals/cubeb/cubeb deleted file mode 160000 index 54217bca3f..0000000000 --- a/Externals/cubeb/cubeb +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 54217bca3f3e0cd53c073690a23dd25d83557909 diff --git a/Externals/cubeb/msvc/cubeb_export.h b/Externals/cubeb/msvc/cubeb_export.h deleted file mode 100644 index da6ccfa963..0000000000 --- a/Externals/cubeb/msvc/cubeb_export.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef CUBEB_EXPORT_H -#define CUBEB_EXPORT_H - -#define CUBEB_EXPORT -#define CUBEB_NO_EXPORT - -#endif diff --git a/Externals/licenses.md b/Externals/licenses.md index 359788e2c8..08e0c91454 100644 --- a/Externals/licenses.md +++ b/Externals/licenses.md @@ -10,8 +10,6 @@ Dolphin includes or links code of the following third-party software projects: [bzip2 license](https://www.sourceware.org/git/?p=bzip2.git;a=blob;f=LICENSE;hb=HEAD) (similar to 3-clause BSD) - [cpp-ipc](https://github.com/mutouyun/cpp-ipc): [MIT](https://github.com/mutouyun/cpp-ipc/blob/master/LICENSE) -- [cubeb](https://github.com/kinetiknz/cubeb): - [ISC](https://github.com/kinetiknz/cubeb/blob/master/LICENSE) - [cwdemangle](https://github.com/encounter/cwdemangle) [CC0-1.0](https://github.com/encounter/cwdemangle/blob/main/LICENSE) - [ENet](http://enet.bespin.org/): @@ -50,8 +48,6 @@ Dolphin includes or links code of the following third-party software projects: [BSD 3-Clause](https://github.com/miniupnp/miniupnp/blob/master/miniupnpc/LICENSE) - [Microsoft Visual C++ Runtime Library](http://www.microsoft.com/en-us/download/details.aspx?id=40784): [System Library if not distributed](https://www.gnu.org/licenses/gpl-faq.html#WindowsRuntimeAndGPL) -- [OpenAL Soft](http://kcat.strangesoft.net/openal.html): - [LGPLv2+](http://repo.or.cz/w/openal-soft.git/blob/HEAD:/COPYING) - [OpenGL Header (MESA)](http://mesa3d.org/): [MIT](http://cgit.freedesktop.org/mesa/mesa/tree/include/GL/gl.h) - [OpenGL Extension Header (Khronos)](https://www.opengl.org/registry/#headers): diff --git a/Makefile b/Makefile index 2d0fb666f6..a0f5ce2813 100644 --- a/Makefile +++ b/Makefile @@ -185,7 +185,7 @@ else ifneq (,$(filter android-arm64 android-x86_64,$(platform))) FLAGS += -DANDROID -DHAVE_EGL=1 -I$(CORE_DIR)/Source/Android -funwind-tables LDFLAGS += -static-libstdc++ HAVE_BUNDLED_ICONV := 1 - LIBS += -lEGL -lOpenSLES -landroid -llog -latomic -lm -ldl + LIBS += -lEGL -landroid -llog -latomic -lm -ldl # Windows (MinGW-w64, native MSYS2 or cross) else diff --git a/Makefile.common b/Makefile.common index c1a8bcded3..56b526a118 100644 --- a/Makefile.common +++ b/Makefile.common @@ -1114,7 +1114,6 @@ DOLPHIN_SOURCES_CXX += \ $(CORE_DIR)/Source/Core/AudioCommon/AudioCommon.cpp \ $(CORE_DIR)/Source/Core/AudioCommon/Mixer.cpp \ $(CORE_DIR)/Source/Core/AudioCommon/SurroundDecoder.cpp \ - $(CORE_DIR)/Source/Core/AudioCommon/NullSoundStream.cpp \ $(CORE_DIR)/Source/Core/AudioCommon/WaveFile.cpp \ $(CORE_DIR)/Source/Core/Common/Assembler/AssemblerShared.cpp \ $(CORE_DIR)/Source/Core/Common/Assembler/AssemblerTables.cpp \ @@ -1800,7 +1799,6 @@ ifeq ($(HAVE_CPPIPC),1) endif ifeq ($(OS_WIN),1) DOLPHIN_SOURCES_CXX += \ - $(CORE_DIR)/Source/Core/AudioCommon/OpenALStream.cpp \ $(CORE_DIR)/Source/Core/Common/Logging/ConsoleListenerWin.cpp \ $(CORE_DIR)/Source/Core/Common/MemArenaWin.cpp \ $(CORE_DIR)/Source/Core/Common/WindowsRegistry.cpp \ @@ -1868,7 +1866,6 @@ ifeq ($(OS_ANDROID),1) DOLPHIN_SOURCES_CXX += \ $(CORE_DIR)/Source/Android/jni/AndroidCommon/AndroidCommon.cpp \ $(CORE_DIR)/Source/Android/jni/AndroidCommon/IDCache.cpp \ - $(CORE_DIR)/Source/Core/AudioCommon/OpenSLESStream.cpp \ $(CORE_DIR)/Source/Core/Common/Logging/ConsoleListenerDroid.cpp \ $(CORE_DIR)/Source/Core/Common/MemArenaAndroid.cpp \ $(CORE_DIR)/Source/Core/Common/GL/GLInterface/EGL.cpp \ @@ -2192,10 +2189,10 @@ ifeq ($(OS_WIN),1) -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS \ -D_SCL_SECURE_NO_WARNINGS -D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING \ -D_WINSOCK_DEPRECATED_NO_WARNINGS -DSTRSAFE_NO_DEPRECATE -DHID_API_NO_EXPORT_DEFINE \ - -I$(EXT_DIR)/OpenAL/include -I$(EXT_DIR)/wil/include -I$(EXT_DIR)/ed25519 + -I$(EXT_DIR)/wil/include -I$(EXT_DIR)/ed25519 endif ifeq ($(OS_ANDROID),1) - DOLPHIN_FLAGS += -DENABLE_VFS_FD -DCIFACE_USE_ANDROID -DHAVE_OPENSL_ES=1 \ + DOLPHIN_FLAGS += -DENABLE_VFS_FD -DCIFACE_USE_ANDROID \ -I$(EXT_DIR)/libadrenotools/include -I$(EXT_DIR)/libadrenotools/lib/linkernsbypass endif diff --git a/Source/Core/AudioCommon/AlsaSoundStream.cpp b/Source/Core/AudioCommon/AlsaSoundStream.cpp deleted file mode 100644 index 5a60f9d45a..0000000000 --- a/Source/Core/AudioCommon/AlsaSoundStream.cpp +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2009 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "AudioCommon/AlsaSoundStream.h" - -#include - -#include "Common/Logging/Log.h" -#include "Common/Thread.h" - -AlsaSound::AlsaSound() - : m_thread_status(ALSAThreadStatus::STOPPED), handle(nullptr), - frames_to_deliver(FRAME_COUNT_MIN) -{ -} - -AlsaSound::~AlsaSound() -{ - m_thread_status.store(ALSAThreadStatus::STOPPING); - - // Immediately lock and unlock mutex to prevent cv race. - std::unique_lock{cv_m}.unlock(); - - // Give the opportunity to the audio thread - // to realize we are stopping the emulation - cv.notify_one(); - if (thread.joinable()) - thread.join(); -} - -bool AlsaSound::Init() -{ - m_thread_status.store(ALSAThreadStatus::PAUSED); - if (!AlsaInit()) - { - m_thread_status.store(ALSAThreadStatus::STOPPED); - return false; - } - - thread = std::thread(&AlsaSound::SoundLoop, this); - return true; -} - -// Called on audio thread. -void AlsaSound::SoundLoop() -{ - Common::SetCurrentThreadName("Audio thread - alsa"); - while (m_thread_status.load() != ALSAThreadStatus::STOPPING) - { - while (m_thread_status.load() == ALSAThreadStatus::RUNNING) - { - m_mixer->Mix(mix_buffer, frames_to_deliver); - int rc = snd_pcm_writei(handle, mix_buffer, frames_to_deliver); - if (rc == -EPIPE) - { - // Underrun - snd_pcm_prepare(handle); - } - else if (rc < 0) - { - ERROR_LOG_FMT(AUDIO, "writei fail: {}", snd_strerror(rc)); - } - } - if (m_thread_status.load() == ALSAThreadStatus::PAUSED) - { - snd_pcm_drop(handle); // Stop sound output - - // Block until thread status changes. - std::unique_lock lock(cv_m); - cv.wait(lock, [this] { return m_thread_status.load() != ALSAThreadStatus::PAUSED; }); - - snd_pcm_prepare(handle); // resume sound output - } - } - AlsaShutdown(); - m_thread_status.store(ALSAThreadStatus::STOPPED); -} - -bool AlsaSound::SetRunning(bool running) -{ - m_thread_status.store(running ? ALSAThreadStatus::RUNNING : ALSAThreadStatus::PAUSED); - - // Immediately lock and unlock mutex to prevent cv race. - std::unique_lock{cv_m}.unlock(); - - // Notify thread that status has changed - cv.notify_one(); - return true; -} - -bool AlsaSound::AlsaInit() -{ - unsigned int sample_rate = m_mixer->GetSampleRate(); - int err; - int dir; - snd_pcm_sw_params_t* swparams; - snd_pcm_hw_params_t* hwparams; - snd_pcm_uframes_t buffer_size, buffer_size_max; - unsigned int periods; - - err = snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Audio open error: {}", snd_strerror(err)); - return false; - } - - snd_pcm_hw_params_alloca(&hwparams); - - err = snd_pcm_hw_params_any(handle, hwparams); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Broken configuration for this PCM: {}", snd_strerror(err)); - return false; - } - - err = snd_pcm_hw_params_set_access(handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Access type not available: {}", snd_strerror(err)); - return false; - } - - err = snd_pcm_hw_params_set_format(handle, hwparams, SND_PCM_FORMAT_S16_LE); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Sample format not available: {}", snd_strerror(err)); - return false; - } - - dir = 0; - err = snd_pcm_hw_params_set_rate_near(handle, hwparams, &sample_rate, &dir); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Rate not available: {}", snd_strerror(err)); - return false; - } - - err = snd_pcm_hw_params_set_channels(handle, hwparams, CHANNEL_COUNT); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Channels count not available: {}", snd_strerror(err)); - return false; - } - - periods = BUFFER_SIZE_MAX / FRAME_COUNT_MIN; - err = snd_pcm_hw_params_set_periods_max(handle, hwparams, &periods, &dir); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Cannot set maximum periods per buffer: {}", snd_strerror(err)); - return false; - } - - buffer_size_max = BUFFER_SIZE_MAX; - err = snd_pcm_hw_params_set_buffer_size_max(handle, hwparams, &buffer_size_max); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Cannot set maximum buffer size: {}", snd_strerror(err)); - return false; - } - - err = snd_pcm_hw_params(handle, hwparams); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Unable to install hw params: {}", snd_strerror(err)); - return false; - } - - err = snd_pcm_hw_params_get_buffer_size(hwparams, &buffer_size); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Cannot get buffer size: {}", snd_strerror(err)); - return false; - } - - err = snd_pcm_hw_params_get_periods_max(hwparams, &periods, &dir); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Cannot get periods: {}", snd_strerror(err)); - return false; - } - - // periods is the number of fragments alsa can wait for during one - // buffer_size - frames_to_deliver = buffer_size / periods; - // limit the minimum size. pulseaudio advertises a minimum of 32 samples. - if (frames_to_deliver < FRAME_COUNT_MIN) - frames_to_deliver = FRAME_COUNT_MIN; - // it is probably a bad idea to try to send more than one buffer of data - if ((unsigned int)frames_to_deliver > buffer_size) - frames_to_deliver = buffer_size; - NOTICE_LOG_FMT(AUDIO, - "ALSA gave us a {} sample \"hardware\" buffer with {} periods. Will send {} " - "samples per fragments.", - buffer_size, periods, frames_to_deliver); - - snd_pcm_sw_params_alloca(&swparams); - - err = snd_pcm_sw_params_current(handle, swparams); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "cannot init sw params: {}", snd_strerror(err)); - return false; - } - - err = snd_pcm_sw_params_set_start_threshold(handle, swparams, 0U); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "cannot set start thresh: {}", snd_strerror(err)); - return false; - } - - err = snd_pcm_sw_params(handle, swparams); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "cannot set sw params: {}", snd_strerror(err)); - return false; - } - - err = snd_pcm_prepare(handle); - if (err < 0) - { - ERROR_LOG_FMT(AUDIO, "Unable to prepare: {}", snd_strerror(err)); - return false; - } - NOTICE_LOG_FMT(AUDIO, "ALSA successfully initialized."); - return true; -} - -void AlsaSound::AlsaShutdown() -{ - if (handle != nullptr) - { - snd_pcm_drop(handle); - snd_pcm_close(handle); - handle = nullptr; - } -} diff --git a/Source/Core/AudioCommon/AlsaSoundStream.h b/Source/Core/AudioCommon/AlsaSoundStream.h deleted file mode 100644 index d3e34386a7..0000000000 --- a/Source/Core/AudioCommon/AlsaSoundStream.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include -#include -#include -#include - -#if defined(HAVE_ALSA) && HAVE_ALSA -#include -#endif - -#include "AudioCommon/SoundStream.h" -#include "Common/CommonTypes.h" - -class AlsaSound final : public SoundStream -{ -#if defined(HAVE_ALSA) && HAVE_ALSA -public: - AlsaSound(); - ~AlsaSound() override; - - bool Init() override; - bool SetRunning(bool running) override; - - static bool IsValid() { return true; } - -private: - void SoundLoop(); - - // maximum number of frames the buffer can hold - static constexpr size_t BUFFER_SIZE_MAX = 8192; - - // minimum number of frames to deliver in one transfer - static constexpr u32 FRAME_COUNT_MIN = 256; - - // number of channels per frame - static constexpr u32 CHANNEL_COUNT = 2; - - enum class ALSAThreadStatus - { - RUNNING, - PAUSED, - STOPPING, - STOPPED, - }; - - bool AlsaInit(); - void AlsaShutdown(); - - s16 mix_buffer[BUFFER_SIZE_MAX * CHANNEL_COUNT]; - std::thread thread; - std::atomic m_thread_status; - std::condition_variable cv; - std::mutex cv_m; - - snd_pcm_t* handle; - unsigned int frames_to_deliver; -#endif -}; diff --git a/Source/Core/AudioCommon/AudioCommon.cpp b/Source/Core/AudioCommon/AudioCommon.cpp index 86cd50b192..dfd354bca3 100644 --- a/Source/Core/AudioCommon/AudioCommon.cpp +++ b/Source/Core/AudioCommon/AudioCommon.cpp @@ -6,76 +6,20 @@ #include #include -#include "AudioCommon/AlsaSoundStream.h" -#include "AudioCommon/CubebStream.h" #include "AudioCommon/Mixer.h" -#include "AudioCommon/NullSoundStream.h" -#include "AudioCommon/OpenALStream.h" -#include "AudioCommon/OpenSLESStream.h" -#include "AudioCommon/PulseAudioStream.h" -#ifdef _MSC_VER -#include "AudioCommon/WASAPIStream.h" -#endif #include "Common/FileUtil.h" #include "Common/Logging/Log.h" #include "Common/TimeUtil.h" #include "Core/Config/MainSettings.h" #include "Core/ConfigManager.h" #include "Core/System.h" -#ifdef __LIBRETRO__ -#include "DolphinLibretro/Audio.h" -#endif namespace AudioCommon { -constexpr int AUDIO_VOLUME_MIN = 0; -constexpr int AUDIO_VOLUME_MAX = 100; - -static std::unique_ptr CreateSoundStreamForBackend(std::string_view backend) -{ - if (backend == BACKEND_CUBEB && CubebStream::IsValid()) - return std::make_unique(); - else if (backend == BACKEND_OPENAL && OpenALStream::IsValid()) - return std::make_unique(); - else if (backend == BACKEND_NULLSOUND) - return std::make_unique(); - else if (backend == BACKEND_ALSA && AlsaSound::IsValid()) - return std::make_unique(); - else if (backend == BACKEND_PULSEAUDIO && PulseAudio::IsValid()) - return std::make_unique(); - else if (backend == BACKEND_OPENSLES && OpenSLESStream::IsValid()) - return std::make_unique(); -#ifdef _MSC_VER - else if (backend == BACKEND_WASAPI && WASAPIStream::IsValid()) - return std::make_unique(); -#endif -#ifdef __LIBRETRO__ - else if (backend == BACKEND_LIBRETRO && Libretro::Audio::Stream::IsValid()) - return std::make_unique(); -#endif - return {}; -} - void InitSoundStream(Core::System& system) { - std::string backend = Config::Get(Config::MAIN_AUDIO_BACKEND); - std::unique_ptr sound_stream = CreateSoundStreamForBackend(backend); - - if (!sound_stream) - { - WARN_LOG_FMT(AUDIO, "Unknown backend {}, using {} instead.", backend, GetDefaultSoundBackend()); - backend = GetDefaultSoundBackend(); - sound_stream = CreateSoundStreamForBackend(backend); - } - - if (!sound_stream || !sound_stream->Init()) - { - WARN_LOG_FMT(AUDIO, "Could not initialize backend {}, using {} instead.", backend, - BACKEND_NULLSOUND); - sound_stream = std::make_unique(); - sound_stream->Init(); - } - + auto sound_stream = std::make_unique(); + sound_stream->Init(); system.SetSoundStream(std::move(sound_stream)); } @@ -83,7 +27,6 @@ void PostInitSoundStream(Core::System& system) { // This needs to be called after AudioInterface::Init and SerialInterface::Init (for GBA devices) // where input sample rates are set - UpdateSoundStream(system); SetSoundStreamRunning(system, true); if (Config::Get(Config::MAIN_DUMP_AUDIO) && !system.IsAudioDumpStarted()) @@ -103,114 +46,20 @@ void ShutdownSoundStream(Core::System& system) INFO_LOG_FMT(AUDIO, "Done shutting down sound stream"); } -std::string GetDefaultSoundBackend() -{ -#if defined(__LIBRETRO__) - return BACKEND_LIBRETRO; -#elif defined(ANDROID) - return BACKEND_OPENSLES; -#elif defined(__linux__) - if (AlsaSound::IsValid()) - return BACKEND_ALSA; -#else - if (CubebStream::IsValid()) - return BACKEND_CUBEB; - - return BACKEND_NULLSOUND; -#endif -} - DPL2Quality GetDefaultDPL2Quality() { return DPL2Quality::High; } -std::vector GetSoundBackends() -{ - std::vector backends; - - backends.emplace_back(BACKEND_NULLSOUND); - if (CubebStream::IsValid()) - backends.emplace_back(BACKEND_CUBEB); - if (AlsaSound::IsValid()) - backends.emplace_back(BACKEND_ALSA); - if (PulseAudio::IsValid()) - backends.emplace_back(BACKEND_PULSEAUDIO); - if (OpenALStream::IsValid()) - backends.emplace_back(BACKEND_OPENAL); - if (OpenSLESStream::IsValid()) - backends.emplace_back(BACKEND_OPENSLES); -#ifdef _MSC_VER - if (WASAPIStream::IsValid()) - backends.emplace_back(BACKEND_WASAPI); -#endif -#ifdef __LIBRETRO__ - if (Libretro::Audio::Stream::IsValid()) - backends.emplace_back(BACKEND_LIBRETRO); -#endif - return backends; -} - -bool SupportsDPL2Decoder(std::string_view backend) -{ -#ifndef __APPLE__ - if (backend == BACKEND_OPENAL) - return true; -#endif - if (backend == BACKEND_CUBEB) - return true; - if (backend == BACKEND_PULSEAUDIO) - return true; - return false; -} - -bool SupportsLatencyControl(std::string_view backend) -{ - return backend == BACKEND_OPENAL || backend == BACKEND_WASAPI; -} - -bool SupportsVolumeChanges(std::string_view backend) -{ - // FIXME: this one should ask the backend whether it supports it. - // but getting the backend from string etc. is probably - // too much just to enable/disable a stupid slider... - return backend == BACKEND_CUBEB || backend == BACKEND_OPENAL || backend == BACKEND_WASAPI; -} - -void UpdateSoundStream(Core::System& system) -{ - SoundStream* sound_stream = system.GetSoundStream(); - - if (sound_stream) - { - const int volume = - Config::Get(Config::MAIN_AUDIO_MUTED) ? 0 : Config::Get(Config::MAIN_AUDIO_VOLUME); - sound_stream->SetVolume(volume); - } -} - void SetSoundStreamRunning(Core::System& system, bool running) { - SoundStream* sound_stream = system.GetSoundStream(); - - if (!sound_stream) - return; - - if (system.IsSoundStreamRunning() == running) - return; - system.SetSoundStreamRunning(running); - - if (sound_stream->SetRunning(running)) - return; - if (running) - ERROR_LOG_FMT(AUDIO, "Error starting stream."); - else - ERROR_LOG_FMT(AUDIO, "Error stopping stream."); + if (system.GetSoundStream() && system.IsSoundStreamRunning() != running) + system.SetSoundStreamRunning(running); } void SendAIBuffer(Core::System& system, const short* samples, unsigned int num_samples) { - const SoundStream* const sound_stream = system.GetSoundStream(); + SoundStream* const sound_stream = system.GetSoundStream(); if (!sound_stream) return; @@ -220,14 +69,10 @@ void SendAIBuffer(Core::System& system, const short* samples, unsigned int num_s else if (!Config::Get(Config::MAIN_DUMP_AUDIO) && system.IsAudioDumpStarted()) StopAudioDump(system); - Mixer* mixer = sound_stream->GetMixer(); - - if (mixer && samples) + if (samples) { - mixer->PushSamples(samples, num_samples); -#ifdef __LIBRETRO__ - const_cast(sound_stream)->Update(num_samples); -#endif + sound_stream->GetMixer()->PushSamples(samples, num_samples); + sound_stream->Update(num_samples); } } @@ -264,33 +109,4 @@ void StopAudioDump(Core::System& system) sound_stream->GetMixer()->StopLogDSPAudio(); system.SetAudioDumpStarted(false); } - -void IncreaseVolume(Core::System& system, unsigned short offset) -{ - Config::SetBaseOrCurrent(Config::MAIN_AUDIO_MUTED, false); - int currentVolume = Config::Get(Config::MAIN_AUDIO_VOLUME); - currentVolume += offset; - if (currentVolume > AUDIO_VOLUME_MAX) - currentVolume = AUDIO_VOLUME_MAX; - Config::SetBaseOrCurrent(Config::MAIN_AUDIO_VOLUME, currentVolume); - UpdateSoundStream(system); -} - -void DecreaseVolume(Core::System& system, unsigned short offset) -{ - Config::SetBaseOrCurrent(Config::MAIN_AUDIO_MUTED, false); - int currentVolume = Config::Get(Config::MAIN_AUDIO_VOLUME); - currentVolume -= offset; - if (currentVolume < AUDIO_VOLUME_MIN) - currentVolume = AUDIO_VOLUME_MIN; - Config::SetBaseOrCurrent(Config::MAIN_AUDIO_VOLUME, currentVolume); - UpdateSoundStream(system); -} - -void ToggleMuteVolume(Core::System& system) -{ - const bool isMuted = Config::Get(Config::MAIN_AUDIO_MUTED); - Config::SetBaseOrCurrent(Config::MAIN_AUDIO_MUTED, !isMuted); - UpdateSoundStream(system); -} } // namespace AudioCommon diff --git a/Source/Core/AudioCommon/AudioCommon.h b/Source/Core/AudioCommon/AudioCommon.h index bd94ba5eba..e2403ea3b0 100644 --- a/Source/Core/AudioCommon/AudioCommon.h +++ b/Source/Core/AudioCommon/AudioCommon.h @@ -3,15 +3,9 @@ #pragma once -#include -#include -#include - #include "AudioCommon/Enums.h" #include "AudioCommon/SoundStream.h" -class Mixer; - namespace Core { class System; @@ -22,18 +16,9 @@ namespace AudioCommon void InitSoundStream(Core::System& system); void PostInitSoundStream(Core::System& system); void ShutdownSoundStream(Core::System& system); -std::string GetDefaultSoundBackend(); -std::vector GetSoundBackends(); DPL2Quality GetDefaultDPL2Quality(); -bool SupportsDPL2Decoder(std::string_view backend); -bool SupportsLatencyControl(std::string_view backend); -bool SupportsVolumeChanges(std::string_view backend); -void UpdateSoundStream(Core::System& system); void SetSoundStreamRunning(Core::System& system, bool running); void SendAIBuffer(Core::System& system, const short* samples, unsigned int num_samples); void StartAudioDump(Core::System& system); void StopAudioDump(Core::System& system); -void IncreaseVolume(Core::System& system, unsigned short offset); -void DecreaseVolume(Core::System& system, unsigned short offset); -void ToggleMuteVolume(Core::System& system); } // namespace AudioCommon diff --git a/Source/Core/AudioCommon/CubebStream.cpp b/Source/Core/AudioCommon/CubebStream.cpp deleted file mode 100644 index 0cdf7f3b99..0000000000 --- a/Source/Core/AudioCommon/CubebStream.cpp +++ /dev/null @@ -1,230 +0,0 @@ -// Copyright 2017 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "AudioCommon/CubebStream.h" - -#include - -#include "AudioCommon/CubebUtils.h" -#include "Common/CommonTypes.h" -#include "Common/Logging/Log.h" -#include "Core/Config/MainSettings.h" -#include "Core/System.h" - -#ifdef _WIN32 -#include -#endif - -// ~10 ms - needs to be at least 240 for surround -constexpr u32 BUFFER_SAMPLES = 512; - -long CubebStream::DataCallback(cubeb_stream* stream, void* user_data, const void* /*input_buffer*/, - void* output_buffer, long num_frames) -{ - const auto* const self = static_cast(user_data); - - if (self->m_stereo) - self->m_mixer->Mix(static_cast(output_buffer), num_frames); - else - self->m_mixer->MixSurround(static_cast(output_buffer), num_frames); - - return num_frames; -} - -void CubebStream::StateCallback(cubeb_stream* stream, void* user_data, cubeb_state state) -{ -} - -long CubebStream::WiimoteDataCallback(cubeb_stream* stream, void* user_data, - const void* /*input_buffer*/, void* output_buffer, - long num_frames) -{ - const auto* data = static_cast(user_data); - data->self->m_mixer->MixWiimoteSpeaker(data->wiimote_index, static_cast(output_buffer), - num_frames); - return num_frames; -} - -void CubebStream::WiimoteStateCallback(cubeb_stream* stream, void* user_data, cubeb_state state) -{ -} - -CubebStream::CubebStream() -#ifdef _WIN32 - : m_work_queue("Cubeb Worker") -{ - m_work_queue.PushBlocking([this] { - const auto result = CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE); - m_coinit_success = result == S_OK; - m_should_couninit = result == S_OK || result == S_FALSE; - }); -} -#else - = default; -#endif - -bool CubebStream::Init() -{ - bool return_value = false; - -#ifdef _WIN32 - if (!m_coinit_success) - return false; - m_work_queue.PushBlocking([this, &return_value] { -#endif - m_ctx = CubebUtils::GetContext(); - if (m_ctx) - { - m_stereo = !Config::ShouldUseDPL2Decoder(); - - cubeb_stream_params params{}; - params.rate = m_mixer->GetSampleRate(); - if (m_stereo) - { - params.channels = 2; - params.format = CUBEB_SAMPLE_S16NE; - params.layout = CUBEB_LAYOUT_STEREO; - } - else - { - params.channels = 6; - params.format = CUBEB_SAMPLE_FLOAT32NE; - params.layout = CUBEB_LAYOUT_3F2_LFE; - } - - u32 minimum_latency = 0; - if (cubeb_get_min_latency(m_ctx.get(), ¶ms, &minimum_latency) != CUBEB_OK) - ERROR_LOG_FMT(AUDIO, "Error getting minimum latency"); - INFO_LOG_FMT(AUDIO, "Minimum latency: {} frames", minimum_latency); - - return_value = - cubeb_stream_init(m_ctx.get(), &m_stream, "Dolphin Audio Output", nullptr, nullptr, - nullptr, ¶ms, std::max(BUFFER_SAMPLES, minimum_latency), - DataCallback, StateCallback, this) == CUBEB_OK; - - // Create per-wiimote streams for audio routing (Wii games only, when enabled) - if (return_value && Core::System::GetInstance().IsWii() && - Config::Get(Config::MAIN_WIIMOTE_AUDIO_ROUTING_ENABLED)) - { - static const char* const WIIMOTE_STREAM_NAMES[4] = { - "Dolphin Wiimote 1 Audio", "Dolphin Wiimote 2 Audio", "Dolphin Wiimote 3 Audio", - "Dolphin Wiimote 4 Audio"}; - - cubeb_stream_params wiimote_params{}; - wiimote_params.rate = m_mixer->GetSampleRate(); - wiimote_params.channels = 2; - wiimote_params.format = CUBEB_SAMPLE_S16NE; - wiimote_params.layout = CUBEB_LAYOUT_STEREO; - - for (std::size_t i = 0; i < m_wiimote_streams.size(); ++i) - { - if (!Config::Get(Config::MAIN_WIIMOTE_AUDIO_OUTPUT_ENABLED[i])) - continue; - - const std::string device_id_str = - Config::Get(Config::MAIN_WIIMOTE_AUDIO_OUTPUT_DEVICE[i]); - const cubeb_devid output_devid = - device_id_str.empty() ? - nullptr : - static_cast(CubebUtils::GetOutputDeviceById(device_id_str)); - - u32 wiimote_min_latency = 0; - cubeb_get_min_latency(m_ctx.get(), &wiimote_params, &wiimote_min_latency); - - m_wiimote_stream_data[i] = {this, i}; - const int result = cubeb_stream_init( - m_ctx.get(), &m_wiimote_streams[i], WIIMOTE_STREAM_NAMES[i], nullptr, nullptr, - output_devid, &wiimote_params, std::max(BUFFER_SAMPLES, wiimote_min_latency), - WiimoteDataCallback, WiimoteStateCallback, &m_wiimote_stream_data[i]); - - if (result != CUBEB_OK) - { - ERROR_LOG_FMT(AUDIO, "Failed to create Cubeb stream for Wiimote {} audio routing", - i + 1); - m_wiimote_streams[i] = nullptr; - } - } - } - } - -#ifdef _WIN32 - }); -#endif - - return return_value; -} - -bool CubebStream::SetRunning(bool running) -{ - bool return_value = false; - -#ifdef _WIN32 - if (!m_coinit_success) - return false; - m_work_queue.PushBlocking([this, running, &return_value] { -#endif - if (running) - { - return_value = cubeb_stream_start(m_stream) == CUBEB_OK; - for (auto& ws : m_wiimote_streams) - { - if (ws) - cubeb_stream_start(ws); - } - } - else - { - return_value = cubeb_stream_stop(m_stream) == CUBEB_OK; - for (auto& ws : m_wiimote_streams) - { - if (ws) - cubeb_stream_stop(ws); - } - } -#ifdef _WIN32 - }); -#endif - - return return_value; -} - -CubebStream::~CubebStream() -{ -#ifdef _WIN32 - m_work_queue.PushBlocking([this] { -#endif - cubeb_stream_stop(m_stream); - cubeb_stream_destroy(m_stream); - for (auto& ws : m_wiimote_streams) - { - if (ws) - { - cubeb_stream_stop(ws); - cubeb_stream_destroy(ws); - ws = nullptr; - } - } -#ifdef _WIN32 - if (m_should_couninit) - { - m_should_couninit = false; - CoUninitialize(); - } - m_coinit_success = false; - }); -#endif - m_ctx.reset(); -} - -void CubebStream::SetVolume(int volume) -{ -#ifdef _WIN32 - if (!m_coinit_success) - return; - m_work_queue.PushBlocking([this, volume] { -#endif - cubeb_stream_set_volume(m_stream, volume / 100.0f); -#ifdef _WIN32 - }); -#endif -} diff --git a/Source/Core/AudioCommon/CubebStream.h b/Source/Core/AudioCommon/CubebStream.h deleted file mode 100644 index 1c95fd50d8..0000000000 --- a/Source/Core/AudioCommon/CubebStream.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2017 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include -#include -#include - -#include "AudioCommon/SoundStream.h" -#ifdef _WIN32 -#include "Common/WorkQueueThread.h" -#endif - -#ifdef HAVE_CUBEB -#include -#endif - -class CubebStream final : public SoundStream -{ -#ifdef HAVE_CUBEB -public: - CubebStream(); - CubebStream(const CubebStream& other) = delete; - CubebStream(CubebStream&& other) = delete; - CubebStream& operator=(const CubebStream& other) = delete; - CubebStream& operator=(CubebStream&& other) = delete; - ~CubebStream() override; - bool Init() override; - bool SetRunning(bool running) override; - void SetVolume(int) override; - static bool IsValid() { return true; } - -private: - struct WiimoteStreamData - { - CubebStream* self; - std::size_t wiimote_index; - }; - - bool m_stereo = false; - std::shared_ptr m_ctx; - cubeb_stream* m_stream = nullptr; - std::array m_wiimote_stream_data{}; - std::array m_wiimote_streams{}; - - std::vector m_short_buffer; - std::vector m_floatstereo_buffer; - -#ifdef _WIN32 - Common::AsyncWorkThread m_work_queue; - bool m_coinit_success = false; - bool m_should_couninit = false; -#endif - - static long DataCallback(cubeb_stream* stream, void* user_data, const void* /*input_buffer*/, - void* output_buffer, long num_frames); - static void StateCallback(cubeb_stream* stream, void* user_data, cubeb_state state); - static long WiimoteDataCallback(cubeb_stream* stream, void* user_data, - const void* /*input_buffer*/, void* output_buffer, - long num_frames); - static void WiimoteStateCallback(cubeb_stream* stream, void* user_data, cubeb_state state); -#endif -}; diff --git a/Source/Core/AudioCommon/CubebUtils.cpp b/Source/Core/AudioCommon/CubebUtils.cpp deleted file mode 100644 index 0be4fdeb81..0000000000 --- a/Source/Core/AudioCommon/CubebUtils.cpp +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright 2017 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "AudioCommon/CubebUtils.h" - -#include -#include -#include - -#include "Common/Logging/Log.h" -#include "Common/Logging/LogManager.h" -#include "Common/StringUtil.h" - -#include - -#ifdef _WIN32 -#include -#endif - -static void LogCallback(const char* format, ...) -{ - auto* instance = Common::Log::LogManager::GetInstance(); - if (instance == nullptr) - return; - - constexpr auto log_type = Common::Log::LogType::AUDIO; - constexpr auto log_level = Common::Log::LogLevel::LINFO; - if (!instance->IsEnabled(log_type, log_level)) - return; - - va_list args; - va_start(args, format); - const char* filename = va_arg(args, const char*); - const auto last_slash = std::string_view(filename).find_last_of("/\\"); - if (last_slash != std::string_view::npos) - filename = filename + last_slash + 1; - const int lineno = va_arg(args, int); - const std::string adapted_format(StripWhitespace(format + strlen("%s:%d:"))); - const std::string message = StringFromFormatV(adapted_format.c_str(), args); - va_end(args); - - instance->LogWithFullPath(log_level, log_type, filename, lineno, message.c_str()); -} - -static void DestroyContext(cubeb* ctx) -{ - cubeb_destroy(ctx); - if (cubeb_set_log_callback(CUBEB_LOG_DISABLED, nullptr) != CUBEB_OK) - { - ERROR_LOG_FMT(AUDIO, "Error removing cubeb log callback"); - } -} - -namespace CubebUtils -{ -std::shared_ptr GetContext() -{ - static std::weak_ptr weak; - - std::shared_ptr shared = weak.lock(); - // Already initialized - if (shared) - return shared; - - if (cubeb_set_log_callback(CUBEB_LOG_NORMAL, LogCallback) != CUBEB_OK) - { - ERROR_LOG_FMT(AUDIO, "Error setting cubeb log callback"); - } - - cubeb* ctx; - if (cubeb_init(&ctx, "Dolphin Emulator", nullptr) != CUBEB_OK) - { - ERROR_LOG_FMT(AUDIO, "Error initializing cubeb library"); - return nullptr; - } - INFO_LOG_FMT(AUDIO, "Cubeb initialized using {} backend", cubeb_get_backend_id(ctx)); - - weak = shared = {ctx, DestroyContext}; - return shared; -} - -std::vector> ListInputDevices() -{ - std::vector> devices; - - cubeb_device_collection collection; - auto cubeb_ctx = GetContext(); - const int r = cubeb_enumerate_devices(cubeb_ctx.get(), CUBEB_DEVICE_TYPE_INPUT, &collection); - - if (r != CUBEB_OK) - { - ERROR_LOG_FMT(AUDIO, "Error listing cubeb input devices"); - return devices; - } - - INFO_LOG_FMT(AUDIO, "Listing cubeb input devices:"); - for (uint32_t i = 0; i < collection.count; i++) - { - const auto& info = collection.device[i]; - const auto device_state = info.state; - const char* state_name = [device_state] { - switch (device_state) - { - case CUBEB_DEVICE_STATE_DISABLED: - return "disabled"; - case CUBEB_DEVICE_STATE_UNPLUGGED: - return "unplugged"; - case CUBEB_DEVICE_STATE_ENABLED: - return "enabled"; - default: - return "unknown?"; - } - }(); - - // According to cubeb_device_info definition in cubeb.h: - // > "Optional vendor name, may be NULL." - // In practice, it seems some other fields might be NULL as well. - static constexpr auto fmt_str = [](const char* ptr) constexpr -> const char* { - return (ptr == nullptr) ? "(null)" : ptr; - }; - - INFO_LOG_FMT(AUDIO, - "[{}] Device ID: {}\n" - "\tName: {}\n" - "\tGroup ID: {}\n" - "\tVendor: {}\n" - "\tState: {}", - i, fmt_str(info.device_id), fmt_str(info.friendly_name), fmt_str(info.group_id), - fmt_str(info.vendor_name), state_name); - - if (info.device_id == nullptr) - continue; // Shouldn't happen - - if (info.state == CUBEB_DEVICE_STATE_ENABLED) - { - devices.emplace_back(info.device_id, fmt_str(info.friendly_name)); - } - } - - cubeb_device_collection_destroy(cubeb_ctx.get(), &collection); - - return devices; -} - -cubeb_devid GetInputDeviceById(std::string_view id) -{ - if (id.empty()) - return nullptr; - - cubeb_device_collection collection; - auto cubeb_ctx = CubebUtils::GetContext(); - const int r = cubeb_enumerate_devices(cubeb_ctx.get(), CUBEB_DEVICE_TYPE_INPUT, &collection); - - if (r != CUBEB_OK) - { - ERROR_LOG_FMT(AUDIO, "Error enumerating cubeb input devices"); - return nullptr; - } - - cubeb_devid device_id = nullptr; - for (uint32_t i = 0; i < collection.count; i++) - { - const auto& info = collection.device[i]; - if (id.compare(info.device_id) == 0) - { - device_id = info.devid; - break; - } - } - if (device_id == nullptr) - { - WARN_LOG_FMT(AUDIO, "Failed to find selected input device, defaulting to system preferences"); - } - - cubeb_device_collection_destroy(cubeb_ctx.get(), &collection); - - return device_id; -} - -std::vector> ListOutputDevices() -{ - std::vector> devices; - - cubeb_device_collection collection; - auto cubeb_ctx = GetContext(); - if (!cubeb_ctx) - return devices; - - const int r = cubeb_enumerate_devices(cubeb_ctx.get(), CUBEB_DEVICE_TYPE_OUTPUT, &collection); - if (r != CUBEB_OK) - { - ERROR_LOG_FMT(AUDIO, "Error listing cubeb output devices"); - return devices; - } - - for (uint32_t i = 0; i < collection.count; i++) - { - const auto& info = collection.device[i]; - if (info.device_id == nullptr) - continue; - - if (info.state == CUBEB_DEVICE_STATE_ENABLED) - { - const char* name = (info.friendly_name != nullptr) ? info.friendly_name : info.device_id; - devices.emplace_back(info.device_id, name); - } - } - - cubeb_device_collection_destroy(cubeb_ctx.get(), &collection); - return devices; -} - -const void* GetOutputDeviceById(std::string_view id) -{ - if (id.empty()) - return nullptr; - - cubeb_device_collection collection; - auto cubeb_ctx = GetContext(); - if (!cubeb_ctx) - return nullptr; - - const int r = cubeb_enumerate_devices(cubeb_ctx.get(), CUBEB_DEVICE_TYPE_OUTPUT, &collection); - if (r != CUBEB_OK) - { - ERROR_LOG_FMT(AUDIO, "Error enumerating cubeb output devices"); - return nullptr; - } - - cubeb_devid device_id = nullptr; - for (uint32_t i = 0; i < collection.count; i++) - { - const auto& info = collection.device[i]; - if (info.device_id && id.compare(info.device_id) == 0) - { - device_id = info.devid; - break; - } - } - - if (device_id == nullptr) - { - WARN_LOG_FMT(AUDIO, "Failed to find selected output device, defaulting to system preferences"); - } - - cubeb_device_collection_destroy(cubeb_ctx.get(), &collection); - return device_id; -} - -CoInitSyncWorker::CoInitSyncWorker([[maybe_unused]] std::string worker_name) -#ifdef _WIN32 - : m_work_queue{std::move(worker_name)} -#endif -{ -#ifdef _WIN32 - m_work_queue.PushBlocking([this] { - const auto result = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE); - m_coinit_success = result == S_OK; - m_should_couninit = m_coinit_success || result == S_FALSE; - }); -#endif -} - -CoInitSyncWorker::~CoInitSyncWorker() -{ -#ifdef _WIN32 - if (m_should_couninit) - { - m_work_queue.PushBlocking([this] { - m_should_couninit = false; - CoUninitialize(); - }); - } - m_coinit_success = false; -#endif -} - -bool CoInitSyncWorker::Execute(FunctionType f) -{ -#ifdef _WIN32 - if (!m_coinit_success) - return false; - - m_work_queue.PushBlocking(std::move(f)); -#else - f(); -#endif - return true; -} -} // namespace CubebUtils diff --git a/Source/Core/AudioCommon/CubebUtils.h b/Source/Core/AudioCommon/CubebUtils.h deleted file mode 100644 index 1e49b0c8bb..0000000000 --- a/Source/Core/AudioCommon/CubebUtils.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2017 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include "Common/WorkQueueThread.h" -#endif - -struct cubeb; - -namespace CubebUtils -{ -std::shared_ptr GetContext(); -std::vector> ListInputDevices(); -const void* GetInputDeviceById(std::string_view id); -std::vector> ListOutputDevices(); -const void* GetOutputDeviceById(std::string_view id); - -// Helper used to handle Windows COM library for cubeb WASAPI backend -class CoInitSyncWorker -{ -public: - using FunctionType = std::function; - - CoInitSyncWorker(std::string worker_name); - ~CoInitSyncWorker(); - - bool Execute(FunctionType f); - -#ifdef _WIN32 -private: - Common::AsyncWorkThread m_work_queue; - bool m_coinit_success = false; - bool m_should_couninit = false; -#endif -}; -} // namespace CubebUtils diff --git a/Source/Core/AudioCommon/Mixer.h b/Source/Core/AudioCommon/Mixer.h index aca334bcf8..1118ae329b 100644 --- a/Source/Core/AudioCommon/Mixer.h +++ b/Source/Core/AudioCommon/Mixer.h @@ -38,7 +38,6 @@ public: u32 GetSampleRate() const { return m_output_sample_rate; } void SetSampleRate(u32 output_sample_rate) { m_output_sample_rate = output_sample_rate; } - // Note: NullSoundStream sets the sample rate to 0. bool IsOutputSampleRateValid() const { return m_output_sample_rate != 0; } void SetDMAInputSampleRateDivisor(u32 rate_divisor); diff --git a/Source/Core/AudioCommon/NullSoundStream.cpp b/Source/Core/AudioCommon/NullSoundStream.cpp deleted file mode 100644 index d731f16913..0000000000 --- a/Source/Core/AudioCommon/NullSoundStream.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "AudioCommon/NullSoundStream.h" - -bool NullSound::Init() -{ - // Make Mixer aware that audio output is disabled. - GetMixer()->SetSampleRate(0); - - return true; -} - -bool NullSound::SetRunning(bool running) -{ - return true; -} - -void NullSound::SetVolume(int volume) -{ -} diff --git a/Source/Core/AudioCommon/NullSoundStream.h b/Source/Core/AudioCommon/NullSoundStream.h deleted file mode 100644 index f186787900..0000000000 --- a/Source/Core/AudioCommon/NullSoundStream.h +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include "AudioCommon/SoundStream.h" - -class NullSound final : public SoundStream -{ -public: - bool Init() override; - bool SetRunning(bool running) override; - void SetVolume(int volume) override; - - static bool IsValid() { return true; } -}; diff --git a/Source/Core/AudioCommon/OpenALStream.cpp b/Source/Core/AudioCommon/OpenALStream.cpp deleted file mode 100644 index 763f6be271..0000000000 --- a/Source/Core/AudioCommon/OpenALStream.cpp +++ /dev/null @@ -1,380 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#ifdef _WIN32 - -#include "AudioCommon/OpenALStream.h" - -#include -#include -#include -#include - -#include "Common/Logging/Log.h" -#include "Common/MsgHandler.h" -#include "Common/Thread.h" -#include "Core/Config/MainSettings.h" - -static HMODULE s_openal_dll = nullptr; - -#define OPENAL_API_VISIT(X) \ - X(alBufferData) \ - X(alcCloseDevice) \ - X(alcCreateContext) \ - X(alcDestroyContext) \ - X(alcGetContextsDevice) \ - X(alcGetCurrentContext) \ - X(alcGetString) \ - X(alcIsExtensionPresent) \ - X(alcMakeContextCurrent) \ - X(alcOpenDevice) \ - X(alDeleteBuffers) \ - X(alDeleteSources) \ - X(alGenBuffers) \ - X(alGenSources) \ - X(alGetError) \ - X(alGetSourcei) \ - X(alGetString) \ - X(alIsExtensionPresent) \ - X(alSourcef) \ - X(alSourcei) \ - X(alSourcePlay) \ - X(alSourceQueueBuffers) \ - X(alSourceStop) \ - X(alSourceUnqueueBuffers) - -// Create func_t function pointer type and declare a nullptr-initialized static variable of that -// type named "pfunc". -#define DYN_FUNC_DECLARE(func) \ - typedef decltype(&func) func##_t; \ - static func##_t p##func = nullptr; - -// Attempt to load the function from the given module handle. -#define OPENAL_FUNC_LOAD(func) \ - p##func = (func##_t)::GetProcAddress(s_openal_dll, #func); \ - if (!p##func) \ - { \ - return false; \ - } - -OPENAL_API_VISIT(DYN_FUNC_DECLARE); - -static bool InitFunctions() -{ - OPENAL_API_VISIT(OPENAL_FUNC_LOAD); - return true; -} - -static bool InitLibrary() -{ - if (s_openal_dll) - return true; - - s_openal_dll = ::LoadLibrary(TEXT("openal32.dll")); - if (!s_openal_dll) - return false; - - if (!InitFunctions()) - { - FreeLibrary(s_openal_dll); - s_openal_dll = nullptr; - return false; - } - - return true; -} - -bool OpenALStream::IsValid() -{ - return InitLibrary(); -} - -// -// AyuanX: Spec says OpenAL1.1 is thread safe already -// -bool OpenALStream::Init() -{ - if (!palcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT")) - { - PanicAlertFmtT("OpenAL: can't find sound devices"); - return false; - } - - const char* default_device_dame = palcGetString(nullptr, ALC_DEFAULT_DEVICE_SPECIFIER); - INFO_LOG_FMT(AUDIO, "Found OpenAL device {}", default_device_dame); - - ALCdevice* device = palcOpenDevice(default_device_dame); - if (!device) - { - PanicAlertFmtT("OpenAL: can't open device {0}", default_device_dame); - return false; - } - - ALCcontext* context = palcCreateContext(device, nullptr); - if (!context) - { - palcCloseDevice(device); - PanicAlertFmtT("OpenAL: can't create context for device {0}", default_device_dame); - return false; - } - - palcMakeContextCurrent(context); - m_run_thread.Set(); - m_thread = std::thread(&OpenALStream::SoundLoop, this); - return true; -} - -OpenALStream::~OpenALStream() -{ - m_run_thread.Clear(); - m_thread.join(); - - palSourceStop(m_source); - palSourcei(m_source, AL_BUFFER, 0); - - // Clean up buffers and sources - palDeleteSources(1, &m_source); - m_source = 0; - palDeleteBuffers(OAL_BUFFERS, m_buffers.data()); - - ALCcontext* context = palcGetCurrentContext(); - ALCdevice* device = palcGetContextsDevice(context); - - palcMakeContextCurrent(nullptr); - palcDestroyContext(context); - palcCloseDevice(device); -} - -void OpenALStream::SetVolume(int volume) -{ - m_volume = (float)volume / 100.0f; - - if (m_source) - palSourcef(m_source, AL_GAIN, m_volume); -} - -bool OpenALStream::SetRunning(bool running) -{ - if (running) - { - palSourcePlay(m_source); - } - else - { - palSourceStop(m_source); - } - return true; -} - -static ALenum CheckALError(const char* desc) -{ - const ALenum err = palGetError(); - - if (err != AL_NO_ERROR) - { - std::string type; - - switch (err) - { - case AL_INVALID_NAME: - type = "AL_INVALID_NAME"; - break; - case AL_INVALID_ENUM: - type = "AL_INVALID_ENUM"; - break; - case AL_INVALID_VALUE: - type = "AL_INVALID_VALUE"; - break; - case AL_INVALID_OPERATION: - type = "AL_INVALID_OPERATION"; - break; - case AL_OUT_OF_MEMORY: - type = "AL_OUT_OF_MEMORY"; - break; - default: - type = "UNKNOWN_ERROR"; - break; - } - - ERROR_LOG_FMT(AUDIO, "Error {}: {:08x} {}", desc, err, type); - } - - return err; -} - -static bool IsCreativeXFi() -{ - return strstr(palGetString(AL_RENDERER), "X-Fi") != nullptr; -} - -void OpenALStream::SoundLoop() -{ - Common::SetCurrentThreadName("Audio thread - openal"); - - const bool float32_capable = palIsExtensionPresent("AL_EXT_float32") != 0; - const bool surround_capable = palIsExtensionPresent("AL_EXT_MCFORMATS") || IsCreativeXFi(); - bool use_surround = Config::ShouldUseDPL2Decoder() && surround_capable; - - // As there is no extension to check for 32-bit fixed point support - // and we know that only a X-Fi with hardware OpenAL supports it, - // we just check if one is being used. - const bool fixed32_capable = IsCreativeXFi(); - - const u32 frequency = m_mixer->GetSampleRate(); - - u32 frames_per_buffer; - // Can't have zero samples per buffer - if (Config::Get(Config::MAIN_AUDIO_LATENCY) > 0) - { - frames_per_buffer = frequency / 1000 * Config::Get(Config::MAIN_AUDIO_LATENCY) / OAL_BUFFERS; - } - else - { - frames_per_buffer = frequency / 1000 * 1 / OAL_BUFFERS; - } - - if (frames_per_buffer > OAL_MAX_FRAMES) - { - frames_per_buffer = OAL_MAX_FRAMES; - } - - INFO_LOG_FMT(AUDIO, "Using {} buffers, each with {} audio frames for a total of {}.", OAL_BUFFERS, - frames_per_buffer, frames_per_buffer * OAL_BUFFERS); - - // Should we make these larger just in case the mixer ever sends more samples - // than what we request? - m_realtime_buffer.resize(frames_per_buffer * STEREO_CHANNELS); - m_source = 0; - - // Clear error state before querying or else we get false positives. - ALenum err = palGetError(); - - // Generate some AL Buffers for streaming - palGenBuffers(OAL_BUFFERS, (ALuint*)m_buffers.data()); - err = CheckALError("generating buffers"); - - // Generate a Source to playback the Buffers - palGenSources(1, &m_source); - err = CheckALError("generating sources"); - - // Set the default sound volume as saved in the config file. - palSourcef(m_source, AL_GAIN, m_volume); - - // TODO: Error handling - // ALenum err = alGetError(); - - unsigned int next_buffer = 0; - unsigned int num_buffers_queued = 0; - ALint state = 0; - - while (m_run_thread.IsSet()) - { - // Block until we have a free buffer - int num_buffers_processed; - palGetSourcei(m_source, AL_BUFFERS_PROCESSED, &num_buffers_processed); - if (num_buffers_queued == OAL_BUFFERS && !num_buffers_processed) - { - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - continue; - } - - // Remove the Buffer from the Queue. - if (num_buffers_processed) - { - std::array unqueued_buffer_ids; - palSourceUnqueueBuffers(m_source, num_buffers_processed, unqueued_buffer_ids.data()); - err = CheckALError("unqueuing buffers"); - - num_buffers_queued -= num_buffers_processed; - } - - const unsigned int min_frames = frames_per_buffer; - - if (use_surround) - { - std::array dpl2; - const u32 rendered_frames = static_cast(m_mixer->MixSurround(dpl2.data(), min_frames)); - - if (rendered_frames < min_frames) - continue; - - if (float32_capable) - { - palBufferData(m_buffers[next_buffer], AL_FORMAT_51CHN32, dpl2.data(), - rendered_frames * FRAME_SURROUND_FLOAT, frequency); - } - else if (fixed32_capable) - { - std::array surround_int32; - - for (u32 i = 0; i < rendered_frames * SURROUND_CHANNELS; ++i) - { - dpl2[i] = dpl2[i] * std::numeric_limits::max(); - if (dpl2[i] > std::numeric_limits::max()) - surround_int32[i] = std::numeric_limits::max(); - else if (dpl2[i] < std::numeric_limits::min()) - surround_int32[i] = std::numeric_limits::min(); - else - surround_int32[i] = static_cast(dpl2[i]); - } - - palBufferData(m_buffers[next_buffer], AL_FORMAT_51CHN32, surround_int32.data(), - rendered_frames * FRAME_SURROUND_INT32, frequency); - } - else - { - std::array surround_short; - - for (u32 i = 0; i < rendered_frames * SURROUND_CHANNELS; ++i) - { - dpl2[i] = dpl2[i] * std::numeric_limits::max(); - if (dpl2[i] > std::numeric_limits::max()) - surround_short[i] = std::numeric_limits::max(); - else if (dpl2[i] < std::numeric_limits::min()) - surround_short[i] = std::numeric_limits::min(); - else - surround_short[i] = static_cast(dpl2[i]); - } - - palBufferData(m_buffers[next_buffer], AL_FORMAT_51CHN16, surround_short.data(), - rendered_frames * FRAME_SURROUND_SHORT, frequency); - } - - err = CheckALError("buffering data"); - if (err == AL_INVALID_ENUM) - { - // 5.1 is not supported by the host, fallback to stereo - WARN_LOG_FMT( - AUDIO, "Unable to set 5.1 surround mode. Updating OpenAL Soft might fix this issue."); - use_surround = false; - } - } - else - { - const u32 rendered_frames = - static_cast(m_mixer->Mix(m_realtime_buffer.data(), min_frames)); - - if (!rendered_frames) - continue; - - palBufferData(m_buffers[next_buffer], AL_FORMAT_STEREO16, m_realtime_buffer.data(), - rendered_frames * FRAME_STEREO_SHORT, frequency); - } - - palSourceQueueBuffers(m_source, 1, &m_buffers[next_buffer]); - err = CheckALError("queuing buffers"); - - num_buffers_queued++; - next_buffer = (next_buffer + 1) % OAL_BUFFERS; - - palGetSourcei(m_source, AL_SOURCE_STATE, &state); - if (state != AL_PLAYING) - { - // Buffer underrun occurred, resume playback - palSourcePlay(m_source); - err = CheckALError("occurred resuming playback"); - } - } -} - -#endif // _WIN32 diff --git a/Source/Core/AudioCommon/OpenALStream.h b/Source/Core/AudioCommon/OpenALStream.h deleted file mode 100644 index 1630c03960..0000000000 --- a/Source/Core/AudioCommon/OpenALStream.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include "AudioCommon/SoundStream.h" - -#ifdef _WIN32 -#include -#include -#include -#include - -#include "Common/Event.h" - -// OpenAL requires a minimum of two buffers, three or more recommended -#define OAL_BUFFERS 3 -#define OAL_MAX_FRAMES 4096 -#define STEREO_CHANNELS 2 -#define SURROUND_CHANNELS 6 // number of channels in surround mode -#define SIZE_SHORT 2 -#define SIZE_INT32 4 -#define SIZE_FLOAT 4 // size of a float in bytes -#define FRAME_STEREO_SHORT STEREO_CHANNELS* SIZE_SHORT -#define FRAME_SURROUND_FLOAT SURROUND_CHANNELS* SIZE_FLOAT -#define FRAME_SURROUND_SHORT SURROUND_CHANNELS* SIZE_SHORT -#define FRAME_SURROUND_INT32 SURROUND_CHANNELS* SIZE_INT32 -#endif // _WIN32 - -// From AL_EXT_float32 -#ifndef AL_FORMAT_STEREO_FLOAT32 -#define AL_FORMAT_STEREO_FLOAT32 0x10011 -#endif - -// From AL_EXT_MCFORMATS -#ifndef AL_FORMAT_51CHN16 -#define AL_FORMAT_51CHN16 0x120B -#endif -#ifndef AL_FORMAT_51CHN32 -#define AL_FORMAT_51CHN32 0x120C -#endif - -// Only X-Fi on Windows supports the alext AL_FORMAT_STEREO32 alext for now, -// but it is not documented or in "OpenAL/include/al.h". -#ifndef AL_FORMAT_STEREO32 -#define AL_FORMAT_STEREO32 0x1203 -#endif - -class OpenALStream final : public SoundStream -{ -#ifdef _WIN32 -public: - OpenALStream() = default; - ~OpenALStream() override; - bool Init() override; - void SetVolume(int volume) override; - bool SetRunning(bool running) override; - - static bool IsValid(); - -private: - void SoundLoop(); - - std::thread m_thread; - Common::Flag m_run_thread; - - std::vector m_realtime_buffer; - std::array m_buffers{}; - ALuint m_source = 0; - ALfloat m_volume = 1; - -#endif // _WIN32 -}; diff --git a/Source/Core/AudioCommon/OpenSLESStream.cpp b/Source/Core/AudioCommon/OpenSLESStream.cpp deleted file mode 100644 index 3fc71e75df..0000000000 --- a/Source/Core/AudioCommon/OpenSLESStream.cpp +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright 2013 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#ifdef HAVE_OPENSL_ES -#include "AudioCommon/OpenSLESStream.h" - -#include - -#include -#include -#include - -#include "Common/Assert.h" -#include "Common/CommonTypes.h" -#include "Common/Logging/Log.h" -#include "Core/ConfigManager.h" -#include "jni/AndroidCommon/IDCache.h" - -void OpenSLESStream::BQPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void* context) -{ - reinterpret_cast(context)->PushSamples(bq); -} - -void OpenSLESStream::PushSamples(SLAndroidSimpleBufferQueueItf bq) -{ - ASSERT(bq == m_bq_player_buffer_queue); - - // Render to the fresh buffer - m_mixer->Mix(m_buffer[m_current_buffer].data(), m_frames_per_buffer); - SLresult result = (*bq)->Enqueue(bq, m_buffer[m_current_buffer].data(), m_bytes_per_buffer); - m_current_buffer ^= 1; // Switch buffer - - // Comment from sample code: - // the most likely other result is SL_RESULT_BUFFER_INSUFFICIENT, - // which for this code example would indicate a programming error - ASSERT_MSG(AUDIO, SL_RESULT_SUCCESS == result, "Couldn't enqueue audio stream."); -} - -bool OpenSLESStream::Init() -{ - JNIEnv* env = IDCache::GetEnvForThread(); - jclass audio_utils = IDCache::GetAudioUtilsClass(); - const SLuint32 sample_rate = - env->CallStaticIntMethod(audio_utils, IDCache::GetAudioUtilsGetSampleRate()); - m_frames_per_buffer = - env->CallStaticIntMethod(audio_utils, IDCache::GetAudioUtilsGetFramesPerBuffer()); - - INFO_LOG_FMT(AUDIO, "OpenSLES configuration: {} Hz, {} frames per buffer", sample_rate, - m_frames_per_buffer); - - constexpr SLuint32 channels = 2; - const SLuint32 samples_per_buffer = m_frames_per_buffer * channels; - m_bytes_per_buffer = m_frames_per_buffer * channels * sizeof(m_buffer[0][0]); - - for (std::vector& buffer : m_buffer) - buffer.resize(samples_per_buffer); - - SLresult result; - // create engine - result = slCreateEngine(&m_engine_object, 0, nullptr, 0, nullptr, nullptr); - ASSERT(SL_RESULT_SUCCESS == result); - result = (*m_engine_object)->Realize(m_engine_object, SL_BOOLEAN_FALSE); - ASSERT(SL_RESULT_SUCCESS == result); - result = (*m_engine_object)->GetInterface(m_engine_object, SL_IID_ENGINE, &m_engine_engine); - ASSERT(SL_RESULT_SUCCESS == result); - result = (*m_engine_engine)->CreateOutputMix(m_engine_engine, &m_output_mix_object, 0, 0, 0); - ASSERT(SL_RESULT_SUCCESS == result); - result = (*m_output_mix_object)->Realize(m_output_mix_object, SL_BOOLEAN_FALSE); - ASSERT(SL_RESULT_SUCCESS == result); - - SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2}; - SLDataFormat_PCM format_pcm = { - SL_DATAFORMAT_PCM, channels, - sample_rate * 1000, SL_PCMSAMPLEFORMAT_FIXED_16, - SL_PCMSAMPLEFORMAT_FIXED_16, SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT, - SL_BYTEORDER_LITTLEENDIAN}; - - SLDataSource audioSrc = {&loc_bufq, &format_pcm}; - - // configure audio sink - SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, m_output_mix_object}; - SLDataSink audioSnk = {&loc_outmix, nullptr}; - - // create audio player - const SLInterfaceID ids[2] = {SL_IID_BUFFERQUEUE, SL_IID_VOLUME}; - const SLboolean req[2] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE}; - result = (*m_engine_engine) - ->CreateAudioPlayer(m_engine_engine, &m_bq_player_object, &audioSrc, &audioSnk, 2, - ids, req); - ASSERT(SL_RESULT_SUCCESS == result); - - result = (*m_bq_player_object)->Realize(m_bq_player_object, SL_BOOLEAN_FALSE); - ASSERT(SL_RESULT_SUCCESS == result); - result = (*m_bq_player_object)->GetInterface(m_bq_player_object, SL_IID_PLAY, &m_bq_player_play); - ASSERT(SL_RESULT_SUCCESS == result); - result = (*m_bq_player_object) - ->GetInterface(m_bq_player_object, SL_IID_BUFFERQUEUE, &m_bq_player_buffer_queue); - ASSERT(SL_RESULT_SUCCESS == result); - result = - (*m_bq_player_object)->GetInterface(m_bq_player_object, SL_IID_VOLUME, &m_bq_player_volume); - ASSERT(SL_RESULT_SUCCESS == result); - result = (*m_bq_player_buffer_queue) - ->RegisterCallback(m_bq_player_buffer_queue, BQPlayerCallback, this); - ASSERT(SL_RESULT_SUCCESS == result); - result = (*m_bq_player_play)->SetPlayState(m_bq_player_play, SL_PLAYSTATE_PLAYING); - ASSERT(SL_RESULT_SUCCESS == result); - - // Render and enqueue a first buffer. - m_current_buffer ^= 1; - - result = (*m_bq_player_buffer_queue) - ->Enqueue(m_bq_player_buffer_queue, m_buffer[0].data(), m_bytes_per_buffer); - if (SL_RESULT_SUCCESS != result) - return false; - - return true; -} - -OpenSLESStream::~OpenSLESStream() -{ - if (m_bq_player_object != nullptr) - { - (*m_bq_player_object)->Destroy(m_bq_player_object); - m_bq_player_object = nullptr; - m_bq_player_play = nullptr; - m_bq_player_buffer_queue = nullptr; - m_bq_player_volume = nullptr; - } - - if (m_output_mix_object != nullptr) - { - (*m_output_mix_object)->Destroy(m_output_mix_object); - m_output_mix_object = nullptr; - } - - if (m_engine_object != nullptr) - { - (*m_engine_object)->Destroy(m_engine_object); - m_engine_object = nullptr; - m_engine_engine = nullptr; - } -} - -bool OpenSLESStream::SetRunning(bool running) -{ - SLuint32 new_state = running ? SL_PLAYSTATE_PLAYING : SL_PLAYSTATE_PAUSED; - return (*m_bq_player_play)->SetPlayState(m_bq_player_play, new_state) == SL_RESULT_SUCCESS; -} - -void OpenSLESStream::SetVolume(int volume) -{ - const SLmillibel attenuation = - volume <= 0 ? SL_MILLIBEL_MIN : static_cast(2000 * std::log10(volume / 100.0f)); - (*m_bq_player_volume)->SetVolumeLevel(m_bq_player_volume, attenuation); -} -#endif // HAVE_OPENSL_ES diff --git a/Source/Core/AudioCommon/OpenSLESStream.h b/Source/Core/AudioCommon/OpenSLESStream.h deleted file mode 100644 index 9772f0b9c7..0000000000 --- a/Source/Core/AudioCommon/OpenSLESStream.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#ifdef HAVE_OPENSL_ES -#include -#include - -#include -#include -#endif // HAVE_OPENSL_ES - -#include "AudioCommon/SoundStream.h" - -class OpenSLESStream final : public SoundStream -{ -#ifdef HAVE_OPENSL_ES -public: - ~OpenSLESStream() override; - bool Init() override; - bool SetRunning(bool running) override; - void SetVolume(int volume) override; - static bool IsValid() { return true; } - -private: - static void BQPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void* context); - void PushSamples(SLAndroidSimpleBufferQueueItf bq); - - // engine interfaces - SLObjectItf m_engine_object; - SLEngineItf m_engine_engine; - SLObjectItf m_output_mix_object; - - // buffer queue player interfaces - SLObjectItf m_bq_player_object = nullptr; - SLPlayItf m_bq_player_play; - SLAndroidSimpleBufferQueueItf m_bq_player_buffer_queue; - SLVolumeItf m_bq_player_volume; - - SLuint32 m_frames_per_buffer; - SLuint32 m_bytes_per_buffer; - - // Double buffering. - std::array, 2> m_buffer; - int m_current_buffer = 0; -#endif // HAVE_OPENSL_ES -}; diff --git a/Source/Core/AudioCommon/PulseAudioStream.cpp b/Source/Core/AudioCommon/PulseAudioStream.cpp deleted file mode 100644 index 5b0662972d..0000000000 --- a/Source/Core/AudioCommon/PulseAudioStream.cpp +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright 2009 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include - -#include "AudioCommon/PulseAudioStream.h" - -#include "Common/Assert.h" -#include "Common/CommonTypes.h" -#include "Common/Logging/Log.h" -#include "Common/Thread.h" -#include "Core/Config/MainSettings.h" - -namespace -{ -const size_t BUFFER_SAMPLES = 512; // ~10 ms - needs to be at least 240 for surround -} - -PulseAudio::PulseAudio() = default; - -bool PulseAudio::Init() -{ - m_stereo = !Config::ShouldUseDPL2Decoder(); - m_channels = m_stereo ? 2 : 6; // will tell PA we use a Stereo or 5.0 channel setup - - NOTICE_LOG_FMT(AUDIO, "PulseAudio backend using {} channels", m_channels); - - m_run_thread.Set(); - m_thread = std::thread(&PulseAudio::SoundLoop, this); - - return true; -} - -PulseAudio::~PulseAudio() -{ - m_run_thread.Clear(); - m_thread.join(); -} - -// Called on audio thread. -void PulseAudio::SoundLoop() -{ - Common::SetCurrentThreadName("Audio thread - pulse"); - - if (PulseInit()) - { - while (m_run_thread.IsSet() && m_pa_connected == 1 && m_pa_error >= 0) - m_pa_error = pa_mainloop_iterate(m_pa_ml, 1, nullptr); - - if (m_pa_error < 0) - ERROR_LOG_FMT(AUDIO, "PulseAudio error: {}", pa_strerror(m_pa_error)); - - PulseShutdown(); - } -} - -bool PulseAudio::PulseInit() -{ - m_pa_error = 0; - m_pa_connected = 0; - - // create pulseaudio main loop and context - // also register the async state callback which is called when the connection to the pa server has - // changed - m_pa_ml = pa_mainloop_new(); - m_pa_mlapi = pa_mainloop_get_api(m_pa_ml); - m_pa_ctx = pa_context_new(m_pa_mlapi, "dolphin-emu"); - m_pa_error = pa_context_connect(m_pa_ctx, nullptr, PA_CONTEXT_NOFLAGS, nullptr); - pa_context_set_state_callback(m_pa_ctx, StateCallback, this); - - // wait until we're connected to the pulseaudio server - while (m_pa_connected == 0 && m_pa_error >= 0) - m_pa_error = pa_mainloop_iterate(m_pa_ml, 1, nullptr); - - if (m_pa_connected == 2 || m_pa_error < 0) - { - ERROR_LOG_FMT(AUDIO, "PulseAudio failed to initialize: {}", pa_strerror(m_pa_error)); - return false; - } - - // create a new audio stream with our sample format - // also connect the callbacks for this stream - pa_sample_spec ss; - pa_channel_map channel_map; - pa_channel_map* channel_map_p = nullptr; // auto channel map - if (m_stereo) - { - ss.format = PA_SAMPLE_S16LE; - m_bytespersample = sizeof(s16); - } - else - { - // surround is remixed in floats, use a float PA buffer to save another conversion - ss.format = PA_SAMPLE_FLOAT32NE; - m_bytespersample = sizeof(float); - - channel_map_p = &channel_map; // explicit channel map: - channel_map.channels = 6; - channel_map.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT; - channel_map.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT; - channel_map.map[2] = PA_CHANNEL_POSITION_FRONT_CENTER; - channel_map.map[3] = PA_CHANNEL_POSITION_LFE; - channel_map.map[4] = PA_CHANNEL_POSITION_REAR_LEFT; - channel_map.map[5] = PA_CHANNEL_POSITION_REAR_RIGHT; - } - ss.channels = m_channels; - ss.rate = m_mixer->GetSampleRate(); - ASSERT(pa_sample_spec_valid(&ss)); - m_pa_s = pa_stream_new(m_pa_ctx, "Playback", &ss, channel_map_p); - pa_stream_set_write_callback(m_pa_s, WriteCallback, this); - pa_stream_set_underflow_callback(m_pa_s, UnderflowCallback, this); - - // connect this audio stream to the default audio playback - // limit buffersize to reduce latency - m_pa_ba.fragsize = -1; - m_pa_ba.maxlength = -1; // max buffer, so also max latency - m_pa_ba.minreq = -1; // don't read every byte, try to group them _a bit_ - m_pa_ba.prebuf = -1; // start as early as possible - m_pa_ba.tlength = - BUFFER_SAMPLES * m_channels * - m_bytespersample; // designed latency, only change this flag for low latency output - pa_stream_flags flags = pa_stream_flags(PA_STREAM_INTERPOLATE_TIMING | PA_STREAM_ADJUST_LATENCY | - PA_STREAM_AUTO_TIMING_UPDATE); - m_pa_error = pa_stream_connect_playback(m_pa_s, nullptr, &m_pa_ba, flags, nullptr, nullptr); - if (m_pa_error < 0) - { - ERROR_LOG_FMT(AUDIO, "PulseAudio failed to initialize: {}", pa_strerror(m_pa_error)); - return false; - } - - INFO_LOG_FMT(AUDIO, "Pulse successfully initialized"); - return true; -} - -void PulseAudio::PulseShutdown() -{ - pa_context_disconnect(m_pa_ctx); - pa_context_unref(m_pa_ctx); - pa_mainloop_free(m_pa_ml); -} - -void PulseAudio::StateCallback(pa_context* c) -{ - pa_context_state_t state = pa_context_get_state(c); - switch (state) - { - case PA_CONTEXT_FAILED: - case PA_CONTEXT_TERMINATED: - m_pa_connected = 2; - break; - case PA_CONTEXT_READY: - m_pa_connected = 1; - break; - default: - break; - } -} -// on underflow, increase pulseaudio latency in ~10ms steps -void PulseAudio::UnderflowCallback(pa_stream* s) -{ - m_pa_ba.tlength += BUFFER_SAMPLES * m_channels * m_bytespersample; - pa_operation* op = pa_stream_set_buffer_attr(s, &m_pa_ba, nullptr, nullptr); - pa_operation_unref(op); - - WARN_LOG_FMT(AUDIO, "pulseaudio underflow, new latency: {} bytes", m_pa_ba.tlength); -} - -void PulseAudio::WriteCallback(pa_stream* s, size_t length) -{ - int bytes_per_frame = m_channels * m_bytespersample; - int frames = (length / bytes_per_frame); - size_t trunc_length = frames * bytes_per_frame; - - // fetch dst buffer directly from pulseaudio, so no memcpy is needed - void* buffer; - m_pa_error = pa_stream_begin_write(s, &buffer, &trunc_length); - - if (!buffer || m_pa_error < 0) - return; // error will be printed from main loop - - if (m_stereo) - { - // use the raw s16 stereo mix - m_mixer->Mix((s16*)buffer, frames); - } - else - { - if (m_channels == 6) // Extract dpl2/5.1 Surround - { - m_mixer->MixSurround((float*)buffer, frames); - } - else - { - ERROR_LOG_FMT(AUDIO, "Unsupported number of PA channels requested: {}", m_channels); - return; - } - } - - m_pa_error = pa_stream_write(s, buffer, trunc_length, nullptr, 0, PA_SEEK_RELATIVE); -} - -// Callbacks that forward to internal methods (required because PulseAudio is a C API). - -void PulseAudio::StateCallback(pa_context* c, void* userdata) -{ - PulseAudio* p = (PulseAudio*)userdata; - p->StateCallback(c); -} - -void PulseAudio::UnderflowCallback(pa_stream* s, void* userdata) -{ - PulseAudio* p = (PulseAudio*)userdata; - p->UnderflowCallback(s); -} - -void PulseAudio::WriteCallback(pa_stream* s, size_t length, void* userdata) -{ - PulseAudio* p = (PulseAudio*)userdata; - p->WriteCallback(s, length); -} diff --git a/Source/Core/AudioCommon/PulseAudioStream.h b/Source/Core/AudioCommon/PulseAudioStream.h deleted file mode 100644 index 2bb0dda048..0000000000 --- a/Source/Core/AudioCommon/PulseAudioStream.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#if defined(HAVE_PULSEAUDIO) && HAVE_PULSEAUDIO -#include -#endif - -#include "AudioCommon/SoundStream.h" -#include "Common/Flag.h" -#include "Common/Thread.h" - -class PulseAudio final : public SoundStream -{ -#if defined(HAVE_PULSEAUDIO) && HAVE_PULSEAUDIO -public: - PulseAudio(); - ~PulseAudio() override; - - bool Init() override; - bool SetRunning(bool running) override { return true; } - static bool IsValid() { return true; } - void StateCallback(pa_context* c); - void WriteCallback(pa_stream* s, size_t length); - void UnderflowCallback(pa_stream* s); - -private: - void SoundLoop(); - - bool PulseInit(); - void PulseShutdown(); - - // wrapper callback functions, last parameter _must_ be PulseAudio* - static void StateCallback(pa_context* c, void* userdata); - static void WriteCallback(pa_stream* s, size_t length, void* userdata); - static void UnderflowCallback(pa_stream* s, void* userdata); - - std::thread m_thread; - Common::Flag m_run_thread; - - bool m_stereo; // stereo, else surround - int m_bytespersample; - int m_channels; - - int m_pa_error; - int m_pa_connected; - pa_mainloop* m_pa_ml; - pa_mainloop_api* m_pa_mlapi; - pa_context* m_pa_ctx; - pa_stream* m_pa_s; - pa_buffer_attr m_pa_ba; -#endif -}; diff --git a/Source/Core/AudioCommon/SoundStream.h b/Source/Core/AudioCommon/SoundStream.h index afc12f4b77..0bc897a275 100644 --- a/Source/Core/AudioCommon/SoundStream.h +++ b/Source/Core/AudioCommon/SoundStream.h @@ -8,24 +8,31 @@ #include "AudioCommon/Mixer.h" #include "Common/CommonTypes.h" -class SoundStream +// The libretro audio output: owns the mixer and hands its output to the frontend. +// Implemented in DolphinLibretro/Audio.cpp. +class SoundStream final { -protected: - std::unique_ptr m_mixer; - public: - SoundStream(unsigned int backendSampleRate = 48000) : m_mixer(new Mixer(backendSampleRate)) {} - virtual ~SoundStream() {} - static bool IsValid() { return false; } + static constexpr unsigned int MIN_SAMPLES = 96; + static constexpr unsigned int MAX_SAMPLES = 1024; + + SoundStream(); + Mixer* GetMixer() const { return m_mixer.get(); } - virtual bool Init() { return false; } - virtual void SetVolume(int) {} - // Returns true if successful. - virtual bool SetRunning(bool running) { return false; } -#ifdef __LIBRETRO__ - virtual void Update(unsigned int num_samples) {} - virtual void ProcessCallBack() {} + + void Init(); + // After the DSP has pushed num_samples into the mixer + void Update(unsigned int num_samples); + // From the frontend's audio callback + void ProcessCallBack(); // On the CPU thread at each emulated field boundary - virtual void NewField() {} -#endif + void NewField(); + +private: + void PushAudioForFrame(); + void MixAndPush(unsigned int num_samples); + + std::unique_ptr m_mixer; + s16 m_buffer[MAX_SAMPLES * 2]; + unsigned int m_sample_rate; }; diff --git a/Source/Core/AudioCommon/WASAPIStream.cpp b/Source/Core/AudioCommon/WASAPIStream.cpp deleted file mode 100644 index 13fbe9abdc..0000000000 --- a/Source/Core/AudioCommon/WASAPIStream.cpp +++ /dev/null @@ -1,366 +0,0 @@ -// Copyright 2018 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "AudioCommon/WASAPIStream.h" - -#ifdef _WIN32 - -// clang-format off -#include -#include -#include -#include -#ifdef __MINGW32__ -#include "Common/WILShim.h" -#endif -#include -// clang-format on - -#include - -#include - -#include "Common/Assert.h" -#include "Common/HRWrap.h" -#include "Common/Logging/Log.h" -#include "Common/StringUtil.h" -#include "Common/Thread.h" -#include "Core/Config/MainSettings.h" -#include "VideoCommon/OnScreenDisplay.h" - -using Microsoft::WRL::ComPtr; - -WASAPIStream::WASAPIStream() -{ - if (SUCCEEDED(CoInitializeEx(nullptr, COINIT_MULTITHREADED))) - m_coinitialize.activate(); - - m_format.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE; - m_format.Format.nChannels = 2; - m_format.Format.nSamplesPerSec = GetMixer()->GetSampleRate(); - m_format.Format.nAvgBytesPerSec = m_format.Format.nSamplesPerSec * 4; - m_format.Format.nBlockAlign = 4; - m_format.Format.wBitsPerSample = 16; - m_format.Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX); - m_format.Samples.wValidBitsPerSample = m_format.Format.wBitsPerSample; - m_format.dwChannelMask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT; - m_format.SubFormat = KSDATAFORMAT_SUBTYPE_PCM; -} - -WASAPIStream::~WASAPIStream() -{ - m_running.store(false, std::memory_order_relaxed); - if (m_thread.joinable()) - m_thread.join(); -} - -bool WASAPIStream::IsValid() -{ - return true; -} - -static bool HandleWinAPI(std::string_view message, HRESULT result) -{ - if (FAILED(result)) - { - std::string error; - - switch (result) - { - case AUDCLNT_E_DEVICE_IN_USE: - error = "Audio endpoint already in use!"; - break; - default: - error = Common::GetHResultMessage(result); - break; - } - - ERROR_LOG_FMT(AUDIO, "WASAPI: {}: {} ({:08x})", message, error, result); - } - - return SUCCEEDED(result); -} - -static void ForEachNamedDevice(const std::function, std::string)>& callback) -{ - HRESULT result = CoInitializeEx(nullptr, COINIT_MULTITHREADED); - // RPC_E_CHANGED_MODE means that thread has COM already initialized with a different threading - // model. We don't necessarily need multithreaded model here, so don't treat this as an error - if (result != RPC_E_CHANGED_MODE && !HandleWinAPI("Failed to call CoInitialize", result)) - return; - - wil::unique_couninitialize_call cleanup; - if (FAILED(result)) - cleanup.release(); // CoUninitialize must be matched with each successful CoInitialize call, so - // don't call it if initialize fails - - ComPtr enumerator; - - result = CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_INPROC_SERVER, - IID_PPV_ARGS(&enumerator)); - - if (!HandleWinAPI("Failed to create MMDeviceEnumerator", result)) - return; - - ComPtr devices; - result = enumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &devices); - - if (!HandleWinAPI("Failed to get available devices", result)) - return; - - UINT count; - devices->GetCount(&count); - - for (u32 i = 0; i < count; i++) - { - ComPtr device; - devices->Item(i, &device); - if (!HandleWinAPI(fmt::format("Failed to get device {}", i), result)) - continue; - - ComPtr device_properties; - - result = device->OpenPropertyStore(STGM_READ, &device_properties); - - if (!HandleWinAPI("Failed to initialize IPropertyStore", result)) - continue; - - wil::unique_prop_variant device_name; - device_properties->GetValue(PKEY_Device_FriendlyName, device_name.addressof()); - - if (!callback(std::move(device), TStrToUTF8(device_name.pwszVal))) - break; - } -} - -std::vector WASAPIStream::GetAvailableDevices() -{ - std::vector device_names; - - ForEachNamedDevice([&device_names](ComPtr, std::string n) { - device_names.push_back(std::move(n)); - return true; - }); - - return device_names; -} - -ComPtr WASAPIStream::GetDeviceByName(std::string_view name) -{ - ComPtr device; - - ForEachNamedDevice([&device, &name](ComPtr d, std::string n) { - if (n == name) - { - device = std::move(d); - return false; - } - return true; - }); - - return device; -} - -bool WASAPIStream::Init() -{ - ASSERT(m_enumerator == nullptr); - const HRESULT result = CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, - CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_enumerator)); - - if (!HandleWinAPI("Failed to create MMDeviceEnumerator", result)) - return false; - - return true; -} - -bool WASAPIStream::SetRunning(bool running) -{ - if (running) - { - ComPtr device; - - HRESULT result; - - if (Config::IsDefaultValue(Config::MAIN_WASAPI_DEVICE)) - { - result = m_enumerator->GetDefaultAudioEndpoint(eRender, eConsole, &device); - } - else - { - result = S_OK; - device = GetDeviceByName(Config::Get(Config::MAIN_WASAPI_DEVICE)); - - if (!device) - { - ERROR_LOG_FMT(AUDIO, "Can't find device '{}', falling back to default", - Config::Get(Config::MAIN_WASAPI_DEVICE)); - result = m_enumerator->GetDefaultAudioEndpoint(eRender, eConsole, &device); - } - } - - if (!HandleWinAPI("Failed to obtain default endpoint", result)) - return false; - - // Show a friendly name in the log - ComPtr device_properties; - - result = device->OpenPropertyStore(STGM_READ, &device_properties); - - if (!HandleWinAPI("Failed to initialize IPropertyStore", result)) - return false; - - wil::unique_prop_variant device_name; - device_properties->GetValue(PKEY_Device_FriendlyName, device_name.addressof()); - - INFO_LOG_FMT(AUDIO, "Using audio endpoint '{}'", TStrToUTF8(device_name.pwszVal)); - - ComPtr audio_client; - - // Get IAudioDevice - result = device->Activate(__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, nullptr, &audio_client); - - if (!HandleWinAPI("Failed to activate IAudioClient", result)) - return false; - - REFERENCE_TIME device_period = 0; - - result = audio_client->GetDevicePeriod(nullptr, &device_period); - - device_period += Config::Get(Config::MAIN_AUDIO_LATENCY) * (10000 / m_format.Format.nChannels); - INFO_LOG_FMT(AUDIO, "Audio period set to {}", device_period); - - if (!HandleWinAPI("Failed to obtain device period", result)) - return false; - - result = audio_client->Initialize( - AUDCLNT_SHAREMODE_EXCLUSIVE, - AUDCLNT_STREAMFLAGS_EVENTCALLBACK | AUDCLNT_STREAMFLAGS_NOPERSIST, device_period, - device_period, reinterpret_cast(&m_format), nullptr); - - if (result == AUDCLNT_E_UNSUPPORTED_FORMAT) - { - OSD::AddMessage("Your current audio device doesn't support 16-bit 48000 hz PCM audio. WASAPI " - "exclusive mode won't work.", - 6000U); - return false; - } - - if (result == AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED) - { - result = audio_client->GetBufferSize(&m_frames_in_buffer); - - if (!HandleWinAPI("Failed to get aligned buffer size", result)) - return false; - - // Get IAudioDevice - result = - device->Activate(__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, nullptr, &audio_client); - - if (!HandleWinAPI("Failed to reactivate IAudioClient", result)) - return false; - - device_period = - static_cast( - 10000.0 * 1000 * m_frames_in_buffer / m_format.Format.nSamplesPerSec + 0.5) + - Config::Get(Config::MAIN_AUDIO_LATENCY) * 10000; - - result = audio_client->Initialize( - AUDCLNT_SHAREMODE_EXCLUSIVE, - AUDCLNT_STREAMFLAGS_EVENTCALLBACK | AUDCLNT_STREAMFLAGS_NOPERSIST, device_period, - device_period, reinterpret_cast(&m_format), nullptr); - } - - if (!HandleWinAPI("Failed to initialize IAudioClient", result)) - return false; - - result = audio_client->GetBufferSize(&m_frames_in_buffer); - - if (!HandleWinAPI("Failed to get buffer size from IAudioClient", result)) - return false; - - ComPtr audio_renderer; - - result = audio_client->GetService(IID_PPV_ARGS(&audio_renderer)); - - if (!HandleWinAPI("Failed to get IAudioRenderClient from IAudioClient", result)) - return false; - - wil::unique_event_nothrow need_data_event; - need_data_event.create(); - - audio_client->SetEventHandle(need_data_event.get()); - - result = audio_client->Start(); - - if (!HandleWinAPI("Failed to get IAudioRenderClient from IAudioClient", result)) - return false; - - INFO_LOG_FMT(AUDIO, "WASAPI: Successfully initialized!"); - - // "Commit" audio client and audio renderer now - m_audio_client = std::move(audio_client); - m_audio_renderer = std::move(audio_renderer); - m_need_data_event = std::move(need_data_event); - - m_running.store(true, std::memory_order_relaxed); - m_thread = std::thread(&WASAPIStream::SoundLoop, this); - } - else - { - m_running.store(false, std::memory_order_relaxed); - - if (m_thread.joinable()) - m_thread.join(); - - m_need_data_event.reset(); - m_audio_renderer.Reset(); - m_audio_client.Reset(); - } - - return true; -} - -void WASAPIStream::SoundLoop() -{ - Common::SetCurrentThreadName("WASAPI Handler"); - BYTE* data; - - HRESULT getbuffer_result = m_audio_renderer->GetBuffer(m_frames_in_buffer, &data); - if (getbuffer_result != S_OK) - { - m_running.store(false, std::memory_order_relaxed); - return; - } - m_audio_renderer->ReleaseBuffer(m_frames_in_buffer, AUDCLNT_BUFFERFLAGS_SILENT); - - while (m_running.load(std::memory_order_relaxed)) - { - WaitForSingleObject(m_need_data_event.get(), 1000); - - getbuffer_result = m_audio_renderer->GetBuffer(m_frames_in_buffer, &data); - if (getbuffer_result != S_OK) - { - m_running.store(false, std::memory_order_relaxed); - return; - } - - s16* audio_data = reinterpret_cast(data); - GetMixer()->Mix(audio_data, m_frames_in_buffer); - - const bool is_muted = - Config::Get(Config::MAIN_AUDIO_MUTED) || Config::Get(Config::MAIN_AUDIO_VOLUME) == 0; - const bool need_volume_adjustment = Config::Get(Config::MAIN_AUDIO_VOLUME) != 100 && !is_muted; - - if (need_volume_adjustment) - { - const float volume = Config::Get(Config::MAIN_AUDIO_VOLUME) / 100.0f; - - for (u32 i = 0; i < m_frames_in_buffer * 2; i++) - *audio_data++ *= volume; - } - - m_audio_renderer->ReleaseBuffer(m_frames_in_buffer, is_muted ? AUDCLNT_BUFFERFLAGS_SILENT : 0); - } -} - -#endif // _WIN32 diff --git a/Source/Core/AudioCommon/WASAPIStream.h b/Source/Core/AudioCommon/WASAPIStream.h deleted file mode 100644 index 67b05e9027..0000000000 --- a/Source/Core/AudioCommon/WASAPIStream.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2018 Dolphin Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#ifdef _WIN32 - -// clang-format off -#include -#include -#include -#ifdef __MINGW32__ -#include "Common/WILShim.h" -#endif -#include -// clang-format on - -#include -#include -#include -#include -#include - -#include "AudioCommon/SoundStream.h" - -struct IAudioClient; -struct IAudioRenderClient; -struct IMMDevice; -struct IMMDeviceEnumerator; - -#endif - -class WASAPIStream final : public SoundStream -{ -#ifdef _WIN32 -public: - explicit WASAPIStream(); - ~WASAPIStream() override; - bool Init() override; - bool SetRunning(bool running) override; - - static bool IsValid(); - static std::vector GetAvailableDevices(); - static Microsoft::WRL::ComPtr GetDeviceByName(std::string_view name); - -private: - void SoundLoop(); - - u32 m_frames_in_buffer = 0; - std::atomic m_running = false; - std::thread m_thread; - - // CoUninitialize must be called after all WASAPI COM objects have been destroyed, - // therefore this member must be located before them, as first class fields are destructed last - wil::unique_couninitialize_call m_coinitialize{false}; - - Microsoft::WRL::ComPtr m_enumerator; - Microsoft::WRL::ComPtr m_audio_client; - Microsoft::WRL::ComPtr m_audio_renderer; - wil::unique_event_nothrow m_need_data_event; - WAVEFORMATEXTENSIBLE m_format; -#endif // _WIN32 -}; diff --git a/Source/Core/Core/Config/MainSettings.cpp b/Source/Core/Core/Config/MainSettings.cpp index d7f35797ab..646dd9e999 100644 --- a/Source/Core/Core/Config/MainSettings.cpp +++ b/Source/Core/Core/Config/MainSettings.cpp @@ -73,7 +73,6 @@ const Info MAIN_OVERRIDE_REGION_SETTINGS{{System::Main, "Core", "OverrideR const Info MAIN_DPL2_DECODER{{System::Main, "Core", "DPL2Decoder"}, false}; const Info MAIN_DPL2_QUALITY{{System::Main, "Core", "DPL2Quality"}, AudioCommon::GetDefaultDPL2Quality()}; -const Info MAIN_AUDIO_LATENCY{{System::Main, "Core", "AudioLatency"}, 20}; const Info MAIN_AUDIO_BUFFER_SIZE{{System::Main, "Core", "AudioBufferSize"}, 80}; const Info MAIN_AUDIO_FILL_GAPS{{System::Main, "Core", "AudioFillGaps"}, true}; const Info MAIN_AUDIO_PRESERVE_PITCH{{System::Main, "Core", "AudioPreservePitch"}, false}; @@ -312,15 +311,6 @@ const Info MAIN_DSP_JIT{{System::Main, "DSP", "EnableJIT"}, true}; const Info MAIN_DUMP_AUDIO{{System::Main, "DSP", "DumpAudio"}, false}; const Info MAIN_DUMP_AUDIO_SILENT{{System::Main, "DSP", "DumpAudioSilent"}, false}; const Info MAIN_DUMP_UCODE{{System::Main, "DSP", "DumpUCode"}, false}; -const Info MAIN_AUDIO_BACKEND{{System::Main, "DSP", "Backend"}, - AudioCommon::GetDefaultSoundBackend()}; -const Info MAIN_AUDIO_VOLUME{{System::Main, "DSP", "Volume"}, 100}; -const Info MAIN_AUDIO_MUTED{{System::Main, "DSP", "Muted"}, false}; -const Info MAIN_AUDIO_MUTE_ON_DISABLED_SPEED_LIMIT{ - {System::Main, "DSP", "MuteOnDisabledSpeedLimit"}, false}; -#ifdef _WIN32 -const Info MAIN_WASAPI_DEVICE{{System::Main, "DSP", "WASAPIDevice"}, "default"}; -#endif bool ShouldUseDPL2Decoder() { diff --git a/Source/Core/Core/Config/MainSettings.h b/Source/Core/Core/Config/MainSettings.h index b997b37f34..0a46974829 100644 --- a/Source/Core/Core/Config/MainSettings.h +++ b/Source/Core/Core/Config/MainSettings.h @@ -14,18 +14,6 @@ #include "Core/USBUtils.h" #include "DiscIO/Enums.h" -// DSP Backend Types -#define BACKEND_NULLSOUND _trans("No Audio Output") -#define BACKEND_ALSA "ALSA" -#define BACKEND_CUBEB "Cubeb" -#define BACKEND_OPENAL "OpenAL" -#define BACKEND_PULSEAUDIO "Pulse" -#define BACKEND_OPENSLES "OpenSLES" -#define BACKEND_WASAPI _trans("WASAPI (Exclusive Mode)") -#ifdef __LIBRETRO__ - #define BACKEND_LIBRETRO "Libretro" -#endif - namespace PowerPC { enum class CPUCore; @@ -80,7 +68,6 @@ extern const Info MAIN_GC_LANGUAGE; extern const Info MAIN_OVERRIDE_REGION_SETTINGS; extern const Info MAIN_DPL2_DECODER; extern const Info MAIN_DPL2_QUALITY; -extern const Info MAIN_AUDIO_LATENCY; extern const Info MAIN_AUDIO_BUFFER_SIZE; extern const Info MAIN_AUDIO_FILL_GAPS; extern const Info MAIN_AUDIO_PRESERVE_PITCH; @@ -180,13 +167,6 @@ extern const Info MAIN_DSP_JIT; extern const Info MAIN_DUMP_AUDIO; extern const Info MAIN_DUMP_AUDIO_SILENT; extern const Info MAIN_DUMP_UCODE; -extern const Info MAIN_AUDIO_BACKEND; -extern const Info MAIN_AUDIO_VOLUME; -extern const Info MAIN_AUDIO_MUTED; -extern const Info MAIN_AUDIO_MUTE_ON_DISABLED_SPEED_LIMIT; -#ifdef _WIN32 -extern const Info MAIN_WASAPI_DEVICE; -#endif bool ShouldUseDPL2Decoder(); diff --git a/Source/Core/Core/HW/EXI/EXI_Device.cpp b/Source/Core/Core/HW/EXI/EXI_Device.cpp index 772136ce73..4d18f5d66e 100644 --- a/Source/Core/Core/HW/EXI/EXI_Device.cpp +++ b/Source/Core/Core/HW/EXI/EXI_Device.cpp @@ -18,11 +18,7 @@ #include "Core/HW/Memmap.h" #include "Core/System.h" -#if defined(HAVE_CUBEB) || defined(__LIBRETRO__) #include "Core/HW/EXI/EXI_DeviceMic.h" -#else -#include "Common/MsgHandler.h" -#endif namespace ExpansionInterface { @@ -137,12 +133,7 @@ std::unique_ptr EXIDevice_Create(Core::System& system, const EXIDevi break; case EXIDeviceType::Microphone: -#if defined(HAVE_CUBEB) || defined(__LIBRETRO__) result = std::make_unique(system, channel_num); -#else - PanicAlertFmtT("Dolphin was built with Cubeb disabled. The Microphone device cannot be used."); - result = std::make_unique(system); -#endif break; case EXIDeviceType::Ethernet: diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceMic.cpp b/Source/Core/Core/HW/EXI/EXI_DeviceMic.cpp index 5b9f0c0c73..ce97f034ea 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceMic.cpp +++ b/Source/Core/Core/HW/EXI/EXI_DeviceMic.cpp @@ -7,12 +7,6 @@ #include #include -#if defined(HAVE_CUBEB) -#include -#include "AudioCommon/CubebUtils.h" -#endif - -#include "AudioCommon/CubebUtils.h" #include "Common/CommonTypes.h" #include "Common/Logging/Log.h" @@ -22,14 +16,8 @@ #include "Core/HW/SystemTimers.h" #include "Core/System.h" -#ifdef _WIN32 -#include -#endif - -#ifdef __LIBRETRO__ #include #include "DolphinLibretro/Common/Globals.h" -#endif namespace ExpansionInterface { @@ -37,73 +25,15 @@ void CEXIMic::StreamInit() { stream_buffer = nullptr; samples_avail = stream_wpos = stream_rpos = 0; - -#ifdef HAVE_CUBEB -#ifdef _WIN32 - if (!m_coinit_success) - return; - m_work_queue.PushBlocking([this] { -#endif - m_cubeb_ctx = CubebUtils::GetContext(); -#ifdef _WIN32 - }); -#endif -#endif } void CEXIMic::StreamTerminate() { StreamStop(); - -#ifdef HAVE_CUBEB - if (m_cubeb_ctx) - { -#ifdef _WIN32 - if (!m_coinit_success) - return; - m_work_queue.PushBlocking([this] { -#endif - m_cubeb_ctx.reset(); -#ifdef _WIN32 - }); -#endif - } -#endif } -#ifdef HAVE_CUBEB -static void state_callback(cubeb_stream* stream, void* user_data, cubeb_state state) -{ -} - -long CEXIMic::DataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer, - void* /*output_buffer*/, long nframes) -{ - CEXIMic* mic = static_cast(user_data); - - std::lock_guard lk(mic->ring_lock); - - const s16* buff_in = static_cast(input_buffer); - for (long i = 0; i < nframes; i++) - { - mic->stream_buffer[mic->stream_wpos] = buff_in[i]; - mic->stream_wpos = (mic->stream_wpos + 1) % mic->stream_size; - } - - mic->samples_avail += nframes; - if (mic->samples_avail > mic->stream_size) - { - mic->samples_avail = 0; - mic->status.buff_ovrflw = 1; - } - - return nframes; -} -#endif - void CEXIMic::StreamStart() { -#ifdef __LIBRETRO__ if (!Libretro::Input::g_has_microphone_support) return; @@ -125,78 +55,16 @@ void CEXIMic::StreamStart() Libretro::Input::g_microphone_interface.set_mic_state( static_cast(m_retro_mic), true); - -#elif defined(HAVE_CUBEB) - if (!m_cubeb_ctx) - return; - -#ifdef _WIN32 - if (!m_coinit_success) - return; - m_work_queue.PushBlocking([this] { -#endif - // Open stream with current parameters - stream_size = buff_size_samples * 500; - stream_buffer = new s16[stream_size]; - - cubeb_stream_params params{}; - params.format = CUBEB_SAMPLE_S16LE; - params.rate = sample_rate; - params.channels = 1; - params.layout = CUBEB_LAYOUT_MONO; - - u32 minimum_latency; - if (cubeb_get_min_latency(m_cubeb_ctx.get(), ¶ms, &minimum_latency) != CUBEB_OK) - { - WARN_LOG_FMT(EXPANSIONINTERFACE, "Error getting minimum latency"); - } - - if (cubeb_stream_init(m_cubeb_ctx.get(), &m_cubeb_stream, - "Dolphin Emulated GameCube Microphone", nullptr, ¶ms, nullptr, - nullptr, std::max(buff_size_samples, minimum_latency), DataCallback, - state_callback, this) != CUBEB_OK) - { - ERROR_LOG_FMT(EXPANSIONINTERFACE, "Error initializing cubeb stream"); - return; - } - - if (cubeb_stream_start(m_cubeb_stream) != CUBEB_OK) - { - ERROR_LOG_FMT(EXPANSIONINTERFACE, "Error starting cubeb stream"); - return; - } - - INFO_LOG_FMT(EXPANSIONINTERFACE, "started cubeb stream"); -#ifdef _WIN32 - }); -#endif -#endif } void CEXIMic::StreamStop() { -#ifdef __LIBRETRO__ if (m_retro_mic) { Libretro::Input::g_microphone_interface.close_mic( static_cast(m_retro_mic)); m_retro_mic = nullptr; } -#elif defined(HAVE_CUBEB) - if (m_cubeb_stream) - { -#ifdef _WIN32 - m_work_queue.PushBlocking([this] { -#endif - if (cubeb_stream_stop(m_cubeb_stream) != CUBEB_OK) - ERROR_LOG_FMT(EXPANSIONINTERFACE, "Error stopping cubeb stream"); - cubeb_stream_destroy(m_cubeb_stream); - m_cubeb_stream = nullptr; -#ifdef _WIN32 - }); -#endif - } -#endif samples_avail = stream_wpos = stream_rpos = 0; @@ -231,10 +99,6 @@ u8 const CEXIMic::exi_id[] = {0, 0x0a, 0, 0, 0}; CEXIMic::CEXIMic(Core::System& system, int index) : IEXIDevice(system), slot(index) -#ifdef _WIN32 - , - m_work_queue("Mic Worker") -#endif { m_position = 0; command = 0; @@ -249,31 +113,12 @@ CEXIMic::CEXIMic(Core::System& system, int index) next_int_ticks = 0; -#ifdef _WIN32 - m_work_queue.PushBlocking([this] { - auto result = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE); - m_coinit_success = result == S_OK; - m_should_couninit = result == S_OK || result == S_FALSE; - }); -#endif - StreamInit(); } CEXIMic::~CEXIMic() { StreamTerminate(); - -#ifdef _WIN32 - if (m_should_couninit) - { - m_work_queue.PushBlocking([this] { - m_should_couninit = false; - CoUninitialize(); - }); - } - m_coinit_success = false; -#endif } bool CEXIMic::IsPresent() const @@ -382,7 +227,6 @@ void CEXIMic::TransferByte(u8& byte) m_position++; } -#ifdef __LIBRETRO__ void CEXIMic::PollLibretroMic() { if (!m_retro_mic || !status.is_active) @@ -409,6 +253,5 @@ void CEXIMic::PollLibretroMic() status.buff_ovrflw = 1; } } -#endif } // namespace ExpansionInterface diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceMic.h b/Source/Core/Core/HW/EXI/EXI_DeviceMic.h index b31a3a7b66..f5e21f82d0 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceMic.h +++ b/Source/Core/Core/HW/EXI/EXI_DeviceMic.h @@ -6,12 +6,8 @@ #include #include "Common/CommonTypes.h" -#include "Common/WorkQueueThread.h" #include "Core/HW/EXI/EXI_Device.h" -struct cubeb; -struct cubeb_stream; - namespace ExpansionInterface { class CEXIMic : public IEXIDevice @@ -23,9 +19,7 @@ public: bool IsInterruptSet() override; bool IsPresent() const override; -#ifdef __LIBRETRO__ void PollLibretroMic(); -#endif private: static u8 const exi_id[]; @@ -64,11 +58,6 @@ private: }; }; -#ifdef HAVE_CUBEB - static long DataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer, - void* output_buffer, long nframes); -#endif - void TransferByte(u8& byte) override; void StreamInit(); @@ -87,10 +76,6 @@ private: void UpdateNextInterruptTicks(); // Streaming input interface -#ifdef HAVE_CUBEB - std::shared_ptr m_cubeb_ctx = nullptr; - cubeb_stream* m_cubeb_stream = nullptr; -#endif UStatus status; @@ -109,13 +94,6 @@ private: int stream_rpos; int samples_avail; -#ifdef _WIN32 - Common::AsyncWorkThread m_work_queue; - bool m_coinit_success = false; - bool m_should_couninit = false; -#endif -#ifdef __LIBRETRO__ void* m_retro_mic = nullptr; -#endif }; } // namespace ExpansionInterface diff --git a/Source/Core/Core/IOS/USB/Emulated/LogitechMic.cpp b/Source/Core/Core/IOS/USB/Emulated/LogitechMic.cpp index d995c9c6ad..ff62b9f02e 100644 --- a/Source/Core/Core/IOS/USB/Emulated/LogitechMic.cpp +++ b/Source/Core/Core/IOS/USB/Emulated/LogitechMic.cpp @@ -6,8 +6,6 @@ #include #include -#include - #include "Core/Config/MainSettings.h" #include "Core/HW/Memmap.h" #include "Core/System.h" @@ -70,30 +68,17 @@ class MicrophoneLogitech final : public Microphone { public: explicit MicrophoneLogitech(const LogitechMicState& sampler, u8 index) - : Microphone(sampler, fmt::format("Logitech Mic {}", index)), m_sampler(sampler), + : Microphone(sampler), m_sampler(sampler), m_index(index) { } private: -#ifdef HAVE_CUBEB - std::string GetInputDeviceId() const override - { - return Config::Get(Config::MAIN_LOGITECH_MIC_MICROPHONE[m_index]); - } - std::string GetCubebStreamName() const override - { - return fmt::format("Dolphin Emulated Logitech USB Microphone {}", m_index); - } -#endif - -#if defined(HAVE_CUBEB) || defined(__LIBRETRO__) s16 GetVolumeModifier() const override { return Config::Get(Config::MAIN_LOGITECH_MIC_VOLUME_MODIFIER[m_index]); } bool AreSamplesByteSwapped() const override { return false; } -#endif bool IsMicrophoneMuted() const override { diff --git a/Source/Core/Core/IOS/USB/Emulated/Microphone.cpp b/Source/Core/Core/IOS/USB/Emulated/Microphone.cpp index defecd0d26..8b11f5b673 100644 --- a/Source/Core/Core/IOS/USB/Emulated/Microphone.cpp +++ b/Source/Core/Core/IOS/USB/Emulated/Microphone.cpp @@ -8,43 +8,20 @@ #include #include -#ifdef HAVE_CUBEB -#include - -#include "AudioCommon/CubebUtils.h" -#endif - #include "Common/Logging/Log.h" #include "Common/MathUtil.h" #include "Common/Swap.h" #include "Core/Core.h" #include "Core/System.h" -#ifdef _WIN32 -#include -#endif - -#ifdef ANDROID -#include "jni/AndroidCommon/IDCache.h" -#endif - -#ifdef __LIBRETRO__ #include #include "DolphinLibretro/Common/Globals.h" -#endif namespace IOS::HLE::USB { -#ifdef HAVE_CUBEB -Microphone::Microphone(const MicrophoneState& sampler, std::string worker_name) - : m_sampler(sampler), m_worker(std::move(worker_name)) +Microphone::Microphone(const MicrophoneState& sampler) : m_sampler(sampler) { } -#else -Microphone::Microphone(const MicrophoneState& sampler, std::string worker_name) : m_sampler(sampler) -{ -} -#endif Microphone::~Microphone() { @@ -56,8 +33,6 @@ void Microphone::Initialize() StreamInit(); } -#ifndef HAVE_CUBEB -#ifdef __LIBRETRO__ void Microphone::StreamInit() { StreamStart(m_sampler.GetDefaultSamplingRate()); @@ -130,135 +105,7 @@ void Microphone::PollRetroArchMic() if (frames > 0) DataCallback(buf.data(), frames); } -#else -void Microphone::StreamInit() -{ -} -void Microphone::StreamStart(u32 /* sampling_rate */) -{ -} - -void Microphone::StreamStop() -{ -} - -void Microphone::StreamTerminate() -{ -} -#endif -#else -void Microphone::StreamInit() -{ - if (!m_worker.Execute([this] { m_cubeb_ctx = CubebUtils::GetContext(); })) - { - ERROR_LOG_FMT(IOS_USB, "Failed to init microphone stream"); - return; - } - - // TODO: Not here but rather inside the WiiSpeak device if possible? - StreamStart(m_sampler.GetDefaultSamplingRate()); -} - -void Microphone::StreamTerminate() -{ - StreamStop(); - - if (m_cubeb_ctx) - m_worker.Execute([this] { m_cubeb_ctx.reset(); }); -} - -static void StateCallback(cubeb_stream* stream, void* user_data, cubeb_state state) -{ -} - -void Microphone::StreamStart(u32 sampling_rate) -{ - if (!m_cubeb_ctx) - return; - - m_worker.Execute([this, sampling_rate] { -#ifdef ANDROID - JNIEnv* env = IDCache::GetEnvForThread(); - if (jboolean result = env->CallStaticBooleanMethod( - IDCache::GetPermissionHandlerClass(), - IDCache::GetPermissionHandlerHasRecordAudioPermission(), nullptr); - result == JNI_FALSE) - { - env->CallStaticVoidMethod(IDCache::GetPermissionHandlerClass(), - IDCache::GetPermissionHandlerRequestRecordAudioPermission(), - nullptr); - } -#endif - - cubeb_stream_params params{}; - params.format = CUBEB_SAMPLE_S16LE; - params.rate = sampling_rate; - params.channels = 1; - params.layout = CUBEB_LAYOUT_MONO; - - std::lock_guard lock(m_ring_lock); - u32 minimum_latency; - if (cubeb_get_min_latency(m_cubeb_ctx.get(), ¶ms, &minimum_latency) != CUBEB_OK) - { - WARN_LOG_FMT(IOS_USB, "Error getting minimum latency"); - minimum_latency = 16; - } - - cubeb_devid input_device = CubebUtils::GetInputDeviceById(GetInputDeviceId()); - if (cubeb_stream_init(m_cubeb_ctx.get(), &m_cubeb_stream, GetCubebStreamName().c_str(), - input_device, ¶ms, nullptr, nullptr, - std::max(16, minimum_latency), CubebDataCallback, StateCallback, - this) != CUBEB_OK) - { - ERROR_LOG_FMT(IOS_USB, "Error initializing cubeb stream"); - return; - } - - if (cubeb_stream_start(m_cubeb_stream) != CUBEB_OK) - { - ERROR_LOG_FMT(IOS_USB, "Error starting cubeb stream"); - return; - } - - m_stream_buffer.resize(GetStreamSize()); - m_stream_wpos = 0; - INFO_LOG_FMT(IOS_USB, "started cubeb stream"); - }); -} - -void Microphone::StreamStop() -{ - if (!m_cubeb_stream) - return; - - m_worker.Execute([this] { - if (cubeb_stream_stop(m_cubeb_stream) != CUBEB_OK) - ERROR_LOG_FMT(IOS_USB, "Error stopping cubeb stream"); - cubeb_stream_destroy(m_cubeb_stream); - m_cubeb_stream = nullptr; - }); -} - -long Microphone::CubebDataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer, - void* /*output_buffer*/, long nframes) -{ - // Skip data when core isn't running - if (Core::GetState(Core::System::GetInstance()) != Core::State::Running) - return nframes; - - auto* mic = static_cast(user_data); - - // Skip data when HLE Wii Speak is muted - // TODO: Update cubeb and use cubeb_stream_set_input_mute - if (mic->IsMicrophoneMuted()) - return nframes; - - return mic->DataCallback(static_cast(input_buffer), nframes); -} -#endif - -#if defined(HAVE_CUBEB) || defined(__LIBRETRO__) long Microphone::DataCallback(const SampleType* input_buffer, long nframes) { std::lock_guard lock(m_ring_lock); @@ -291,7 +138,6 @@ long Microphone::DataCallback(const SampleType* input_buffer, long nframes) return nframes; } -#endif u16 Microphone::ReadIntoBuffer(u8* ptr, u32 size) { diff --git a/Source/Core/Core/IOS/USB/Emulated/Microphone.h b/Source/Core/Core/IOS/USB/Emulated/Microphone.h index c23c934684..6fc9c67d7c 100644 --- a/Source/Core/Core/IOS/USB/Emulated/Microphone.h +++ b/Source/Core/Core/IOS/USB/Emulated/Microphone.h @@ -12,16 +12,7 @@ #include "Common/CommonTypes.h" -#ifdef HAVE_CUBEB -#include "AudioCommon/CubebUtils.h" - -struct cubeb; -struct cubeb_stream; -#endif - -#ifdef __LIBRETRO__ #include -#endif namespace IOS::HLE::USB { @@ -42,7 +33,7 @@ public: using SampleType = s16; using UnsignedSampleType = std::make_unsigned_t; - Microphone(const MicrophoneState& sampler, std::string worker_name); + explicit Microphone(const MicrophoneState& sampler); virtual ~Microphone(); void Initialize(); @@ -52,25 +43,14 @@ public: FloatType ComputeGain(FloatType relative_db) const; void SetSamplingRate(u32 sampling_rate); -#ifdef __LIBRETRO__ void PollRetroArchMic(); -#endif protected: static constexpr u32 BUFF_SIZE_SAMPLES = 32; private: -#ifdef HAVE_CUBEB - static long CubebDataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer, - void* output_buffer, long nframes); - virtual std::string GetInputDeviceId() const = 0; - virtual std::string GetCubebStreamName() const = 0; -#endif - -#if defined(HAVE_CUBEB) || defined(__LIBRETRO__) virtual s16 GetVolumeModifier() const = 0; virtual bool AreSamplesByteSwapped() const = 0; -#endif long DataCallback(const SampleType* input_buffer, long nframes); virtual bool IsMicrophoneMuted() const = 0; @@ -129,15 +109,7 @@ private: const MicrophoneState& m_sampler; -#ifdef HAVE_CUBEB - std::shared_ptr m_cubeb_ctx = nullptr; - cubeb_stream* m_cubeb_stream = nullptr; - CubebUtils::CoInitSyncWorker m_worker; -#endif - -#ifdef __LIBRETRO__ void* m_retro_mic = nullptr; u32 m_current_sampling_rate = 0; -#endif }; } // namespace IOS::HLE::USB diff --git a/Source/Core/Core/IOS/USB/Emulated/WiiSpeak.cpp b/Source/Core/Core/IOS/USB/Emulated/WiiSpeak.cpp index 5329da53d1..c02924e692 100644 --- a/Source/Core/Core/IOS/USB/Emulated/WiiSpeak.cpp +++ b/Source/Core/Core/IOS/USB/Emulated/WiiSpeak.cpp @@ -32,26 +32,16 @@ class MicrophoneWiiSpeak final : public Microphone { public: explicit MicrophoneWiiSpeak(const WiiSpeakState& sampler) - : Microphone(sampler, "Wii Speak Worker") + : Microphone(sampler) { } private: -#ifdef HAVE_CUBEB - std::string GetInputDeviceId() const override - { - return Config::Get(Config::MAIN_WII_SPEAK_MICROPHONE); - } - std::string GetCubebStreamName() const override { return "Dolphin Emulated Wii Speak"; } -#endif - -#if defined(HAVE_CUBEB) || defined(__LIBRETRO__) s16 GetVolumeModifier() const override { return Config::Get(Config::MAIN_WII_SPEAK_VOLUME_MODIFIER); } bool AreSamplesByteSwapped() const override { return true; } -#endif bool IsMicrophoneMuted() const override { return Config::Get(Config::MAIN_WII_SPEAK_MUTED); } u32 GetStreamSize() const override { return BUFF_SIZE_SAMPLES * 500; } @@ -270,8 +260,8 @@ int WiiSpeak::SubmitTransfer(std::unique_ptr cmd) // so the length of a single frame should be 1 ms. // // Monster Hunter 3 and the Wii Speak Channel use cmd->length=0x100, allowing 256/2 samples - // (i.e. 128 samples in 16-bit mono) per frame transfer. The Microphone class is using cubeb - // configured with a sample rate of 8000. + // (i.e. 128 samples in 16-bit mono) per frame transfer. The Microphone class opens the + // frontend microphone with a sample rate of 8000. // // Based on USB sniffing using Wireshark + Dolphin USB passthrough: // - 125 frames are received per second (i.e. timing 8 ms per frame) diff --git a/Source/Core/DolphinLibretro/Audio.cpp b/Source/Core/DolphinLibretro/Audio.cpp index 04deefa3ea..e2c23ff77d 100644 --- a/Source/Core/DolphinLibretro/Audio.cpp +++ b/Source/Core/DolphinLibretro/Audio.cpp @@ -2,8 +2,7 @@ #include "Audio.h" #include "Common/Logging/Log.h" #include "Common/Thread.h" -#include "Core/Config/MainSettings.h" -#include "AudioCommon/AudioCommon.h" +#include "AudioCommon/SoundStream.h" #include "VideoCommon/Present.h" #include "DolphinLibretro/Common/Globals.h" @@ -36,10 +35,9 @@ unsigned int GetCoreSampleRate() // when called from retro_run SoundStream* sound_stream = Core::System::GetInstance().GetSoundStream(); double sampleRate = LEGACY_DEFAULT_SAMPLE_RATE; - if (sound_stream && sound_stream->GetMixer() && - sound_stream->GetMixer()->GetSampleRate() != 0) + if (sound_stream && sound_stream->GetMixer()->GetSampleRate() != 0) return sound_stream->GetMixer()->GetSampleRate(); - // used in Stream constructor + // used in SoundStream constructor if (Core::System::GetInstance().IsWii()) return sampleRate; else if (sampleRate == 32000u) @@ -63,8 +61,7 @@ unsigned int GetActiveSampleRate() // when called from retro_run SoundStream* sound_stream = Core::System::GetInstance().GetSoundStream(); - if (sound_stream && sound_stream->GetMixer() && - sound_stream->GetMixer()->GetSampleRate() != 0) + if (sound_stream && sound_stream->GetMixer()->GetSampleRate() != 0) return sound_stream->GetMixer()->GetSampleRate(); // this is more or less how the core has used audio for several years @@ -135,34 +132,34 @@ inline unsigned GetSamplesForFrame(unsigned sample_rate) double frame_time_sec = FrameTiming::target_frame_duration_usec.load(std::memory_order_relaxed) * 1e-6; return std::clamp(static_cast(std::lround(frame_time_sec * sample_rate)), - MIN_SAMPLES, MAX_SAMPLES); + SoundStream::MIN_SAMPLES, SoundStream::MAX_SAMPLES); } -bool Stream::Init() +} // namespace Audio +} // namespace Libretro + +using namespace Libretro::Audio; + +SoundStream::SoundStream() + : m_mixer(std::make_unique(GetActiveSampleRate())), m_sample_rate(DEFAULT_SAMPLE_RATE) +{ +} + +void SoundStream::Init() { // this is called much later than retro_get_system_av_info when not using callbacks m_sample_rate = GetActiveSampleRate(); - GetMixer()->SetSampleRate(m_sample_rate); - - return true; + m_mixer->SetSampleRate(m_sample_rate); } -bool Stream::IsValid() -{ - if(batch_cb) - return true; - - return false; -} - -void Stream::Update(unsigned int num_samples) +void SoundStream::Update(unsigned int num_samples) { if (g_use_call_back_audio != CallBackMode::PUSH_SAMPLES) { return; } - if (!m_mixer || !batch_cb) + if (!batch_cb) return; static unsigned pending = 0; @@ -193,7 +190,7 @@ void Stream::Update(unsigned int num_samples) } } -void Stream::MixAndPush(unsigned int num_samples) +void SoundStream::MixAndPush(unsigned int num_samples) { static unsigned pending = 0; pending += num_samples; @@ -224,14 +221,14 @@ void Stream::MixAndPush(unsigned int num_samples) } // Per frame sync: each field's samples go to the frontend from the CPU thread as the field ends, -void Stream::NewField() +void SoundStream::NewField() { PushAudioForFrame(); } -void Stream::PushAudioForFrame() +void SoundStream::PushAudioForFrame() { - if (g_use_call_back_audio != CallBackMode::SYNC_PER_FRAME || !m_mixer || !batch_cb) + if (g_use_call_back_audio != CallBackMode::SYNC_PER_FRAME || !batch_cb) return; // The DSP fills the mixer at the game's refresh rate, not the @@ -260,9 +257,9 @@ void Stream::PushAudioForFrame() // Output is 48000 Hz (Wii) (or 48043 Hz for GameCube) // Wii: Uses divisor 1125 * 2 = 2250 = exactly 48000 Hz // GameCube: Uses divisor 1124 * 2 = 2248 = 48043 Hz -void Stream::ProcessCallBack() +void SoundStream::ProcessCallBack() { - if (!m_mixer || !batch_cb || !Libretro::g_emuthread_launched || + if (!batch_cb || !Libretro::g_emuthread_launched || g_use_call_back_audio != CallBackMode::ASYNC_CALLBACK) return; @@ -297,8 +294,9 @@ void Stream::ProcessCallBack() m_mixer->Mix(m_buffer, to_mix); batch_cb(m_buffer, to_mix); } -} // namespace Audio +namespace Libretro +{ namespace FrameTiming { std::atomic target_frame_duration_usec{16667}; @@ -371,27 +369,6 @@ namespace FrameTiming if (Libretro::environ_cb(RETRO_ENVIRONMENT_GET_FASTFORWARDING, &is_fast_forwarding)) { Libretro::Audio::g_is_fast_forwarding = is_fast_forwarding; - - if (is_fast_forwarding) - { - if (!Config::Get(Config::MAIN_AUDIO_MUTED) && - Config::Get(Config::MAIN_AUDIO_MUTE_ON_DISABLED_SPEED_LIMIT)) - { - Config::SetCurrent(Config::MAIN_AUDIO_MUTED, true); - AudioCommon::UpdateSoundStream(Core::System::GetInstance()); - } - } - else - { - if (Config::Get(Config::MAIN_AUDIO_MUTED) && - Config::GetActiveLayerForConfig(Config::MAIN_AUDIO_MUTED) == - Config::LayerType::CurrentRun) - { - Config::DeleteKey(Config::LayerType::CurrentRun, Config::MAIN_AUDIO_MUTED); - AudioCommon::UpdateSoundStream(Core::System::GetInstance()); - } - } - return; } diff --git a/Source/Core/DolphinLibretro/Audio.h b/Source/Core/DolphinLibretro/Audio.h index 4aa4f140d1..0b5b092d08 100644 --- a/Source/Core/DolphinLibretro/Audio.h +++ b/Source/Core/DolphinLibretro/Audio.h @@ -12,8 +12,6 @@ extern double g_core_refresh_rate; namespace Audio { extern retro_audio_sample_batch_t batch_cb; -static constexpr unsigned int MIN_SAMPLES = 96; -static constexpr unsigned int MAX_SAMPLES = 1024; static constexpr unsigned int DEFAULT_SAMPLE_RATE = 48000; static constexpr unsigned int LEGACY_DEFAULT_SAMPLE_RATE = 32000; @@ -22,31 +20,6 @@ void Init(); unsigned int GetCoreSampleRate(); unsigned int GetRetroSampleRate(); unsigned int GetActiveSampleRate(); - -class Stream final : public SoundStream -{ -public: - Stream(unsigned int backendSampleRate = DEFAULT_SAMPLE_RATE) - : SoundStream(GetActiveSampleRate()) {} - - bool Init() override; - static bool IsValid(); - - bool SetRunning(bool running) override { return true; } - - void PushAudioForFrame(); - void MixAndPush(unsigned int num_samples); - void Update(unsigned int num_samples) override; - - void ProcessCallBack() override; - void NewField() override; - -private: - s16 m_buffer[MAX_SAMPLES * 2]; - std::atomic m_callback_received{false}; - unsigned m_sample_rate{DEFAULT_SAMPLE_RATE}; -}; - } // namespace Audio namespace FrameTiming diff --git a/Source/Core/DolphinLibretro/Boot.cpp b/Source/Core/DolphinLibretro/Boot.cpp index b929fa713b..51e8a77878 100644 --- a/Source/Core/DolphinLibretro/Boot.cpp +++ b/Source/Core/DolphinLibretro/Boot.cpp @@ -413,7 +413,6 @@ bool retro_load_game(const struct retro_game_info* game) Config::SetBase(Config::MAIN_GC_LANGUAGE, DiscIO::ToGameCubeLanguage(static_cast(language))); Config::SetBase(Config::MAIN_DPL2_DECODER, false); - Config::SetBase(Config::MAIN_AUDIO_LATENCY, 0); Config::SetBase(Config::MAIN_AUDIO_FILL_GAPS, false); Config::SetBase(Config::MAIN_EMULATION_SPEED, @@ -459,8 +458,6 @@ bool retro_load_game(const struct retro_game_info* game) Libretro::GetOption(audio::DSP_JIT, /*def=*/true)); Config::SetBase(Config::MAIN_DUMP_AUDIO, false); - Config::SetBase(Config::MAIN_AUDIO_BACKEND, BACKEND_LIBRETRO); - // Main.BluetoothPassthrough Config::SetBase(Config::MAIN_BLUETOOTH_PASSTHROUGH_ENABLED, Libretro::GetOption(Libretro::Options::main_bluetooth::BLUETOOTH_PASSTHROUGH, /*def=*/false));