-
Notifications
You must be signed in to change notification settings - Fork 3
/
XAPOFX.h
167 lines (132 loc) · 6.76 KB
/
XAPOFX.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*-========================================================================-_
| - 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->----------------------------------//