Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 1 | pmbaty | 1 | /*-========================================================================-_ |
| 2 | | - XAPOFX - | |
||
| 3 | | Copyright (c) Microsoft Corporation. All rights reserved. | |
||
| 4 | |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| |
||
| 5 | |PROJECT: XAPOFX MODEL: Unmanaged User-mode | |
||
| 6 | |VERSION: 1.3 EXCEPT: No Exceptions | |
||
| 7 | |CLASS: N / A MINREQ: WinXP, Xbox360 | |
||
| 8 | |BASE: N / A DIALECT: MSC++ 14.00 | |
||
| 9 | |>------------------------------------------------------------------------<| |
||
| 10 | | DUTY: Cross-platform Audio Processing Objects | |
||
| 11 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ |
||
| 12 | NOTES: |
||
| 13 | 1. USE THE DEBUG DLL TO ENABLE PARAMETER VALIDATION VIA ASSERTS! |
||
| 14 | Here's how: |
||
| 15 | Copy XAPOFXDX_X.dll to where your application exists. |
||
| 16 | The debug DLL can be found under %WINDIR%\system32. |
||
| 17 | Rename XAPOFXDX_X.dll to XAPOFXX_X.dll to use the debug version. */ |
||
| 18 | |||
| 19 | #pragma once |
||
| 20 | //--------------<D-E-F-I-N-I-T-I-O-N-S>-------------------------------------// |
||
| 21 | #include "comdecl.h" // for DEFINE_CLSID |
||
| 22 | |||
| 23 | // FX class IDs |
||
| 24 | DEFINE_CLSID(FXEQ, A90BC001, E897, E897, 74, 39, 43, 55, 00, 00, 00, 00); |
||
| 25 | DEFINE_CLSID(FXMasteringLimiter, A90BC001, E897, E897, 74, 39, 43, 55, 00, 00, 00, 01); |
||
| 26 | DEFINE_CLSID(FXReverb, A90BC001, E897, E897, 74, 39, 43, 55, 00, 00, 00, 02); |
||
| 27 | DEFINE_CLSID(FXEcho, A90BC001, E897, E897, 74, 39, 43, 55, 00, 00, 00, 03); |
||
| 28 | |||
| 29 | |||
| 30 | #if !defined(GUID_DEFS_ONLY) // ignore rest if only GUID definitions requested |
||
| 31 | #if defined(_XBOX) // general windows and COM declarations |
||
| 32 | #include <xtl.h> |
||
| 33 | #include <xobjbase.h> |
||
| 34 | #else |
||
| 35 | #include <windows.h> |
||
| 36 | #include <objbase.h> |
||
| 37 | #endif |
||
| 38 | #include <float.h> // float bounds |
||
| 39 | |||
| 40 | |||
| 41 | // EQ parameter bounds (inclusive), used with XEQ: |
||
| 42 | #define FXEQ_MIN_FRAMERATE 22000 |
||
| 43 | #define FXEQ_MAX_FRAMERATE 48000 |
||
| 44 | |||
| 45 | #define FXEQ_MIN_FREQUENCY_CENTER 20.0f |
||
| 46 | #define FXEQ_MAX_FREQUENCY_CENTER 20000.0f |
||
| 47 | #define FXEQ_DEFAULT_FREQUENCY_CENTER_0 100.0f // band 0 |
||
| 48 | #define FXEQ_DEFAULT_FREQUENCY_CENTER_1 800.0f // band 1 |
||
| 49 | #define FXEQ_DEFAULT_FREQUENCY_CENTER_2 2000.0f // band 2 |
||
| 50 | #define FXEQ_DEFAULT_FREQUENCY_CENTER_3 10000.0f // band 3 |
||
| 51 | |||
| 52 | #define FXEQ_MIN_GAIN 0.126f // -18dB |
||
| 53 | #define FXEQ_MAX_GAIN 7.94f // +18dB |
||
| 54 | #define FXEQ_DEFAULT_GAIN 1.0f // 0dB change, all bands |
||
| 55 | |||
| 56 | #define FXEQ_MIN_BANDWIDTH 0.1f |
||
| 57 | #define FXEQ_MAX_BANDWIDTH 2.0f |
||
| 58 | #define FXEQ_DEFAULT_BANDWIDTH 1.0f // all bands |
||
| 59 | |||
| 60 | |||
| 61 | // Mastering limiter parameter bounds (inclusive), used with XMasteringLimiter: |
||
| 62 | #define FXMASTERINGLIMITER_MIN_RELEASE 1 |
||
| 63 | #define FXMASTERINGLIMITER_MAX_RELEASE 20 |
||
| 64 | #define FXMASTERINGLIMITER_DEFAULT_RELEASE 6 |
||
| 65 | |||
| 66 | #define FXMASTERINGLIMITER_MIN_LOUDNESS 1 |
||
| 67 | #define FXMASTERINGLIMITER_MAX_LOUDNESS 1800 |
||
| 68 | #define FXMASTERINGLIMITER_DEFAULT_LOUDNESS 1000 |
||
| 69 | |||
| 70 | |||
| 71 | // Reverb parameter bounds (inclusive), used with XReverb: |
||
| 72 | #define FXREVERB_MIN_DIFFUSION 0.0f |
||
| 73 | #define FXREVERB_MAX_DIFFUSION 1.0f |
||
| 74 | #define FXREVERB_DEFAULT_DIFFUSION 0.9f |
||
| 75 | |||
| 76 | #define FXREVERB_MIN_ROOMSIZE 0.0001f |
||
| 77 | #define FXREVERB_MAX_ROOMSIZE 1.0f |
||
| 78 | #define FXREVERB_DEFAULT_ROOMSIZE 0.6f |
||
| 79 | |||
| 80 | |||
| 81 | // Echo parameter bounds (inclusive), used with XEcho: |
||
| 82 | #define FXECHO_MIN_WETDRYMIX 0.0f |
||
| 83 | #define FXECHO_MAX_WETDRYMIX 1.0f |
||
| 84 | #define FXECHO_DEFAULT_WETDRYMIX 0.5f |
||
| 85 | |||
| 86 | #define FXECHO_MIN_FEEDBACK 0.0f |
||
| 87 | #define FXECHO_MAX_FEEDBACK 1.0f |
||
| 88 | #define FXECHO_DEFAULT_FEEDBACK 0.5f |
||
| 89 | |||
| 90 | #define FXECHO_MIN_DELAY 1.0f |
||
| 91 | #define FXECHO_MAX_DELAY 2000.0f |
||
| 92 | #define FXECHO_DEFAULT_DELAY 500.0f |
||
| 93 | |||
| 94 | |||
| 95 | //--------------<D-A-T-A---T-Y-P-E-S>---------------------------------------// |
||
| 96 | #pragma pack(push, 1) // set packing alignment to ensure consistency across arbitrary build environments |
||
| 97 | |||
| 98 | |||
| 99 | // EQ parameters (4 bands), used with IXAPOParameters::SetParameters: |
||
| 100 | // The EQ supports only FLOAT32 audio foramts. |
||
| 101 | // The framerate must be within [22000, 48000] Hz. |
||
| 102 | typedef struct FXEQ_PARAMETERS { |
||
| 103 | float FrequencyCenter0; // center frequency in Hz, band 0 |
||
| 104 | float Gain0; // boost/cut |
||
| 105 | float Bandwidth0; // bandwidth, region of EQ is center frequency +/- bandwidth/2 |
||
| 106 | float FrequencyCenter1; // band 1 |
||
| 107 | float Gain1; |
||
| 108 | float Bandwidth1; |
||
| 109 | float FrequencyCenter2; // band 2 |
||
| 110 | float Gain2; |
||
| 111 | float Bandwidth2; |
||
| 112 | float FrequencyCenter3; // band 3 |
||
| 113 | float Gain3; |
||
| 114 | float Bandwidth3; |
||
| 115 | } FXEQ_PARAMETERS; |
||
| 116 | |||
| 117 | |||
| 118 | // Mastering limiter parameters, used with IXAPOParameters::SetParameters: |
||
| 119 | // The mastering limiter supports only FLOAT32 audio formats. |
||
| 120 | typedef struct FXMASTERINGLIMITER_PARAMETERS { |
||
| 121 | UINT32 Release; // release time (tuning factor with no specific units) |
||
| 122 | UINT32 Loudness; // loudness target (threshold) |
||
| 123 | } FXMASTERINGLIMITER_PARAMETERS; |
||
| 124 | |||
| 125 | |||
| 126 | // Reverb parameters, used with IXAPOParameters::SetParameters: |
||
| 127 | // The reverb supports only FLOAT32 audio formats with the following |
||
| 128 | // channel configurations: |
||
| 129 | // Input: Mono Output: Mono |
||
| 130 | // Input: Stereo Output: Stereo |
||
| 131 | typedef struct FXREVERB_PARAMETERS { |
||
| 132 | float Diffusion; // diffusion |
||
| 133 | float RoomSize; // room size |
||
| 134 | } FXREVERB_PARAMETERS; |
||
| 135 | |||
| 136 | |||
| 137 | // Echo parameters, used with IXAPOParameters::SetParameters: |
||
| 138 | // The echo supports only FLOAT32 audio formats. |
||
| 139 | typedef struct FXECHO_PARAMETERS { |
||
| 140 | float WetDryMix; // ratio of wet (processed) signal to dry (original) signal |
||
| 141 | float Feedback; // amount of output fed back into input |
||
| 142 | float Delay; // delay (all channels) in milliseconds |
||
| 143 | } FXECHO_PARAMETERS; |
||
| 144 | |||
| 145 | |||
| 146 | //--------------<M-A-C-R-O-S>-----------------------------------------------// |
||
| 147 | // function storage-class attribute and calltype |
||
| 148 | #if defined(_XBOX) || !defined(FXDLL) |
||
| 149 | #define FX_API_(type) EXTERN_C type STDAPIVCALLTYPE |
||
| 150 | #else |
||
| 151 | #if defined(FXEXPORT) |
||
| 152 | #define FX_API_(type) EXTERN_C __declspec(dllexport) type STDAPIVCALLTYPE |
||
| 153 | #else |
||
| 154 | #define FX_API_(type) EXTERN_C __declspec(dllimport) type STDAPIVCALLTYPE |
||
| 155 | #endif |
||
| 156 | #endif |
||
| 157 | #define FX_IMP_(type) type STDMETHODVCALLTYPE |
||
| 158 | |||
| 159 | |||
| 160 | //--------------<F-U-N-C-T-I-O-N-S>-----------------------------------------// |
||
| 161 | // creates instance of requested XAPO, use Release to free instance |
||
| 162 | FX_API_(HRESULT) CreateFX (REFCLSID clsid, __deref_out IUnknown** pEffect); |
||
| 163 | |||
| 164 | |||
| 165 | #pragma pack(pop) // revert packing alignment |
||
| 166 | #endif // !defined(GUID_DEFS_ONLY) |
||
| 167 | //---------------------------------<-EOF->----------------------------------// |