123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- /* FAudio - XAudio Reimplementation for FNA
- *
- * Copyright (c) 2011-2021 Ethan Lee, Luigi Auriemma, and the MonoGame Team
- *
- * This software is provided 'as-is', without any express or implied warranty.
- * In no event will the authors be held liable for any damages arising from
- * the use of this software.
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- * claim that you wrote the original software. If you use this software in a
- * product, an acknowledgment in the product documentation would be
- * appreciated but is not required.
- *
- * 2. Altered source versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.
- *
- * 3. This notice may not be removed or altered from any source distribution.
- *
- * Ethan "flibitijibibo" Lee <flibitijibibo@flibitijibibo.com>
- *
- */
- #ifndef FAPOFX_H
- #define FAPOFX_H
- #include "FAPO.h"
- #define FAPOFXAPI FAUDIOAPI
- #ifdef __cplusplus
- extern "C" {
- #endif /* __cplusplus */
- /* GUIDs */
- /* "Legacy" GUIDs are from XAPOFX <= 1.5. They were removed in XAudio 2.8 and later. */
- extern const FAudioGUID FAPOFX_CLSID_FXEQ, FAPOFX_CLSID_FXEQ_LEGACY;
- extern const FAudioGUID FAPOFX_CLSID_FXMasteringLimiter, FAPOFX_CLSID_FXMasteringLimiter_LEGACY;
- extern const FAudioGUID FAPOFX_CLSID_FXReverb, FAPOFX_CLSID_FXReverb_LEGACY;
- extern const FAudioGUID FAPOFX_CLSID_FXEcho, FAPOFX_CLSID_FXEcho_LEGACY;
- /* Structures */
- #pragma pack(push, 1)
- /* See FAPOFXEQ_* constants below.
- * FrequencyCenter is in Hz, Gain is amplitude ratio, Bandwidth is Q factor.
- */
- typedef struct FAPOFXEQParameters
- {
- float FrequencyCenter0;
- float Gain0;
- float Bandwidth0;
- float FrequencyCenter1;
- float Gain1;
- float Bandwidth1;
- float FrequencyCenter2;
- float Gain2;
- float Bandwidth2;
- float FrequencyCenter3;
- float Gain3;
- float Bandwidth3;
- } FAPOFXEQParameters;
- /* See FAPOFXMASTERINGLIMITER_* constants below. */
- typedef struct FAPOFXMasteringLimiterParameters
- {
- uint32_t Release; /* In milliseconds */
- uint32_t Loudness; /* In... uh, MSDN doesn't actually say what. */
- } FAPOFXMasteringLimiterParameters;
- /* See FAPOFXREVERB_* constants below.
- * Both parameters are arbitrary and should be treated subjectively.
- */
- typedef struct FAPOFXReverbParameters
- {
- float Diffusion;
- float RoomSize;
- } FAPOFXReverbParameters;
- /* See FAPOFXECHO_* constants below. */
- typedef struct FAPOFXEchoParameters
- {
- float WetDryMix; /* Percentage of processed signal vs original */
- float Feedback; /* Percentage to feed back into input */
- float Delay; /* In milliseconds */
- } FAPOFXEchoParameters;
- #pragma pack(pop)
- /* Constants */
- #define FAPOFXEQ_MIN_FRAMERATE 22000
- #define FAPOFXEQ_MAX_FRAMERATE 48000
- #define FAPOFXEQ_MIN_FREQUENCY_CENTER 20.0f
- #define FAPOFXEQ_MAX_FREQUENCY_CENTER 20000.0f
- #define FAPOFXEQ_DEFAULT_FREQUENCY_CENTER_0 100.0f
- #define FAPOFXEQ_DEFAULT_FREQUENCY_CENTER_1 800.0f
- #define FAPOFXEQ_DEFAULT_FREQUENCY_CENTER_2 2000.0f
- #define FAPOFXEQ_DEFAULT_FREQUENCY_CENTER_3 10000.0f
- #define FAPOFXEQ_MIN_GAIN 0.126f
- #define FAPOFXEQ_MAX_GAIN 7.94f
- #define FAPOFXEQ_DEFAULT_GAIN 1.0f
- #define FAPOFXEQ_MIN_BANDWIDTH 0.1f
- #define FAPOFXEQ_MAX_BANDWIDTH 2.0f
- #define FAPOFXEQ_DEFAULT_BANDWIDTH 1.0f
- #define FAPOFXMASTERINGLIMITER_MIN_RELEASE 1
- #define FAPOFXMASTERINGLIMITER_MAX_RELEASE 20
- #define FAPOFXMASTERINGLIMITER_DEFAULT_RELEASE 6
- #define FAPOFXMASTERINGLIMITER_MIN_LOUDNESS 1
- #define FAPOFXMASTERINGLIMITER_MAX_LOUDNESS 1800
- #define FAPOFXMASTERINGLIMITER_DEFAULT_LOUDNESS 1000
- #define FAPOFXREVERB_MIN_DIFFUSION 0.0f
- #define FAPOFXREVERB_MAX_DIFFUSION 1.0f
- #define FAPOFXREVERB_DEFAULT_DIFFUSION 0.9f
- #define FAPOFXREVERB_MIN_ROOMSIZE 0.0001f
- #define FAPOFXREVERB_MAX_ROOMSIZE 1.0f
- #define FAPOFXREVERB_DEFAULT_ROOMSIZE 0.6f
- #define FAPOFXECHO_MIN_WETDRYMIX 0.0f
- #define FAPOFXECHO_MAX_WETDRYMIX 1.0f
- #define FAPOFXECHO_DEFAULT_WETDRYMIX 0.5f
- #define FAPOFXECHO_MIN_FEEDBACK 0.0f
- #define FAPOFXECHO_MAX_FEEDBACK 1.0f
- #define FAPOFXECHO_DEFAULT_FEEDBACK 0.5f
- #define FAPOFXECHO_MIN_DELAY 1.0f
- #define FAPOFXECHO_MAX_DELAY 2000.0f
- #define FAPOFXECHO_DEFAULT_DELAY 500.0f
- /* Functions */
- /* Creates an effect from the pre-made FAPOFX effect library.
- *
- * clsid: A reference to one of the FAPOFX_CLSID_* GUIDs
- * pEffect: Filled with the resulting FAPO object
- * pInitData: Starting parameters, pass NULL to use the default values
- * InitDataByteSize: Parameter struct size, pass 0 if pInitData is NULL
- *
- * Returns 0 on success.
- */
- FAPOFXAPI uint32_t FAPOFX_CreateFX(
- const FAudioGUID *clsid,
- FAPO **pEffect,
- const void *pInitData,
- uint32_t InitDataByteSize
- );
- /* See "extensions/CustomAllocatorEXT.txt" for more details. */
- FAPOFXAPI uint32_t FAPOFX_CreateFXWithCustomAllocatorEXT(
- const FAudioGUID *clsid,
- FAPO **pEffect,
- const void *pInitData,
- uint32_t InitDataByteSize,
- FAudioMallocFunc customMalloc,
- FAudioFreeFunc customFree,
- FAudioReallocFunc customRealloc
- );
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
- #endif /* FAPOFX_H */
- /* vim: set noexpandtab shiftwidth=8 tabstop=8: */
|