497 lines
24 KiB
C
497 lines
24 KiB
C
|
/*
|
||
|
==============================================================================
|
||
|
|
||
|
This file is part of the JUCE library.
|
||
|
Copyright (c) 2020 - Raw Material Software Limited
|
||
|
|
||
|
JUCE is an open source library subject to commercial or open-source
|
||
|
licensing.
|
||
|
|
||
|
The code included in this file is provided under the terms of the ISC license
|
||
|
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||
|
To use, copy, modify, and/or distribute this software for any purpose with or
|
||
|
without fee is hereby granted provided that the above copyright notice and
|
||
|
this permission notice appear in all copies.
|
||
|
|
||
|
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||
|
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||
|
DISCLAIMED.
|
||
|
|
||
|
==============================================================================
|
||
|
*/
|
||
|
|
||
|
namespace juce
|
||
|
{
|
||
|
|
||
|
//==============================================================================
|
||
|
/**
|
||
|
Represents a set of audio channel types.
|
||
|
|
||
|
For example, you might have a set of left + right channels, which is a stereo
|
||
|
channel set. It is a collection of values from the AudioChannelSet::ChannelType
|
||
|
enum, where each type may only occur once within the set.
|
||
|
|
||
|
The documentation below lists which AudioChannelSet corresponds to which native
|
||
|
layouts used by AAX, VST2/VST3 and CoreAudio/AU. The layout tags in CoreAudio
|
||
|
are particularly confusing. For example, the layout which is labeled as "7.1 SDDS"
|
||
|
in Logic Pro, corresponds to CoreAudio/AU's kAudioChannelLayoutTag_DTS_7_0 tag, whereas
|
||
|
AAX's DTS 7.1 Layout corresponds to CoreAudio/AU's
|
||
|
kAudioChannelLayoutTag_MPEG_7_1_A format, etc. Please do not use the CoreAudio tag
|
||
|
as an indication to the actual layout of the speakers.
|
||
|
|
||
|
@see Bus
|
||
|
|
||
|
@tags{Audio}
|
||
|
*/
|
||
|
class JUCE_API AudioChannelSet
|
||
|
{
|
||
|
public:
|
||
|
/** Creates an empty channel set.
|
||
|
You can call addChannel to add channels to the set.
|
||
|
*/
|
||
|
AudioChannelSet() = default;
|
||
|
|
||
|
/** Creates a zero-channel set which can be used to indicate that a
|
||
|
bus is disabled. */
|
||
|
static AudioChannelSet JUCE_CALLTYPE disabled();
|
||
|
|
||
|
//==============================================================================
|
||
|
/** Creates a one-channel mono set (centre).
|
||
|
|
||
|
Is equivalent to: kMonoAAX (VST), AAX_eStemFormat_Mono (AAX), kAudioChannelLayoutTag_Mono (CoreAudio)
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE mono();
|
||
|
|
||
|
|
||
|
/** Creates a set containing a stereo set (left, right).
|
||
|
|
||
|
Is equivalent to: kStereo (VST), AAX_eStemFormat_Stereo (AAX), kAudioChannelLayoutTag_Stereo (CoreAudio)
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE stereo();
|
||
|
|
||
|
|
||
|
//==============================================================================
|
||
|
/** Creates a set containing an LCR set (left, right, centre).
|
||
|
|
||
|
Is equivalent to: k30Cine (VST), AAX_eStemFormat_LCR (AAX), kAudioChannelLayoutTag_MPEG_3_0_A (CoreAudio)
|
||
|
|
||
|
This format is referred to as "LRC" in Cubase.
|
||
|
This format is referred to as "LCR" in Pro Tools.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE createLCR();
|
||
|
|
||
|
|
||
|
/** Creates a set containing an LRS set (left, right, surround).
|
||
|
|
||
|
Is equivalent to: k30Music (VST), n/a (AAX), kAudioChannelLayoutTag_ITU_2_1 (CoreAudio)
|
||
|
|
||
|
This format is referred to as "LRS" in Cubase.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE createLRS();
|
||
|
|
||
|
|
||
|
/** Creates a set containing an LCRS set (left, right, centre, surround).
|
||
|
|
||
|
Is equivalent to: k40Cine (VST), AAX_eStemFormat_LCRS (AAX), kAudioChannelLayoutTag_MPEG_4_0_A (CoreAudio)
|
||
|
|
||
|
This format is referred to as "LCRS (Pro Logic)" in Logic Pro.
|
||
|
This format is referred to as "LRCS" in Cubase.
|
||
|
This format is referred to as "LCRS" in Pro Tools.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE createLCRS();
|
||
|
|
||
|
|
||
|
//==============================================================================
|
||
|
/** Creates a set for a 5.0 surround setup (left, right, centre, leftSurround, rightSurround).
|
||
|
|
||
|
Is equivalent to: k50 (VST), AAX_eStemFormat_5_0 (AAX), kAudioChannelLayoutTag_MPEG_5_0_A (CoreAudio)
|
||
|
|
||
|
This format is referred to as "5.0" in Cubase.
|
||
|
This format is referred to as "5.0" in Pro Tools.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create5point0();
|
||
|
|
||
|
|
||
|
/** Creates a set for a 5.1 surround setup (left, right, centre, leftSurround, rightSurround, LFE).
|
||
|
|
||
|
Is equivalent to: k51 (VST), AAX_eStemFormat_5_1 (AAX), kAudioChannelLayoutTag_MPEG_5_1_A (CoreAudio)
|
||
|
|
||
|
This format is referred to as "5.1 (ITU 775)" in Logic Pro.
|
||
|
This format is referred to as "5.1" in Cubase.
|
||
|
This format is referred to as "5.1" in Pro Tools.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create5point1();
|
||
|
|
||
|
|
||
|
/** Creates a set for a 6.0 Cine surround setup (left, right, centre, leftSurround, rightSurround, centreSurround).
|
||
|
|
||
|
Is equivalent to: k60Cine (VST), AAX_eStemFormat_6_0 (AAX), kAudioChannelLayoutTag_AudioUnit_6_0 (CoreAudio)
|
||
|
|
||
|
Logic Pro incorrectly uses this for the surround format labeled "6.1 (ES/EX)".
|
||
|
This format is referred to as "6.0 Cine" in Cubase.
|
||
|
This format is referred to as "6.0" in Pro Tools.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create6point0();
|
||
|
|
||
|
|
||
|
/** Creates a set for a 6.1 Cine surround setup (left, right, centre, leftSurround, rightSurround, centreSurround, LFE).
|
||
|
|
||
|
Is equivalent to: k61Cine (VST), AAX_eStemFormat_6_1 (AAX), kAudioChannelLayoutTag_MPEG_6_1_A (CoreAudio)
|
||
|
|
||
|
This format is referred to as "6.1" in Pro Tools.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create6point1();
|
||
|
|
||
|
|
||
|
/** Creates a set for a 6.0 Music surround setup (left, right, leftSurround, rightSurround, leftSurroundSide, rightSurroundSide).
|
||
|
|
||
|
Is equivalent to: k60Music (VST), n/a (AAX), kAudioChannelLayoutTag_DTS_6_0_A (CoreAudio)
|
||
|
|
||
|
This format is referred to as "6.0 Music" in Cubase.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create6point0Music();
|
||
|
|
||
|
|
||
|
/** Creates a set for a 6.0 Music surround setup (left, right, leftSurround, rightSurround, leftSurroundSide, rightSurroundSide, LFE).
|
||
|
|
||
|
Is equivalent to: k61Music (VST), n/a (AAX), kAudioChannelLayoutTag_DTS_6_1_A (CoreAudio)
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create6point1Music();
|
||
|
|
||
|
|
||
|
/** Creates a set for a DTS 7.0 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear).
|
||
|
|
||
|
Is equivalent to: k70Music (VST), AAX_eStemFormat_7_0_DTS (AAX), kAudioChannelLayoutTag_AudioUnit_7_0 (CoreAudio)
|
||
|
|
||
|
This format is referred to as "7.0" in Pro Tools.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create7point0();
|
||
|
|
||
|
|
||
|
/** Creates a set for a SDDS 7.0 surround setup (left, right, centre, leftSurround, rightSurround, leftCentre, rightCentre).
|
||
|
|
||
|
Is equivalent to: k70Cine (VST), AAX_eStemFormat_7_0_SDDS (AAX), kAudioChannelLayoutTag_AudioUnit_7_0_Front (CoreAudio)
|
||
|
|
||
|
This format is referred to as "7.0 SDDS" in Pro Tools.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create7point0SDDS();
|
||
|
|
||
|
|
||
|
/** Creates a set for a DTS 7.1 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, LFE).
|
||
|
|
||
|
Is equivalent to: k71CineSideFill (VST), AAX_eStemFormat_7_1_DTS (AAX), kAudioChannelLayoutTag_MPEG_7_1_C/kAudioChannelLayoutTag_ITU_3_4_1 (CoreAudio)
|
||
|
|
||
|
This format is referred to as "7.1 (3/4.1)" in Logic Pro.
|
||
|
This format is referred to as "7.1" in Pro Tools.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create7point1();
|
||
|
|
||
|
|
||
|
/** Creates a set for a 7.1 surround setup (left, right, centre, leftSurround, rightSurround, leftCentre, rightCentre, LFE).
|
||
|
|
||
|
Is equivalent to: k71Cine (VST), AAX_eStemFormat_7_1_SDDS (AAX), kAudioChannelLayoutTag_MPEG_7_1_A (CoreAudio)
|
||
|
|
||
|
This format is referred to as "7.1 (SDDS)" in Logic Pro.
|
||
|
This format is referred to as "7.1 SDDS" in Pro Tools.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create7point1SDDS();
|
||
|
|
||
|
/** Creates a set for Dolby Atmos 7.0.2 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, topSideLeft, topSideRight).
|
||
|
|
||
|
Is equivalent to: n/a (VST), AAX_eStemFormat_7_0_2 (AAX), n/a (CoreAudio)
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create7point0point2();
|
||
|
|
||
|
/** Creates a set for Dolby Atmos 7.1.2 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, LFE, topSideLeft, topSideRight).
|
||
|
|
||
|
Is equivalent to: k71_2 (VST), AAX_eStemFormat_7_1_2 (AAX), n/a (CoreAudio)
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create7point1point2();
|
||
|
|
||
|
/** Creates a set for Dolby Atmos 7.0.4 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, topFrontLeft, topFrontRight, topRearLeft, topRearRight).
|
||
|
|
||
|
Is equivalent to: n/a (VST), n/a (AAX), n/a (CoreAudio)
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create7point0point4();
|
||
|
|
||
|
/** Creates a set for Dolby Atmos 7.1.4 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, LFE, topFrontLeft, topFrontRight, topRearLeft, topRearRight).
|
||
|
|
||
|
Is equivalent to: k71_4 (VST), n/a (AAX), n/a (CoreAudio)
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE create7point1point4();
|
||
|
|
||
|
|
||
|
//==============================================================================
|
||
|
/** Creates a set for quadraphonic surround setup (left, right, leftSurround, rightSurround)
|
||
|
|
||
|
Is equivalent to: k40Music (VST), AAX_eStemFormat_Quad (AAX), kAudioChannelLayoutTag_Quadraphonic (CoreAudio)
|
||
|
|
||
|
This format is referred to as "Quadraphonic" in Logic Pro.
|
||
|
This format is referred to as "Quadro" in Cubase.
|
||
|
This format is referred to as "Quad" in Pro Tools.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE quadraphonic();
|
||
|
|
||
|
|
||
|
/** Creates a set for pentagonal surround setup (left, right, centre, leftSurroundRear, rightSurroundRear).
|
||
|
|
||
|
Is equivalent to: n/a (VST), n/a (AAX), kAudioChannelLayoutTag_Pentagonal (CoreAudio)
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE pentagonal();
|
||
|
|
||
|
|
||
|
/** Creates a set for hexagonal surround setup (left, right, leftSurroundRear, rightSurroundRear, centre, surroundCentre).
|
||
|
|
||
|
Is equivalent to: n/a (VST), n/a (AAX), kAudioChannelLayoutTag_Hexagonal (CoreAudio)
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE hexagonal();
|
||
|
|
||
|
|
||
|
/** Creates a set for octagonal surround setup (left, right, leftSurround, rightSurround, centre, centreSurround, wideLeft, wideRight).
|
||
|
|
||
|
Is equivalent to: n/a (VST), n/a (AAX), kAudioChannelLayoutTag_Octagonal (CoreAudio)
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE octagonal();
|
||
|
|
||
|
//==============================================================================
|
||
|
/** Creates a set for ACN, SN3D normalised ambisonic surround setups with a given order.
|
||
|
|
||
|
Is equivalent to: kAmbiXXXOrderACN (VST), AAX_eStemFormat_Ambi_XXX_ACN (AAX), kAudioChannelLayoutTag_HOA_ACN_SN3D (CoreAudio)
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE ambisonic (int order = 1);
|
||
|
|
||
|
/** Returns the order of the ambisonic layout represented by this AudioChannelSet. If the
|
||
|
AudioChannelSet is not an ambisonic layout, then this method will return -1.
|
||
|
*/
|
||
|
int getAmbisonicOrder() const;
|
||
|
|
||
|
//==============================================================================
|
||
|
/** Creates a set of untyped discrete channels. */
|
||
|
static AudioChannelSet JUCE_CALLTYPE discreteChannels (int numChannels);
|
||
|
|
||
|
/** Create a canonical channel set for a given number of channels.
|
||
|
For example, numChannels = 1 will return mono, numChannels = 2 will return stereo, etc. */
|
||
|
static AudioChannelSet JUCE_CALLTYPE canonicalChannelSet (int numChannels);
|
||
|
|
||
|
/** Create a channel set for a given number of channels which is non-discrete.
|
||
|
If numChannels is larger than the number of channels of the surround format
|
||
|
with the maximum amount of channels (currently 7.1 Surround), then this
|
||
|
function returns an empty set.*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE namedChannelSet (int numChannels);
|
||
|
|
||
|
/** Return an array of channel sets which have a given number of channels */
|
||
|
static Array<AudioChannelSet> JUCE_CALLTYPE channelSetsWithNumberOfChannels (int numChannels);
|
||
|
|
||
|
//==============================================================================
|
||
|
/** Represents different audio channel types. */
|
||
|
enum ChannelType
|
||
|
{
|
||
|
unknown = 0, /**< Unknown channel type. */
|
||
|
|
||
|
//==============================================================================
|
||
|
left = 1, /**< L channel. */
|
||
|
right = 2, /**< R channel. */
|
||
|
centre = 3, /**< C channel. (Sometimes M for mono) */
|
||
|
|
||
|
//==============================================================================
|
||
|
LFE = 4, /**< LFE channel. */
|
||
|
leftSurround = 5, /**< Ls channel. */
|
||
|
rightSurround = 6, /**< Rs channel. */
|
||
|
leftCentre = 7, /**< Lc (AAX/VST), Lc used as Lss in AU for most layouts. */
|
||
|
rightCentre = 8, /**< Rc (AAX/VST), Rc used as Rss in AU for most layouts. */
|
||
|
centreSurround = 9, /**< Cs/S channel. */
|
||
|
surround = centreSurround, /**< Same as Centre Surround channel. */
|
||
|
leftSurroundSide = 10, /**< Lss (AXX), Side Left "Sl" (VST), Left Centre "LC" (AU) channel. */
|
||
|
rightSurroundSide = 11, /**< Rss (AXX), Side right "Sr" (VST), Right Centre "Rc" (AU) channel. */
|
||
|
topMiddle = 12, /**< Top Middle channel. */
|
||
|
topFrontLeft = 13, /**< Top Front Left channel. */
|
||
|
topFrontCentre = 14, /**< Top Front Centre channel. */
|
||
|
topFrontRight = 15, /**< Top Front Right channel. */
|
||
|
topRearLeft = 16, /**< Top Rear Left channel. */
|
||
|
topRearCentre = 17, /**< Top Rear Centre channel. */
|
||
|
topRearRight = 18, /**< Top Rear Right channel. */
|
||
|
LFE2 = 19, /**< Second LFE channel. */
|
||
|
leftSurroundRear = 20, /**< Lsr (AAX), Lcs (VST), Rls (AU) channel. */
|
||
|
rightSurroundRear = 21, /**< Rsr (AAX), Rcs (VST), Rrs (AU) channel. */
|
||
|
wideLeft = 22, /**< Wide Left channel. */
|
||
|
wideRight = 23, /**< Wide Right channel. */
|
||
|
|
||
|
//==============================================================================
|
||
|
// Used by Dolby Atmos 7.0.2 and 7.1.2
|
||
|
topSideLeft = 28, /**< Lts (AAX), Tsl (VST) channel for Dolby Atmos. */
|
||
|
topSideRight = 29, /**< Rts (AAX), Tsr (VST) channel for Dolby Atmos. */
|
||
|
|
||
|
//==============================================================================
|
||
|
// Ambisonic ACN formats - all channels are SN3D normalised
|
||
|
|
||
|
// zero-th and first-order ambisonic ACN
|
||
|
ambisonicACN0 = 24, /**< Zero-th ambisonic channel number 0. */
|
||
|
ambisonicACN1 = 25, /**< First-order ambisonic channel number 1. */
|
||
|
ambisonicACN2 = 26, /**< First-order ambisonic channel number 2. */
|
||
|
ambisonicACN3 = 27, /**< First-order ambisonic channel number 3. */
|
||
|
|
||
|
// second-order ambisonic
|
||
|
ambisonicACN4 = 30, /**< Second-order ambisonic channel number 4. */
|
||
|
ambisonicACN5 = 31, /**< Second-order ambisonic channel number 5. */
|
||
|
ambisonicACN6 = 32, /**< Second-order ambisonic channel number 6. */
|
||
|
ambisonicACN7 = 33, /**< Second-order ambisonic channel number 7. */
|
||
|
ambisonicACN8 = 34, /**< Second-order ambisonic channel number 8. */
|
||
|
|
||
|
// third-order ambisonic
|
||
|
ambisonicACN9 = 35, /**< Third-order ambisonic channel number 9. */
|
||
|
ambisonicACN10 = 36, /**< Third-order ambisonic channel number 10. */
|
||
|
ambisonicACN11 = 37, /**< Third-order ambisonic channel number 11. */
|
||
|
ambisonicACN12 = 38, /**< Third-order ambisonic channel number 12. */
|
||
|
ambisonicACN13 = 39, /**< Third-order ambisonic channel number 13. */
|
||
|
ambisonicACN14 = 40, /**< Third-order ambisonic channel number 14. */
|
||
|
ambisonicACN15 = 41, /**< Third-order ambisonic channel number 15. */
|
||
|
|
||
|
// fourth-order ambisonic
|
||
|
ambisonicACN16 = 42, /**< Fourth-order ambisonic channel number 16. */
|
||
|
ambisonicACN17 = 43, /**< Fourth-order ambisonic channel number 17. */
|
||
|
ambisonicACN18 = 44, /**< Fourth-order ambisonic channel number 18. */
|
||
|
ambisonicACN19 = 45, /**< Fourth-order ambisonic channel number 19. */
|
||
|
ambisonicACN20 = 46, /**< Fourth-order ambisonic channel number 20. */
|
||
|
ambisonicACN21 = 47, /**< Fourth-order ambisonic channel number 21. */
|
||
|
ambisonicACN22 = 48, /**< Fourth-order ambisonic channel number 22. */
|
||
|
ambisonicACN23 = 49, /**< Fourth-order ambisonic channel number 23. */
|
||
|
ambisonicACN24 = 50, /**< Fourth-order ambisonic channel number 24. */
|
||
|
|
||
|
// fifth-order ambisonic
|
||
|
ambisonicACN25 = 51, /**< Fifth-order ambisonic channel number 25. */
|
||
|
ambisonicACN26 = 52, /**< Fifth-order ambisonic channel number 26. */
|
||
|
ambisonicACN27 = 53, /**< Fifth-order ambisonic channel number 27. */
|
||
|
ambisonicACN28 = 54, /**< Fifth-order ambisonic channel number 28. */
|
||
|
ambisonicACN29 = 55, /**< Fifth-order ambisonic channel number 29. */
|
||
|
ambisonicACN30 = 56, /**< Fifth-order ambisonic channel number 30. */
|
||
|
ambisonicACN31 = 57, /**< Fifth-order ambisonic channel number 31. */
|
||
|
ambisonicACN32 = 58, /**< Fifth-order ambisonic channel number 32. */
|
||
|
ambisonicACN33 = 59, /**< Fifth-order ambisonic channel number 33. */
|
||
|
ambisonicACN34 = 60, /**< Fifth-order ambisonic channel number 34. */
|
||
|
ambisonicACN35 = 61, /**< Fifth-order ambisonic channel number 35. */
|
||
|
|
||
|
//==============================================================================
|
||
|
ambisonicW = ambisonicACN0, /**< Same as zero-th ambisonic channel number 0. */
|
||
|
ambisonicX = ambisonicACN3, /**< Same as first-order ambisonic channel number 3. */
|
||
|
ambisonicY = ambisonicACN1, /**< Same as first-order ambisonic channel number 1. */
|
||
|
ambisonicZ = ambisonicACN2, /**< Same as first-order ambisonic channel number 2. */
|
||
|
|
||
|
//==============================================================================
|
||
|
bottomFrontLeft = 62, /**< Bottom Front Left (Bfl) */
|
||
|
bottomFrontCentre = 63, /**< Bottom Front Centre (Bfc) */
|
||
|
bottomFrontRight = 64, /**< Bottom Front Right (Bfr) */
|
||
|
|
||
|
proximityLeft = 65, /**< Proximity Left (Pl) */
|
||
|
proximityRight = 66, /**< Proximity Right (Pr) */
|
||
|
|
||
|
bottomSideLeft = 67, /**< Bottom Side Left (Bsl) */
|
||
|
bottomSideRight = 68, /**< Bottom Side Right (Bsr) */
|
||
|
bottomRearLeft = 69, /**< Bottom Rear Left (Brl) */
|
||
|
bottomRearCentre = 70, /**< Bottom Rear Center (Brc) */
|
||
|
bottomRearRight = 71, /**< Bottom Rear Right (Brr) */
|
||
|
|
||
|
//==============================================================================
|
||
|
discreteChannel0 = 128 /**< Non-typed individual channels are indexed upwards from this value. */
|
||
|
};
|
||
|
|
||
|
/** Returns the name of a given channel type. For example, this method may return "Surround Left". */
|
||
|
static String JUCE_CALLTYPE getChannelTypeName (ChannelType);
|
||
|
|
||
|
/** Returns the abbreviated name of a channel type. For example, this method may return "Ls". */
|
||
|
static String JUCE_CALLTYPE getAbbreviatedChannelTypeName (ChannelType);
|
||
|
|
||
|
/** Returns the channel type from an abbreviated name. */
|
||
|
static ChannelType JUCE_CALLTYPE getChannelTypeFromAbbreviation (const String& abbreviation);
|
||
|
|
||
|
//==============================================================================
|
||
|
enum
|
||
|
{
|
||
|
maxChannelsOfNamedLayout = 36
|
||
|
};
|
||
|
|
||
|
/** Adds a channel to the set. */
|
||
|
void addChannel (ChannelType newChannelType);
|
||
|
|
||
|
/** Removes a channel from the set. */
|
||
|
void removeChannel (ChannelType newChannelType);
|
||
|
|
||
|
/** Returns the number of channels in the set. */
|
||
|
int size() const noexcept;
|
||
|
|
||
|
/** Returns true if there are no channels in the set. */
|
||
|
bool isDisabled() const noexcept { return size() == 0; }
|
||
|
|
||
|
/** Returns an array of all the types in this channel set. */
|
||
|
Array<ChannelType> getChannelTypes() const;
|
||
|
|
||
|
/** Returns the type of one of the channels in the set, by index. */
|
||
|
ChannelType getTypeOfChannel (int channelIndex) const noexcept;
|
||
|
|
||
|
/** Returns the index for a particular channel-type.
|
||
|
Will return -1 if the this set does not contain a channel of this type. */
|
||
|
int getChannelIndexForType (ChannelType type) const noexcept;
|
||
|
|
||
|
/** Returns a string containing a whitespace-separated list of speaker types
|
||
|
corresponding to each channel. For example in a 5.1 arrangement,
|
||
|
the string may be "L R C Lfe Ls Rs". If the speaker arrangement is unknown,
|
||
|
the returned string will be empty.*/
|
||
|
String getSpeakerArrangementAsString() const;
|
||
|
|
||
|
/** Returns an AudioChannelSet from a string returned by getSpeakerArrangementAsString
|
||
|
|
||
|
@see getSpeakerArrangementAsString */
|
||
|
static AudioChannelSet fromAbbreviatedString (const String& set);
|
||
|
|
||
|
/** Returns the description of the current layout. For example, this method may return
|
||
|
"Quadraphonic". Note that the returned string may not be unique. */
|
||
|
String getDescription() const;
|
||
|
|
||
|
/** Returns if this is a channel layout made-up of discrete channels. */
|
||
|
bool isDiscreteLayout() const noexcept;
|
||
|
|
||
|
/** Intersect two channel layouts. */
|
||
|
void intersect (const AudioChannelSet& other) { channels &= other.channels; }
|
||
|
|
||
|
/** Creates a channel set for a list of channel types. This function will assert
|
||
|
if you supply a duplicate channel.
|
||
|
|
||
|
Note that this method ignores the order in which the channels are given, i.e.
|
||
|
two arrays with the same elements but in a different order will still result
|
||
|
in the same channel set.
|
||
|
*/
|
||
|
static AudioChannelSet JUCE_CALLTYPE channelSetWithChannels (const Array<ChannelType>&);
|
||
|
|
||
|
//==============================================================================
|
||
|
// Conversion between wave and juce channel layout identifiers
|
||
|
|
||
|
/** Create an AudioChannelSet from a WAVEFORMATEXTENSIBLE channelMask (typically used
|
||
|
in .wav files). */
|
||
|
static AudioChannelSet JUCE_CALLTYPE fromWaveChannelMask (int32 dwChannelMask);
|
||
|
|
||
|
/** Returns a WAVEFORMATEXTENSIBLE channelMask representation (typically used in .wav
|
||
|
files) of the receiver.
|
||
|
|
||
|
Returns -1 if the receiver cannot be represented in a WAVEFORMATEXTENSIBLE channelMask
|
||
|
representation.
|
||
|
*/
|
||
|
int32 getWaveChannelMask() const noexcept;
|
||
|
|
||
|
//==============================================================================
|
||
|
bool operator== (const AudioChannelSet&) const noexcept;
|
||
|
bool operator!= (const AudioChannelSet&) const noexcept;
|
||
|
bool operator< (const AudioChannelSet&) const noexcept;
|
||
|
|
||
|
private:
|
||
|
//==============================================================================
|
||
|
BigInteger channels;
|
||
|
|
||
|
//==============================================================================
|
||
|
explicit AudioChannelSet (uint32);
|
||
|
explicit AudioChannelSet (const Array<ChannelType>&);
|
||
|
|
||
|
//==============================================================================
|
||
|
static int JUCE_CALLTYPE getAmbisonicOrderForNumChannels (int);
|
||
|
};
|
||
|
|
||
|
} // namespace juce
|