OpenShot Library | libopenshot-audio 0.2.0
juce_AudioChannelSet.h
1
2/** @weakgroup juce_audio_basics-buffers
3 * @{
4 */
5/*
6 ==============================================================================
7
8 This file is part of the JUCE library.
9 Copyright (c) 2017 - ROLI Ltd.
10
11 JUCE is an open source library subject to commercial or open-source
12 licensing.
13
14 The code included in this file is provided under the terms of the ISC license
15 http://www.isc.org/downloads/software-support-policy/isc-license. Permission
16 To use, copy, modify, and/or distribute this software for any purpose with or
17 without fee is hereby granted provided that the above copyright notice and
18 this permission notice appear in all copies.
19
20 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
21 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
22 DISCLAIMED.
23
24 ==============================================================================
25*/
26
27namespace juce
28{
29
30//==============================================================================
31/**
32 Represents a set of audio channel types.
33
34 For example, you might have a set of left + right channels, which is a stereo
35 channel set. It is a collection of values from the AudioChannelSet::ChannelType
36 enum, where each type may only occur once within the set.
37
38 The documentation below lists which AudioChannelSet corresponds to which native
39 layouts used by AAX, VST2/VST3 and CoreAudio/AU. The layout tags in CoreAudio
40 are particularly confusing. For example, the layout which is labeled as "7.1 SDDS"
41 in Logic Pro, corresponds to CoreAudio/AU's kAudioChannelLayoutTag_DTS_7_0 tag, whereas
42 AAX's DTS 7.1 Layout corresponds to CoreAudio/AU's
43 kAudioChannelLayoutTag_MPEG_7_1_A format, etc. Please do not use the CoreAudio tag
44 as an indication to the actual layout of the speakers.
45
46 @see Bus
47
48 @tags{Audio}
49*/
51{
52public:
53 /** Creates an empty channel set.
54 You can call addChannel to add channels to the set.
55 */
56 AudioChannelSet() = default;
57
58 /** Creates a zero-channel set which can be used to indicate that a
59 bus is disabled. */
60 static AudioChannelSet JUCE_CALLTYPE disabled();
61
62 //==============================================================================
63 /** Creates a one-channel mono set (centre).
64
65 Is equivalent to: kMonoAAX (VST), AAX_eStemFormat_Mono (AAX), kAudioChannelLayoutTag_Mono (CoreAudio)
66 */
67 static AudioChannelSet JUCE_CALLTYPE mono();
68
69
70 /** Creates a set containing a stereo set (left, right).
71
72 Is equivalent to: kStereo (VST), AAX_eStemFormat_Stereo (AAX), kAudioChannelLayoutTag_Stereo (CoreAudio)
73 */
74 static AudioChannelSet JUCE_CALLTYPE stereo();
75
76
77 //==============================================================================
78 /** Creates a set containing an LCR set (left, right, centre).
79
80 Is equivalent to: k30Cine (VST), AAX_eStemFormat_LCR (AAX), kAudioChannelLayoutTag_MPEG_3_0_A (CoreAudio)
81
82 This format is referred to as "LRC" in Cubase.
83 This format is referred to as "LCR" in Pro Tools.
84 */
85 static AudioChannelSet JUCE_CALLTYPE createLCR();
86
87
88 /** Creates a set containing an LRS set (left, right, surround).
89
90 Is equivalent to: k30Music (VST), n/a (AAX), kAudioChannelLayoutTag_ITU_2_1 (CoreAudio)
91
92 This format is referred to as "LRS" in Cubase.
93 */
94 static AudioChannelSet JUCE_CALLTYPE createLRS();
95
96
97 /** Creates a set containing an LCRS set (left, right, centre, surround).
98
99 Is equivalent to: k40Cine (VST), AAX_eStemFormat_LCRS (AAX), kAudioChannelLayoutTag_MPEG_4_0_A (CoreAudio)
100
101 This format is referred to as "LCRS (Pro Logic)" in Logic Pro.
102 This format is referred to as "LRCS" in Cubase.
103 This format is referred to as "LCRS" in Pro Tools.
104 */
105 static AudioChannelSet JUCE_CALLTYPE createLCRS();
106
107
108 //==============================================================================
109 /** Creates a set for a 5.0 surround setup (left, right, centre, leftSurround, rightSurround).
110
111 Is equivalent to: k50 (VST), AAX_eStemFormat_5_0 (AAX), kAudioChannelLayoutTag_MPEG_5_0_A (CoreAudio)
112
113 This format is referred to as "5.0" in Cubase.
114 This format is referred to as "5.0" in Pro Tools.
115 */
116 static AudioChannelSet JUCE_CALLTYPE create5point0();
117
118
119 /** Creates a set for a 5.1 surround setup (left, right, centre, leftSurround, rightSurround, LFE).
120
121 Is equivalent to: k51 (VST), AAX_eStemFormat_5_1 (AAX), kAudioChannelLayoutTag_MPEG_5_1_A (CoreAudio)
122
123 This format is referred to as "5.1 (ITU 775)" in Logic Pro.
124 This format is referred to as "5.1" in Cubase.
125 This format is referred to as "5.1" in Pro Tools.
126 */
127 static AudioChannelSet JUCE_CALLTYPE create5point1();
128
129
130 /** Creates a set for a 6.0 Cine surround setup (left, right, centre, leftSurround, rightSurround, centreSurround).
131
132 Is equivalent to: k60Cine (VST), AAX_eStemFormat_6_0 (AAX), kAudioChannelLayoutTag_AudioUnit_6_0 (CoreAudio)
133
134 Logic Pro incorrectly uses this for the surround format labeled "6.1 (ES/EX)".
135 This format is referred to as "6.0 Cine" in Cubase.
136 This format is referred to as "6.0" in Pro Tools.
137 */
138 static AudioChannelSet JUCE_CALLTYPE create6point0();
139
140
141 /** Creates a set for a 6.1 Cine surround setup (left, right, centre, leftSurround, rightSurround, centreSurround, LFE).
142
143 Is equivalent to: k61Cine (VST), AAX_eStemFormat_6_1 (AAX), kAudioChannelLayoutTag_MPEG_6_1_A (CoreAudio)
144
145 This format is referred to as "6.1" in Pro Tools.
146 */
147 static AudioChannelSet JUCE_CALLTYPE create6point1();
148
149
150 /** Creates a set for a 6.0 Music surround setup (left, right, leftSurround, rightSurround, leftSurroundSide, rightSurroundSide).
151
152 Is equivalent to: k60Music (VST), n/a (AAX), kAudioChannelLayoutTag_DTS_6_0_A (CoreAudio)
153
154 This format is referred to as "6.0 Music" in Cubase.
155 */
156 static AudioChannelSet JUCE_CALLTYPE create6point0Music();
157
158
159 /** Creates a set for a 6.0 Music surround setup (left, right, leftSurround, rightSurround, leftSurroundSide, rightSurroundSide, LFE).
160
161 Is equivalent to: k61Music (VST), n/a (AAX), kAudioChannelLayoutTag_DTS_6_1_A (CoreAudio)
162 */
163 static AudioChannelSet JUCE_CALLTYPE create6point1Music();
164
165
166 /** Creates a set for a DTS 7.0 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear).
167
168 Is equivalent to: k70Music (VST), AAX_eStemFormat_7_0_DTS (AAX), kAudioChannelLayoutTag_AudioUnit_7_0 (CoreAudio)
169
170 This format is referred to as "7.0" in Pro Tools.
171 */
172 static AudioChannelSet JUCE_CALLTYPE create7point0();
173
174
175 /** Creates a set for a SDDS 7.0 surround setup (left, right, centre, leftSurround, rightSurround, leftCentre, rightCentre).
176
177 Is equivalent to: k70Cine (VST), AAX_eStemFormat_7_0_SDDS (AAX), kAudioChannelLayoutTag_AudioUnit_7_0_Front (CoreAudio)
178
179 This format is referred to as "7.0 SDDS" in Pro Tools.
180 */
181 static AudioChannelSet JUCE_CALLTYPE create7point0SDDS();
182
183
184 /** Creates a set for a DTS 7.1 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, LFE).
185
186 Is equivalent to: k71CineSideFill (VST), AAX_eStemFormat_7_1_DTS (AAX), kAudioChannelLayoutTag_MPEG_7_1_C/kAudioChannelLayoutTag_ITU_3_4_1 (CoreAudio)
187
188 This format is referred to as "7.1 (3/4.1)" in Logic Pro.
189 This format is referred to as "7.1" in Pro Tools.
190 */
191 static AudioChannelSet JUCE_CALLTYPE create7point1();
192
193
194 /** Creates a set for a 7.1 surround setup (left, right, centre, leftSurround, rightSurround, leftCentre, rightCentre, LFE).
195
196 Is equivalent to: k71Cine (VST), AAX_eStemFormat_7_1_SDDS (AAX), kAudioChannelLayoutTag_MPEG_7_1_A (CoreAudio)
197
198 This format is referred to as "7.1 (SDDS)" in Logic Pro.
199 This format is referred to as "7.1 SDDS" in Pro Tools.
200 */
201 static AudioChannelSet JUCE_CALLTYPE create7point1SDDS();
202
203 /** Creates a set for Dolby Atmos 7.0.2 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, topSideLeft, topSideRight).
204
205 Is equivalent to: n/a (VST), AAX_eStemFormat_7_0_2 (AAX), n/a (CoreAudio)
206 */
207 static AudioChannelSet JUCE_CALLTYPE create7point0point2();
208
209 /** Creates a set for Dolby Atmos 7.1.2 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, LFE, topSideLeft, topSideRight).
210
211 Is equivalent to: k71_2 (VST), AAX_eStemFormat_7_1_2 (AAX), n/a (CoreAudio)
212 */
213 static AudioChannelSet JUCE_CALLTYPE create7point1point2();
214
215
216 //==============================================================================
217 /** Creates a set for quadraphonic surround setup (left, right, leftSurround, rightSurround)
218
219 Is equivalent to: k40Music (VST), AAX_eStemFormat_Quad (AAX), kAudioChannelLayoutTag_Quadraphonic (CoreAudio)
220
221 This format is referred to as "Quadraphonic" in Logic Pro.
222 This format is referred to as "Quadro" in Cubase.
223 This format is referred to as "Quad" in Pro Tools.
224 */
225 static AudioChannelSet JUCE_CALLTYPE quadraphonic();
226
227
228 /** Creates a set for pentagonal surround setup (left, right, centre, leftSurroundRear, rightSurroundRear).
229
230 Is equivalent to: n/a (VST), n/a (AAX), kAudioChannelLayoutTag_Pentagonal (CoreAudio)
231 */
232 static AudioChannelSet JUCE_CALLTYPE pentagonal();
233
234
235 /** Creates a set for hexagonal surround setup (left, right, leftSurroundRear, rightSurroundRear, centre, surroundCentre).
236
237 Is equivalent to: n/a (VST), n/a (AAX), kAudioChannelLayoutTag_Hexagonal (CoreAudio)
238 */
239 static AudioChannelSet JUCE_CALLTYPE hexagonal();
240
241
242 /** Creates a set for octagonal surround setup (left, right, leftSurround, rightSurround, centre, centreSurround, wideLeft, wideRight).
243
244 Is equivalent to: n/a (VST), n/a (AAX), kAudioChannelLayoutTag_Octagonal (CoreAudio)
245 */
246 static AudioChannelSet JUCE_CALLTYPE octagonal();
247
248 //==============================================================================
249 /** Creates a set for ACN, SN3D normalised ambisonic surround setups with a given order.
250
251 Is equivalent to: kAmbiXXXOrderACN (VST), AAX_eStemFormat_Ambi_XXX_ACN (AAX), kAudioChannelLayoutTag_HOA_ACN_SN3D (CoreAudio)
252 */
253 static AudioChannelSet JUCE_CALLTYPE ambisonic (int order = 1);
254
255 /** Returns the order of the ambisonic layout represented by this AudioChannelSet. If the
256 AudioChannelSet is not an ambisonic layout, then this method will return -1.
257 */
258 int getAmbisonicOrder() const;
259
260 //==============================================================================
261 /** Creates a set of untyped discrete channels. */
262 static AudioChannelSet JUCE_CALLTYPE discreteChannels (int numChannels);
263
264 /** Create a canonical channel set for a given number of channels.
265 For example, numChannels = 1 will return mono, numChannels = 2 will return stereo, etc. */
266 static AudioChannelSet JUCE_CALLTYPE canonicalChannelSet (int numChannels);
267
268 /** Create a channel set for a given number of channels which is non-discrete.
269 If numChannels is larger than the number of channels of the surround format
270 with the maximum amount of channels (currently 7.1 Surround), then this
271 function returns an empty set.*/
272 static AudioChannelSet JUCE_CALLTYPE namedChannelSet (int numChannels);
273
274 /** Return an array of channel sets which have a given number of channels */
275 static Array<AudioChannelSet> JUCE_CALLTYPE channelSetsWithNumberOfChannels (int numChannels);
276
277 //==============================================================================
278 /** Represents different audio channel types. */
280 {
281 unknown = 0, /**< Unknown channel type. */
282
283 //==============================================================================
284 left = 1, /**< L channel. */
285 right = 2, /**< R channel. */
286 centre = 3, /**< C channel. (Sometimes M for mono) */
287
288 //==============================================================================
289 LFE = 4, /**< LFE channel. */
290 leftSurround = 5, /**< Ls channel. */
291 rightSurround = 6, /**< Rs channel. */
292 leftCentre = 7, /**< Lc (AAX/VST), Lc used as Lss in AU for most layouts. */
293 rightCentre = 8, /**< Rc (AAX/VST), Rc used as Rss in AU for most layouts. */
294 centreSurround = 9, /**< Cs/S channel. */
295 surround = centreSurround, /**< Same as Centre Surround channel. */
296 leftSurroundSide = 10, /**< Lss (AXX), Side Left "Sl" (VST), Left Centre "LC" (AU) channel. */
297 rightSurroundSide = 11, /**< Rss (AXX), Side right "Sr" (VST), Right Centre "Rc" (AU) channel. */
298 topMiddle = 12, /**< Top Middle channel. */
299 topFrontLeft = 13, /**< Top Front Left channel. */
300 topFrontCentre = 14, /**< Top Front Centre channel. */
301 topFrontRight = 15, /**< Top Front Right channel. */
302 topRearLeft = 16, /**< Top Rear Left channel. */
303 topRearCentre = 17, /**< Top Rear Centre channel. */
304 topRearRight = 18, /**< Top Rear Right channel. */
305 LFE2 = 19, /**< Second LFE channel. */
306 leftSurroundRear = 20, /**< Lsr (AAX), Lcs (VST), Rls (AU) channel. */
307 rightSurroundRear = 21, /**< Rsr (AAX), Rcs (VST), Rrs (AU) channel. */
308 wideLeft = 22, /**< Wide Left channel. */
309 wideRight = 23, /**< Wide Right channel. */
310
311 //==============================================================================
312 // Used by Dolby Atmos 7.0.2 and 7.1.2
313 topSideLeft = 28, /**< Lts (AAX), Tsl (VST) channel for Dolby Atmos. */
314 topSideRight = 29, /**< Rts (AAX), Tsr (VST) channel for Dolby Atmos. */
315
316 //==============================================================================
317 // Ambisonic ACN formats - all channels are SN3D normalised
318
319 // zero-th and first-order ambisonic ACN
320 ambisonicACN0 = 24, /**< Zero-th ambisonic channel number 0. */
321 ambisonicACN1 = 25, /**< First-order ambisonic channel number 1. */
322 ambisonicACN2 = 26, /**< First-order ambisonic channel number 2. */
323 ambisonicACN3 = 27, /**< First-order ambisonic channel number 3. */
324
325 // second-order ambisonic
326 ambisonicACN4 = 30, /**< Second-order ambisonic channel number 4. */
327 ambisonicACN5 = 31, /**< Second-order ambisonic channel number 5. */
328 ambisonicACN6 = 32, /**< Second-order ambisonic channel number 6. */
329 ambisonicACN7 = 33, /**< Second-order ambisonic channel number 7. */
330 ambisonicACN8 = 34, /**< Second-order ambisonic channel number 8. */
331
332 // third-order ambisonic
333 ambisonicACN9 = 35, /**< Third-order ambisonic channel number 9. */
334 ambisonicACN10 = 36, /**< Third-order ambisonic channel number 10. */
335 ambisonicACN11 = 37, /**< Third-order ambisonic channel number 11. */
336 ambisonicACN12 = 38, /**< Third-order ambisonic channel number 12. */
337 ambisonicACN13 = 39, /**< Third-order ambisonic channel number 13. */
338 ambisonicACN14 = 40, /**< Third-order ambisonic channel number 14. */
339 ambisonicACN15 = 41, /**< Third-order ambisonic channel number 15. */
340
341 // fourth-order ambisonic
342 ambisonicACN16 = 42, /**< Fourth-order ambisonic channel number 16. */
343 ambisonicACN17 = 43, /**< Fourth-order ambisonic channel number 17. */
344 ambisonicACN18 = 44, /**< Fourth-order ambisonic channel number 18. */
345 ambisonicACN19 = 45, /**< Fourth-order ambisonic channel number 19. */
346 ambisonicACN20 = 46, /**< Fourth-order ambisonic channel number 20. */
347 ambisonicACN21 = 47, /**< Fourth-order ambisonic channel number 21. */
348 ambisonicACN22 = 48, /**< Fourth-order ambisonic channel number 22. */
349 ambisonicACN23 = 49, /**< Fourth-order ambisonic channel number 23. */
350 ambisonicACN24 = 50, /**< Fourth-order ambisonic channel number 24. */
351
352 // fifth-order ambisonic
353 ambisonicACN25 = 51, /**< Fifth-order ambisonic channel number 25. */
354 ambisonicACN26 = 52, /**< Fifth-order ambisonic channel number 26. */
355 ambisonicACN27 = 53, /**< Fifth-order ambisonic channel number 27. */
356 ambisonicACN28 = 54, /**< Fifth-order ambisonic channel number 28. */
357 ambisonicACN29 = 55, /**< Fifth-order ambisonic channel number 29. */
358 ambisonicACN30 = 56, /**< Fifth-order ambisonic channel number 30. */
359 ambisonicACN31 = 57, /**< Fifth-order ambisonic channel number 31. */
360 ambisonicACN32 = 58, /**< Fifth-order ambisonic channel number 32. */
361 ambisonicACN33 = 59, /**< Fifth-order ambisonic channel number 33. */
362 ambisonicACN34 = 60, /**< Fifth-order ambisonic channel number 34. */
363 ambisonicACN35 = 61, /**< Fifth-order ambisonic channel number 35. */
364
365 //==============================================================================
366 ambisonicW = ambisonicACN0, /**< Same as zero-th ambisonic channel number 0. */
367 ambisonicX = ambisonicACN3, /**< Same as first-order ambisonic channel number 3. */
368 ambisonicY = ambisonicACN1, /**< Same as first-order ambisonic channel number 1. */
369 ambisonicZ = ambisonicACN2, /**< Same as first-order ambisonic channel number 2. */
370
371 //==============================================================================
372 bottomFrontLeft = 62, /**< Bottom Front Left (Bfl) */
373 bottomFrontCentre = 63, /**< Bottom Front Centre (Bfc) */
374 bottomFrontRight = 64, /**< Bottom Front Right (Bfr) */
375
376 proxymityLeft = 65, /**< Proximity Left (Pl) */
377 proximityRight = 66, /**< Proximity Right (Pr) */
378
379 bottomSideLeft = 67, /**< Bottom Side Left (Bsl) */
380 bottomSideRight = 68, /**< Bottom Side Right (Bsr) */
381 bottomRearLeft = 69, /**< Bottom Rear Left (Brl) */
382 bottomRearCentre = 70, /**< Bottom Rear Center (Brc) */
383 bottomRearRight = 71, /**< Bottom Rear Right (Brr) */
384
385 //==============================================================================
386 discreteChannel0 = 128 /**< Non-typed individual channels are indexed upwards from this value. */
387 };
388
389 /** Returns the name of a given channel type. For example, this method may return "Surround Left". */
390 static String JUCE_CALLTYPE getChannelTypeName (ChannelType);
391
392 /** Returns the abbreviated name of a channel type. For example, this method may return "Ls". */
393 static String JUCE_CALLTYPE getAbbreviatedChannelTypeName (ChannelType);
394
395 /** Returns the channel type from an abbreviated name. */
396 static ChannelType JUCE_CALLTYPE getChannelTypeFromAbbreviation (const String& abbreviation);
397
398 //==============================================================================
399 enum
400 {
401 maxChannelsOfNamedLayout = 36
402 };
403
404 /** Adds a channel to the set. */
405 void addChannel (ChannelType newChannelType);
406
407 /** Removes a channel from the set. */
408 void removeChannel (ChannelType newChannelType);
409
410 /** Returns the number of channels in the set. */
411 int size() const noexcept;
412
413 /** Returns true if there are no channels in the set. */
414 bool isDisabled() const noexcept { return size() == 0; }
415
416 /** Returns an array of all the types in this channel set. */
417 Array<ChannelType> getChannelTypes() const;
418
419 /** Returns the type of one of the channels in the set, by index. */
420 ChannelType getTypeOfChannel (int channelIndex) const noexcept;
421
422 /** Returns the index for a particular channel-type.
423 Will return -1 if the this set does not contain a channel of this type. */
424 int getChannelIndexForType (ChannelType type) const noexcept;
425
426 /** Returns a string containing a whitespace-separated list of speaker types
427 corresponding to each channel. For example in a 5.1 arrangement,
428 the string may be "L R C Lfe Ls Rs". If the speaker arrangement is unknown,
429 the returned string will be empty.*/
430 String getSpeakerArrangementAsString() const;
431
432 /** Returns an AudioChannelSet from a string returned by getSpeakerArrangementAsString
433
434 @see getSpeakerArrangementAsString */
435 static AudioChannelSet fromAbbreviatedString (const String& set);
436
437 /** Returns the description of the current layout. For example, this method may return
438 "Quadraphonic". Note that the returned string may not be unique. */
439 String getDescription() const;
440
441 /** Returns if this is a channel layout made-up of discrete channels. */
442 bool isDiscreteLayout() const noexcept;
443
444 /** Intersect two channel layouts. */
445 void intersect (const AudioChannelSet& other) { channels &= other.channels; }
446
447 /** Creates a channel set for a list of channel types. This function will assert
448 if you supply a duplicate channel.
449
450 Note that this method ignores the order in which the channels are given, i.e.
451 two arrays with the same elements but in a different order will still result
452 in the same channel set.
453 */
454 static AudioChannelSet JUCE_CALLTYPE channelSetWithChannels (const Array<ChannelType>&);
455
456 //==============================================================================
457 // Conversion between wave and juce channel layout identifiers
458
459 /** Create an AudioChannelSet from a WAVEFORMATEXTENSIBLE channelMask (typically used
460 in .wav files). */
461 static AudioChannelSet JUCE_CALLTYPE fromWaveChannelMask (int32 dwChannelMask);
462
463 /** Returns a WAVEFORMATEXTENSIBLE channelMask representation (typically used in .wav
464 files) of the receiver.
465
466 Returns -1 if the receiver cannot be represented in a WAVEFORMATEXTENSIBLE channelMask
467 representation.
468 */
469 int32 getWaveChannelMask() const noexcept;
470
471 //==============================================================================
472 bool operator== (const AudioChannelSet&) const noexcept;
473 bool operator!= (const AudioChannelSet&) const noexcept;
474 bool operator< (const AudioChannelSet&) const noexcept;
475
476private:
477 //==============================================================================
478 BigInteger channels;
479
480 //==============================================================================
481 explicit AudioChannelSet (uint32);
482 explicit AudioChannelSet (const Array<ChannelType>&);
483
484 //==============================================================================
485 static int JUCE_CALLTYPE getAmbisonicOrderForNumChannels (int);
486};
487
488} // namespace juce
489
490/** @}*/
Holds a resizable array of primitive or copy-by-value objects.
Definition juce_Array.h:60
Represents a set of audio channel types.
AudioChannelSet()=default
Creates an empty channel set.
ChannelType
Represents different audio channel types.
An arbitrarily large integer class.
The JUCE String class!
Definition juce_String.h:43
#define JUCE_API
This macro is added to all JUCE public class declarations.