123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- /*-========================================================================-_
- | - XAPOFX - |
- | Copyright (c) Microsoft Corporation. All rights reserved. |
- |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
- |PROJECT: XAPOFX MODEL: Unmanaged User-mode |
- |VERSION: 1.3 EXCEPT: No Exceptions |
- |CLASS: N / A MINREQ: WinXP, Xbox360 |
- |BASE: N / A DIALECT: MSC++ 14.00 |
- |>------------------------------------------------------------------------<|
- | DUTY: Cross-platform Audio Processing Objects |
- ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
- NOTES:
- 1. USE THE DEBUG DLL TO ENABLE PARAMETER VALIDATION VIA ASSERTS!
- Here's how:
- Copy XAPOFXDX_X.dll to where your application exists.
- The debug DLL can be found under %WINDIR%\system32.
- Rename XAPOFXDX_X.dll to XAPOFXX_X.dll to use the debug version. */
- #pragma once
- //--------------<D-E-F-I-N-I-T-I-O-N-S>-------------------------------------//
- #include "comdecl.h" // for DEFINE_CLSID
- // FX class IDs
- DEFINE_CLSID(FXEQ, A90BC001, E897, E897, 74, 39, 43, 55, 00, 00, 00, 00);
- DEFINE_CLSID(FXMasteringLimiter, A90BC001, E897, E897, 74, 39, 43, 55, 00, 00, 00, 01);
- DEFINE_CLSID(FXReverb, A90BC001, E897, E897, 74, 39, 43, 55, 00, 00, 00, 02);
- DEFINE_CLSID(FXEcho, A90BC001, E897, E897, 74, 39, 43, 55, 00, 00, 00, 03);
- #if !defined(GUID_DEFS_ONLY) // ignore rest if only GUID definitions requested
- #if defined(_XBOX) // general windows and COM declarations
- #include <xtl.h>
- #include <xobjbase.h>
- #else
- #include <windows.h>
- #include <objbase.h>
- #endif
- #include <float.h> // float bounds
- // EQ parameter bounds (inclusive), used with XEQ:
- #define FXEQ_MIN_FRAMERATE 22000
- #define FXEQ_MAX_FRAMERATE 48000
- #define FXEQ_MIN_FREQUENCY_CENTER 20.0f
- #define FXEQ_MAX_FREQUENCY_CENTER 20000.0f
- #define FXEQ_DEFAULT_FREQUENCY_CENTER_0 100.0f // band 0
- #define FXEQ_DEFAULT_FREQUENCY_CENTER_1 800.0f // band 1
- #define FXEQ_DEFAULT_FREQUENCY_CENTER_2 2000.0f // band 2
- #define FXEQ_DEFAULT_FREQUENCY_CENTER_3 10000.0f // band 3
- #define FXEQ_MIN_GAIN 0.126f // -18dB
- #define FXEQ_MAX_GAIN 7.94f // +18dB
- #define FXEQ_DEFAULT_GAIN 1.0f // 0dB change, all bands
- #define FXEQ_MIN_BANDWIDTH 0.1f
- #define FXEQ_MAX_BANDWIDTH 2.0f
- #define FXEQ_DEFAULT_BANDWIDTH 1.0f // all bands
- // Mastering limiter parameter bounds (inclusive), used with XMasteringLimiter:
- #define FXMASTERINGLIMITER_MIN_RELEASE 1
- #define FXMASTERINGLIMITER_MAX_RELEASE 20
- #define FXMASTERINGLIMITER_DEFAULT_RELEASE 6
- #define FXMASTERINGLIMITER_MIN_LOUDNESS 1
- #define FXMASTERINGLIMITER_MAX_LOUDNESS 1800
- #define FXMASTERINGLIMITER_DEFAULT_LOUDNESS 1000
- // Reverb parameter bounds (inclusive), used with XReverb:
- #define FXREVERB_MIN_DIFFUSION 0.0f
- #define FXREVERB_MAX_DIFFUSION 1.0f
- #define FXREVERB_DEFAULT_DIFFUSION 0.9f
- #define FXREVERB_MIN_ROOMSIZE 0.0001f
- #define FXREVERB_MAX_ROOMSIZE 1.0f
- #define FXREVERB_DEFAULT_ROOMSIZE 0.6f
- // Echo parameter bounds (inclusive), used with XEcho:
- #define FXECHO_MIN_WETDRYMIX 0.0f
- #define FXECHO_MAX_WETDRYMIX 1.0f
- #define FXECHO_DEFAULT_WETDRYMIX 0.5f
- #define FXECHO_MIN_FEEDBACK 0.0f
- #define FXECHO_MAX_FEEDBACK 1.0f
- #define FXECHO_DEFAULT_FEEDBACK 0.5f
- #define FXECHO_MIN_DELAY 1.0f
- #define FXECHO_MAX_DELAY 2000.0f
- #define FXECHO_DEFAULT_DELAY 500.0f
- //--------------<D-A-T-A---T-Y-P-E-S>---------------------------------------//
- #pragma pack(push, 1) // set packing alignment to ensure consistency across arbitrary build environments
- // EQ parameters (4 bands), used with IXAPOParameters::SetParameters:
- // The EQ supports only FLOAT32 audio foramts.
- // The framerate must be within [22000, 48000] Hz.
- typedef struct FXEQ_PARAMETERS {
- float FrequencyCenter0; // center frequency in Hz, band 0
- float Gain0; // boost/cut
- float Bandwidth0; // bandwidth, region of EQ is center frequency +/- bandwidth/2
- float FrequencyCenter1; // band 1
- float Gain1;
- float Bandwidth1;
- float FrequencyCenter2; // band 2
- float Gain2;
- float Bandwidth2;
- float FrequencyCenter3; // band 3
- float Gain3;
- float Bandwidth3;
- } FXEQ_PARAMETERS;
- // Mastering limiter parameters, used with IXAPOParameters::SetParameters:
- // The mastering limiter supports only FLOAT32 audio formats.
- typedef struct FXMASTERINGLIMITER_PARAMETERS {
- UINT32 Release; // release time (tuning factor with no specific units)
- UINT32 Loudness; // loudness target (threshold)
- } FXMASTERINGLIMITER_PARAMETERS;
- // Reverb parameters, used with IXAPOParameters::SetParameters:
- // The reverb supports only FLOAT32 audio formats with the following
- // channel configurations:
- // Input: Mono Output: Mono
- // Input: Stereo Output: Stereo
- typedef struct FXREVERB_PARAMETERS {
- float Diffusion; // diffusion
- float RoomSize; // room size
- } FXREVERB_PARAMETERS;
- // Echo parameters, used with IXAPOParameters::SetParameters:
- // The echo supports only FLOAT32 audio formats.
- typedef struct FXECHO_PARAMETERS {
- float WetDryMix; // ratio of wet (processed) signal to dry (original) signal
- float Feedback; // amount of output fed back into input
- float Delay; // delay (all channels) in milliseconds
- } FXECHO_PARAMETERS;
- //--------------<M-A-C-R-O-S>-----------------------------------------------//
- // function storage-class attribute and calltype
- #if defined(_XBOX) || !defined(FXDLL)
- #define FX_API_(type) EXTERN_C type STDAPIVCALLTYPE
- #else
- #if defined(FXEXPORT)
- #define FX_API_(type) EXTERN_C __declspec(dllexport) type STDAPIVCALLTYPE
- #else
- #define FX_API_(type) EXTERN_C __declspec(dllimport) type STDAPIVCALLTYPE
- #endif
- #endif
- #define FX_IMP_(type) type STDMETHODVCALLTYPE
- //--------------<F-U-N-C-T-I-O-N-S>-----------------------------------------//
- // creates instance of requested XAPO, use Release to free instance
- FX_API_(HRESULT) CreateFX (REFCLSID clsid, __deref_out IUnknown** pEffect);
- #pragma pack(pop) // revert packing alignment
- #endif // !defined(GUID_DEFS_ONLY)
- //---------------------------------<-EOF->----------------------------------//
|