1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Add support for AAX SDK 2.5.0

This commit is contained in:
attila 2023-03-08 19:20:05 +01:00
parent 6faa87d8f3
commit 39cd0ef532
5 changed files with 379 additions and 44 deletions

View file

@ -107,6 +107,34 @@ String AudioChannelSet::getChannelTypeName (AudioChannelSet::ChannelType type)
case ambisonicACN33: return NEEDS_TRANS("Ambisonic 33");
case ambisonicACN34: return NEEDS_TRANS("Ambisonic 34");
case ambisonicACN35: return NEEDS_TRANS("Ambisonic 35");
case ambisonicACN36: return NEEDS_TRANS("Ambisonic 36");
case ambisonicACN37: return NEEDS_TRANS("Ambisonic 37");
case ambisonicACN38: return NEEDS_TRANS("Ambisonic 38");
case ambisonicACN39: return NEEDS_TRANS("Ambisonic 39");
case ambisonicACN40: return NEEDS_TRANS("Ambisonic 40");
case ambisonicACN41: return NEEDS_TRANS("Ambisonic 41");
case ambisonicACN42: return NEEDS_TRANS("Ambisonic 42");
case ambisonicACN43: return NEEDS_TRANS("Ambisonic 43");
case ambisonicACN44: return NEEDS_TRANS("Ambisonic 44");
case ambisonicACN45: return NEEDS_TRANS("Ambisonic 45");
case ambisonicACN46: return NEEDS_TRANS("Ambisonic 46");
case ambisonicACN47: return NEEDS_TRANS("Ambisonic 47");
case ambisonicACN48: return NEEDS_TRANS("Ambisonic 48");
case ambisonicACN49: return NEEDS_TRANS("Ambisonic 49");
case ambisonicACN50: return NEEDS_TRANS("Ambisonic 50");
case ambisonicACN51: return NEEDS_TRANS("Ambisonic 51");
case ambisonicACN52: return NEEDS_TRANS("Ambisonic 52");
case ambisonicACN53: return NEEDS_TRANS("Ambisonic 53");
case ambisonicACN54: return NEEDS_TRANS("Ambisonic 54");
case ambisonicACN55: return NEEDS_TRANS("Ambisonic 55");
case ambisonicACN56: return NEEDS_TRANS("Ambisonic 56");
case ambisonicACN57: return NEEDS_TRANS("Ambisonic 57");
case ambisonicACN58: return NEEDS_TRANS("Ambisonic 58");
case ambisonicACN59: return NEEDS_TRANS("Ambisonic 59");
case ambisonicACN60: return NEEDS_TRANS("Ambisonic 60");
case ambisonicACN61: return NEEDS_TRANS("Ambisonic 61");
case ambisonicACN62: return NEEDS_TRANS("Ambisonic 62");
case ambisonicACN63: return NEEDS_TRANS("Ambisonic 63");
case bottomFrontLeft: return NEEDS_TRANS("Bottom Front Left");
case bottomFrontCentre: return NEEDS_TRANS("Bottom Front Centre");
case bottomFrontRight: return NEEDS_TRANS("Bottom Front Right");
@ -191,6 +219,34 @@ String AudioChannelSet::getAbbreviatedChannelTypeName (AudioChannelSet::ChannelT
case ambisonicACN33: return "ACN33";
case ambisonicACN34: return "ACN34";
case ambisonicACN35: return "ACN35";
case ambisonicACN36: return "ACN36";
case ambisonicACN37: return "ACN37";
case ambisonicACN38: return "ACN38";
case ambisonicACN39: return "ACN39";
case ambisonicACN40: return "ACN40";
case ambisonicACN41: return "ACN41";
case ambisonicACN42: return "ACN42";
case ambisonicACN43: return "ACN43";
case ambisonicACN44: return "ACN44";
case ambisonicACN45: return "ACN45";
case ambisonicACN46: return "ACN46";
case ambisonicACN47: return "ACN47";
case ambisonicACN48: return "ACN48";
case ambisonicACN49: return "ACN49";
case ambisonicACN50: return "ACN50";
case ambisonicACN51: return "ACN51";
case ambisonicACN52: return "ACN52";
case ambisonicACN53: return "ACN53";
case ambisonicACN54: return "ACN54";
case ambisonicACN55: return "ACN55";
case ambisonicACN56: return "ACN56";
case ambisonicACN57: return "ACN57";
case ambisonicACN58: return "ACN58";
case ambisonicACN59: return "ACN59";
case ambisonicACN60: return "ACN60";
case ambisonicACN61: return "ACN61";
case ambisonicACN62: return "ACN62";
case ambisonicACN63: return "ACN63";
case topSideLeft: return "Tsl";
case topSideRight: return "Tsr";
case bottomFrontLeft: return "Bfl";
@ -208,9 +264,6 @@ String AudioChannelSet::getAbbreviatedChannelTypeName (AudioChannelSet::ChannelT
default: break;
}
if (type >= ambisonicACN4 && type <= ambisonicACN35)
return "ACN" + String (type - ambisonicACN4 + 4);
return {};
}
@ -283,6 +336,34 @@ AudioChannelSet::ChannelType AudioChannelSet::getChannelTypeFromAbbreviation (co
if (abbr == "ACN33") return ambisonicACN33;
if (abbr == "ACN34") return ambisonicACN34;
if (abbr == "ACN35") return ambisonicACN35;
if (abbr == "ACN36") return ambisonicACN36;
if (abbr == "ACN37") return ambisonicACN37;
if (abbr == "ACN38") return ambisonicACN38;
if (abbr == "ACN39") return ambisonicACN39;
if (abbr == "ACN40") return ambisonicACN40;
if (abbr == "ACN41") return ambisonicACN41;
if (abbr == "ACN42") return ambisonicACN42;
if (abbr == "ACN43") return ambisonicACN43;
if (abbr == "ACN44") return ambisonicACN44;
if (abbr == "ACN45") return ambisonicACN45;
if (abbr == "ACN46") return ambisonicACN46;
if (abbr == "ACN47") return ambisonicACN47;
if (abbr == "ACN48") return ambisonicACN48;
if (abbr == "ACN49") return ambisonicACN49;
if (abbr == "ACN50") return ambisonicACN50;
if (abbr == "ACN51") return ambisonicACN51;
if (abbr == "ACN52") return ambisonicACN52;
if (abbr == "ACN53") return ambisonicACN53;
if (abbr == "ACN54") return ambisonicACN54;
if (abbr == "ACN55") return ambisonicACN55;
if (abbr == "ACN56") return ambisonicACN56;
if (abbr == "ACN57") return ambisonicACN57;
if (abbr == "ACN58") return ambisonicACN58;
if (abbr == "ACN59") return ambisonicACN59;
if (abbr == "ACN60") return ambisonicACN60;
if (abbr == "ACN61") return ambisonicACN61;
if (abbr == "ACN62") return ambisonicACN62;
if (abbr == "ACN63") return ambisonicACN63;
if (abbr == "Tsl") return topSideLeft;
if (abbr == "Tsr") return topSideRight;
if (abbr == "Bfl") return bottomFrontLeft;
@ -338,6 +419,8 @@ String AudioChannelSet::getDescription() const
if (*this == createLCRS()) return "LCRS";
if (*this == create5point0()) return "5.0 Surround";
if (*this == create5point0point2()) return "5.0.2 Surround";
if (*this == create5point0point4()) return "5.0.4 Surround";
if (*this == create5point1()) return "5.1 Surround";
if (*this == create5point1point2()) return "5.1.2 Surround";
if (*this == create5point1point4()) return "5.1.4 Surround";
@ -351,9 +434,13 @@ String AudioChannelSet::getDescription() const
if (*this == create7point1SDDS()) return "7.1 Surround SDDS";
if (*this == create7point0point2()) return "7.0.2 Surround";
if (*this == create7point0point4()) return "7.0.4 Surround";
if (*this == create7point0point6()) return "7.0.6 Surround";
if (*this == create7point1point2()) return "7.1.2 Surround";
if (*this == create7point1point4()) return "7.1.4 Surround";
if (*this == create7point1point6()) return "7.1.6 Surround";
if (*this == create9point0point4()) return "9.0.4 Surround";
if (*this == create9point1point4()) return "9.1.4 Surround";
if (*this == create9point0point6()) return "9.0.6 Surround";
if (*this == create9point1point6()) return "9.1.6 Surround";
if (*this == quadraphonic()) return "Quadraphonic";
@ -386,11 +473,11 @@ String AudioChannelSet::getDescription() const
bool AudioChannelSet::isDiscreteLayout() const noexcept
{
for (auto& speaker : getChannelTypes())
if (speaker <= ambisonicACN35)
return false;
const auto channelTypes = getChannelTypes();
return true;
return std::none_of (std::begin (channelTypes),
std::end (channelTypes),
[] (const auto& t) { return t < discreteChannel0; });
}
int AudioChannelSet::size() const noexcept
@ -467,26 +554,44 @@ AudioChannelSet AudioChannelSet::quadraphonic() { return AudioChannelSet
AudioChannelSet AudioChannelSet::pentagonal() { return AudioChannelSet ({ left, right, centre, leftSurroundRear, rightSurroundRear }); }
AudioChannelSet AudioChannelSet::hexagonal() { return AudioChannelSet ({ left, right, centre, centreSurround, leftSurroundRear, rightSurroundRear }); }
AudioChannelSet AudioChannelSet::octagonal() { return AudioChannelSet ({ left, right, centre, leftSurround, rightSurround, centreSurround, wideLeft, wideRight }); }
AudioChannelSet AudioChannelSet::create5point0point2() { return AudioChannelSet ({ left, right, centre, leftSurround, rightSurround, topSideLeft, topSideRight }); }
AudioChannelSet AudioChannelSet::create5point1point2() { return AudioChannelSet ({ left, right, centre, LFE, leftSurround, rightSurround, topSideLeft, topSideRight }); }
AudioChannelSet AudioChannelSet::create5point0point4() { return AudioChannelSet ({ left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, topRearLeft, topRearRight }); }
AudioChannelSet AudioChannelSet::create5point1point4() { return AudioChannelSet ({ left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, topRearLeft, topRearRight }); }
AudioChannelSet AudioChannelSet::create7point0point2() { return AudioChannelSet ({ left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, topSideLeft, topSideRight }); }
AudioChannelSet AudioChannelSet::create7point1point2() { return AudioChannelSet ({ left, right, centre, LFE, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, topSideLeft, topSideRight }); }
AudioChannelSet AudioChannelSet::create7point0point4() { return AudioChannelSet ({ left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, topFrontLeft, topFrontRight, topRearLeft, topRearRight }); }
AudioChannelSet AudioChannelSet::create7point1point4() { return AudioChannelSet ({ left, right, centre, LFE, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, topFrontLeft, topFrontRight, topRearLeft, topRearRight }); }
AudioChannelSet AudioChannelSet::create7point0point6() { return AudioChannelSet ({ left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, topFrontLeft, topFrontRight, topSideLeft, topSideRight, topRearLeft, topRearRight }); }
AudioChannelSet AudioChannelSet::create7point1point6() { return AudioChannelSet ({ left, right, centre, LFE, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, topFrontLeft, topFrontRight, topSideLeft, topSideRight, topRearLeft, topRearRight }); }
AudioChannelSet AudioChannelSet::create9point0point4() { return AudioChannelSet ({ left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, wideLeft, wideRight, topFrontLeft, topFrontRight, topRearLeft, topRearRight }); }
AudioChannelSet AudioChannelSet::create9point1point4() { return AudioChannelSet ({ left, right, centre, LFE, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, wideLeft, wideRight, topFrontLeft, topFrontRight, topRearLeft, topRearRight }); }
AudioChannelSet AudioChannelSet::create9point0point6() { return AudioChannelSet ({ left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, wideLeft, wideRight, topFrontLeft, topFrontRight, topSideLeft, topSideRight, topRearLeft, topRearRight }); }
AudioChannelSet AudioChannelSet::create9point1point6() { return AudioChannelSet ({ left, right, centre, LFE, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, wideLeft, wideRight, topFrontLeft, topFrontRight, topSideLeft, topSideRight, topRearLeft, topRearRight }); }
AudioChannelSet AudioChannelSet::ambisonic (int order)
{
jassert (isPositiveAndBelow (order, 6));
jassert (isPositiveAndBelow (order, 8));
if (order == 0)
return AudioChannelSet ((uint32) (1 << ambisonicACN0));
static constexpr std::pair<int, int> continuousRanges[] { { ambisonicACN0, ambisonicACN3 },
{ ambisonicACN4, ambisonicACN35 },
{ ambisonicACN36, ambisonicACN63 } };
AudioChannelSet set ((1u << ambisonicACN0) | (1u << ambisonicACN1) | (1u << ambisonicACN2) | (1u << ambisonicACN3));
AudioChannelSet set;
auto numAmbisonicChannels = (order + 1) * (order + 1);
set.channels.setRange (ambisonicACN4, numAmbisonicChannels - 4, true);
const auto setBits = [&set] (auto range, auto maxNumToSet)
{
const auto numToSet = std::min (maxNumToSet, range.second - range.first + 1);
set.channels.setRange (range.first, numToSet, true);
return numToSet;
};
const auto numAmbisonicChannels = (order + 1) * (order + 1);
for (int rangeIdx = 0, bitsSet = 0; bitsSet < numAmbisonicChannels; ++rangeIdx)
{
bitsSet += setBits (continuousRanges[rangeIdx], numAmbisonicChannels - bitsSet);
}
return set;
}
@ -636,7 +741,7 @@ int JUCE_CALLTYPE AudioChannelSet::getAmbisonicOrderForNumChannels (int numChann
auto sqrtMinusOne = std::sqrt (static_cast<float> (numChannels)) - 1.0f;
auto ambisonicOrder = jmax (0, static_cast<int> (std::floor (sqrtMinusOne)));
if (ambisonicOrder > 5)
if (ambisonicOrder > 7)
return -1;
return (static_cast<float> (ambisonicOrder) == sqrtMinusOne ? ambisonicOrder : -1);

View file

@ -196,12 +196,24 @@ public:
*/
static AudioChannelSet JUCE_CALLTYPE create7point1SDDS();
/** Creates a set for a 5.0.2 surround setup (left, right, centre, leftSurround, rightSurround, topSideLeft, topSideRight).
Is equivalent to: AAX_eStemFormat_5_0_2 (AAX).
*/
static AudioChannelSet JUCE_CALLTYPE create5point0point2();
/** Creates a set for a 5.1.2 surround setup (left, right, centre, LFE, leftSurround, rightSurround, topSideLeft, topSideRight).
Is equivalent to: kAudioChannelLayoutTag_Atmos_5_1_2 (CoreAudio).
*/
static AudioChannelSet JUCE_CALLTYPE create5point1point2();
/** Creates a set for a 5.0.4 surround setup (left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, topRearLeft, topRearRight).
Is equivalent to: AAX_eStemFormat_5_0_4 (AAX).
*/
static AudioChannelSet JUCE_CALLTYPE create5point0point4();
/** Creates a set for a 5.1.4 surround setup (left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, topRearLeft, topRearRight).
Is equivalent to: kAudioChannelLayoutTag_Atmos_5_1_4 (CoreAudio).
@ -232,12 +244,36 @@ public:
*/
static AudioChannelSet JUCE_CALLTYPE create7point1point4();
/** Creates a set for 7.0.6 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, topFrontLeft, topFrontRight, topSideLeft, topSideRight, topRearLeft, topRearRight).
Is equivalent to: AAX_eStemFormat_7_0_6 (AAX).
*/
static AudioChannelSet JUCE_CALLTYPE create7point0point6();
/** Creates a set for Dolby Atmos 7.1.6 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, LFE, topFrontLeft, topFrontRight, topSideLeft, topSideRight, topRearLeft, topRearRight).
Is equivalent to: k71_6 (VST), n/a (AAX), n/a (CoreAudio)
*/
static AudioChannelSet JUCE_CALLTYPE create7point1point6();
/** Creates a set for a 9.0.4 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, wideLeft, wideRight, topFrontLeft, topFrontRight, topRearLeft, topRearRight).
Is equivalent to: AAX_eStemFormat_9_0_4 (AAX).
*/
static AudioChannelSet JUCE_CALLTYPE create9point0point4();
/** Creates a set for a 9.1.4 surround setup (left, right, centre, LFE, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, wideLeft, wideRight, topFrontLeft, topFrontRight, topRearLeft, topRearRight).
Is equivalent to: AAX_eStemFormat_9_1_4 (AAX).
*/
static AudioChannelSet JUCE_CALLTYPE create9point1point4();
/** Creates a set for a 9.0.6 surround setup (left, right, centre, LFE, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, wideLeft, wideRight, topFrontLeft, topFrontRight, topSideLeft, topSideRight, topRearLeft, topRearRight).
Is equivalent to: AAX_eStemFormat_9_0_6 (AAX).
*/
static AudioChannelSet JUCE_CALLTYPE create9point0point6();
/** Creates a set for a 9.1.6 surround setup (left, right, centre, LFE, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, wideLeft, wideRight, topFrontLeft, topFrontRight, topSideLeft, topSideRight, topRearLeft, topRearRight).
Note that the VST3 layout arranges the front speakers "L Lc C Rc R", but the JUCE layout
@ -419,6 +455,40 @@ public:
bottomRearCentre = 70, /**< Bottom Rear Center (Brc) */
bottomRearRight = 71, /**< Bottom Rear Right (Brr) */
//==============================================================================
// sixth-order ambisonic
ambisonicACN36 = 72, /**< Sixth-order ambisonic channel number 36. */
ambisonicACN37 = 73, /**< Sixth-order ambisonic channel number 37. */
ambisonicACN38 = 74, /**< Sixth-order ambisonic channel number 38. */
ambisonicACN39 = 75, /**< Sixth-order ambisonic channel number 39. */
ambisonicACN40 = 76, /**< Sixth-order ambisonic channel number 40. */
ambisonicACN41 = 77, /**< Sixth-order ambisonic channel number 41. */
ambisonicACN42 = 78, /**< Sixth-order ambisonic channel number 42. */
ambisonicACN43 = 79, /**< Sixth-order ambisonic channel number 43. */
ambisonicACN44 = 80, /**< Sixth-order ambisonic channel number 44. */
ambisonicACN45 = 81, /**< Sixth-order ambisonic channel number 45. */
ambisonicACN46 = 82, /**< Sixth-order ambisonic channel number 46. */
ambisonicACN47 = 83, /**< Sixth-order ambisonic channel number 47. */
ambisonicACN48 = 84, /**< Sixth-order ambisonic channel number 48. */
// seventh-order ambisonic
ambisonicACN49 = 85, /**< Seventh-order ambisonic channel number 49. */
ambisonicACN50 = 86, /**< Seventh-order ambisonic channel number 50. */
ambisonicACN51 = 87, /**< Seventh-order ambisonic channel number 51. */
ambisonicACN52 = 88, /**< Seventh-order ambisonic channel number 52. */
ambisonicACN53 = 89, /**< Seventh-order ambisonic channel number 53. */
ambisonicACN54 = 90, /**< Seventh-order ambisonic channel number 54. */
ambisonicACN55 = 91, /**< Seventh-order ambisonic channel number 55. */
ambisonicACN56 = 92, /**< Seventh-order ambisonic channel number 56. */
ambisonicACN57 = 93, /**< Seventh-order ambisonic channel number 57. */
ambisonicACN58 = 94, /**< Seventh-order ambisonic channel number 58. */
ambisonicACN59 = 95, /**< Seventh-order ambisonic channel number 59. */
ambisonicACN60 = 96, /**< Seventh-order ambisonic channel number 60. */
ambisonicACN61 = 97, /**< Seventh-order ambisonic channel number 61. */
ambisonicACN62 = 98, /**< Seventh-order ambisonic channel number 62. */
ambisonicACN63 = 99, /**< Seventh-order ambisonic channel number 63. */
//==============================================================================
discreteChannel0 = 128 /**< Non-typed individual channels are indexed upwards from this value. */
};
@ -435,7 +505,7 @@ public:
//==============================================================================
enum
{
maxChannelsOfNamedLayout = 36
maxChannelsOfNamedLayout = 64
};
/** Adds a channel to the set. */

View file

@ -50,6 +50,12 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wnon-virtual-dtor",
static_assert (AAX_SDK_CURRENT_REVISION >= AAX_SDK_2p4p0_REVISION, "JUCE requires AAX SDK version 2.4.0 or higher");
#if defined (AAX_SDK_2p5p0_REVISION) && AAX_SDK_2p5p0_REVISION <= AAX_SDK_CURRENT_REVISION
#define JUCE_AAX_SDK_2p5p0 1
#else
#define JUCE_AAX_SDK_2p5p0 0
#endif
#define INITACFIDS
#include <AAX_Exports.cpp>
@ -115,7 +121,7 @@ namespace AAXClasses
struct AAXChannelStreamOrder
{
AAX_EStemFormat aaxStemFormat;
AudioChannelSet::ChannelType speakerOrder[10];
std::initializer_list<AudioChannelSet::ChannelType> speakerOrder;
};
static AAX_EStemFormat stemFormatForAmbisonicOrder (int order)
@ -125,6 +131,12 @@ namespace AAXClasses
case 1: return AAX_eStemFormat_Ambi_1_ACN;
case 2: return AAX_eStemFormat_Ambi_2_ACN;
case 3: return AAX_eStemFormat_Ambi_3_ACN;
#if JUCE_AAX_SDK_2p5p0
case 4: return AAX_eStemFormat_Ambi_4_ACN;
case 5: return AAX_eStemFormat_Ambi_5_ACN;
case 6: return AAX_eStemFormat_Ambi_6_ACN;
case 7: return AAX_eStemFormat_Ambi_7_ACN;
#endif
default: break;
}
@ -133,53 +145,94 @@ namespace AAXClasses
static AAXChannelStreamOrder aaxChannelOrder[] =
{
{ AAX_eStemFormat_Mono, { AudioChannelSet::centre, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown,
AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
{ AAX_eStemFormat_Mono, { AudioChannelSet::centre } },
{ AAX_eStemFormat_Stereo, { AudioChannelSet::left, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown,
AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
{ AAX_eStemFormat_Stereo, { AudioChannelSet::left, AudioChannelSet::right } },
{ AAX_eStemFormat_LCR, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown,
AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
{ AAX_eStemFormat_LCR, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right } },
{ AAX_eStemFormat_LCRS, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::centreSurround, AudioChannelSet::unknown,
AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
{ AAX_eStemFormat_LCRS, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::centreSurround } },
{ AAX_eStemFormat_Quad, { AudioChannelSet::left, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown,
AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
{ AAX_eStemFormat_Quad, { AudioChannelSet::left, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround } },
{ AAX_eStemFormat_5_0, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround,
AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
{ AAX_eStemFormat_5_0, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround } },
{ AAX_eStemFormat_5_1, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround,
AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
AudioChannelSet::LFE } },
{ AAX_eStemFormat_6_0, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround,
AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
AudioChannelSet::rightSurround } },
{ AAX_eStemFormat_6_1, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround,
AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
AudioChannelSet::rightSurround, AudioChannelSet::LFE } },
{ AAX_eStemFormat_7_0_SDDS, { AudioChannelSet::left, AudioChannelSet::leftCentre, AudioChannelSet::centre, AudioChannelSet::rightCentre, AudioChannelSet::right,
AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
AudioChannelSet::leftSurround, AudioChannelSet::rightSurround } },
{ AAX_eStemFormat_7_0_DTS, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear } },
{ AAX_eStemFormat_7_1_SDDS, { AudioChannelSet::left, AudioChannelSet::leftCentre, AudioChannelSet::centre, AudioChannelSet::rightCentre, AudioChannelSet::right,
AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown } },
AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::LFE } },
{ AAX_eStemFormat_7_1_DTS, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown } },
AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::LFE } },
{ AAX_eStemFormat_7_0_2, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight, AudioChannelSet::unknown } },
AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight } },
{ AAX_eStemFormat_7_1_2, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::LFE, AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight } },
{ AAX_eStemFormat_None, { AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown,
AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
#if JUCE_AAX_SDK_2p5p0
{ AAX_eStemFormat_5_0_2, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround,
AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight } },
{ AAX_eStemFormat_5_1_2, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround,
AudioChannelSet::LFE, AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight } },
{ AAX_eStemFormat_5_0_4, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround,
AudioChannelSet::topFrontLeft, AudioChannelSet::topFrontRight, AudioChannelSet::topRearLeft, AudioChannelSet::topRearRight } },
{ AAX_eStemFormat_5_1_4, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround,
AudioChannelSet::LFE, AudioChannelSet::topFrontLeft, AudioChannelSet::topFrontRight, AudioChannelSet::topRearLeft, AudioChannelSet::topRearRight } },
{ AAX_eStemFormat_7_0_4, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::topFrontLeft, AudioChannelSet::topFrontRight,
AudioChannelSet::topRearLeft, AudioChannelSet::topRearRight } },
{ AAX_eStemFormat_7_1_4, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::LFE, AudioChannelSet::topFrontLeft,
AudioChannelSet::topFrontRight, AudioChannelSet::topRearLeft, AudioChannelSet::topRearRight } },
{ AAX_eStemFormat_7_0_6, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::topFrontLeft, AudioChannelSet::topFrontRight,
AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight, AudioChannelSet::topRearLeft, AudioChannelSet::topRearRight } },
{ AAX_eStemFormat_7_1_6, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::LFE, AudioChannelSet::topFrontLeft, AudioChannelSet::topFrontRight,
AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight, AudioChannelSet::topRearLeft, AudioChannelSet::topRearRight } },
{ AAX_eStemFormat_9_0_4, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::wideLeft, AudioChannelSet::wideRight,
AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide, AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear,
AudioChannelSet::topFrontLeft, AudioChannelSet::topFrontRight, AudioChannelSet::topRearLeft, AudioChannelSet::topRearRight } },
{ AAX_eStemFormat_9_1_4, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::wideLeft, AudioChannelSet::wideRight,
AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide, AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear,
AudioChannelSet::LFE, AudioChannelSet::topFrontLeft, AudioChannelSet::topFrontRight, AudioChannelSet::topRearLeft, AudioChannelSet::topRearRight } },
{ AAX_eStemFormat_9_0_6, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::wideLeft, AudioChannelSet::wideRight,
AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide, AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear,
AudioChannelSet::topFrontLeft, AudioChannelSet::topFrontRight, AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight, AudioChannelSet::topRearLeft,
AudioChannelSet::topRearRight } },
{ AAX_eStemFormat_9_1_6, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::wideLeft, AudioChannelSet::wideRight,
AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide, AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear,
AudioChannelSet::LFE, AudioChannelSet::topFrontLeft, AudioChannelSet::topFrontRight, AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight,
AudioChannelSet::topRearLeft, AudioChannelSet::topRearRight } },
#endif
{ AAX_eStemFormat_None, {} },
};
static AAX_EStemFormat aaxFormats[] =
@ -201,7 +254,25 @@ namespace AAXClasses
AAX_eStemFormat_7_1_2,
AAX_eStemFormat_Ambi_1_ACN,
AAX_eStemFormat_Ambi_2_ACN,
AAX_eStemFormat_Ambi_3_ACN
AAX_eStemFormat_Ambi_3_ACN,
#if JUCE_AAX_SDK_2p5p0
AAX_eStemFormat_5_0_2,
AAX_eStemFormat_5_1_2,
AAX_eStemFormat_5_0_4,
AAX_eStemFormat_5_1_4,
AAX_eStemFormat_7_0_4,
AAX_eStemFormat_7_1_4,
AAX_eStemFormat_7_0_6,
AAX_eStemFormat_7_1_6,
AAX_eStemFormat_9_0_4,
AAX_eStemFormat_9_1_4,
AAX_eStemFormat_9_0_6,
AAX_eStemFormat_9_1_6,
AAX_eStemFormat_Ambi_4_ACN,
AAX_eStemFormat_Ambi_5_ACN,
AAX_eStemFormat_Ambi_6_ACN,
AAX_eStemFormat_Ambi_7_ACN,
#endif
};
static AAX_EStemFormat getFormatForAudioChannelSet (const AudioChannelSet& set, bool ignoreLayout) noexcept
@ -224,6 +295,14 @@ namespace AAXClasses
case 8: return AAX_eStemFormat_7_1_DTS;
case 9: return AAX_eStemFormat_7_0_2;
case 10: return AAX_eStemFormat_7_1_2;
#if JUCE_AAX_SDK_2p5p0
case 11: return AAX_eStemFormat_7_0_4;
case 12: return AAX_eStemFormat_7_1_4;
case 13: return AAX_eStemFormat_9_0_4;
case 14: return AAX_eStemFormat_9_1_4;
case 15: return AAX_eStemFormat_9_0_6;
case 16: return AAX_eStemFormat_9_1_6;
#endif
default: break;
}
@ -254,6 +333,21 @@ namespace AAXClasses
if (set == AudioChannelSet::create7point0point2()) return AAX_eStemFormat_7_0_2;
if (set == AudioChannelSet::create7point1point2()) return AAX_eStemFormat_7_1_2;
#if JUCE_AAX_SDK_2p5p0
if (set == AudioChannelSet::create5point0point2()) return AAX_eStemFormat_5_0_2;
if (set == AudioChannelSet::create5point1point2()) return AAX_eStemFormat_5_1_2;
if (set == AudioChannelSet::create5point0point4()) return AAX_eStemFormat_5_0_4;
if (set == AudioChannelSet::create5point1point4()) return AAX_eStemFormat_5_1_4;
if (set == AudioChannelSet::create7point0point4()) return AAX_eStemFormat_7_0_4;
if (set == AudioChannelSet::create7point1point4()) return AAX_eStemFormat_7_1_4;
if (set == AudioChannelSet::create7point0point6()) return AAX_eStemFormat_7_0_6;
if (set == AudioChannelSet::create7point1point6()) return AAX_eStemFormat_7_1_6;
if (set == AudioChannelSet::create9point0point4()) return AAX_eStemFormat_9_0_4;
if (set == AudioChannelSet::create9point1point4()) return AAX_eStemFormat_9_1_4;
if (set == AudioChannelSet::create9point0point6()) return AAX_eStemFormat_9_0_6;
if (set == AudioChannelSet::create9point1point6()) return AAX_eStemFormat_9_1_6;
#endif
auto order = set.getAmbisonicOrder();
if (order >= 0)
return stemFormatForAmbisonicOrder (order);
@ -286,9 +380,30 @@ namespace AAXClasses
case AAX_eStemFormat_Ambi_1_ACN: return AudioChannelSet::ambisonic (1);
case AAX_eStemFormat_Ambi_2_ACN: return AudioChannelSet::ambisonic (2);
case AAX_eStemFormat_Ambi_3_ACN: return AudioChannelSet::ambisonic (3);
#if JUCE_AAX_SDK_2p5p0
case AAX_eStemFormat_5_0_2: return AudioChannelSet::create5point0point2();
case AAX_eStemFormat_5_1_2: return AudioChannelSet::create5point1point2();
case AAX_eStemFormat_5_0_4: return AudioChannelSet::create5point0point4();
case AAX_eStemFormat_5_1_4: return AudioChannelSet::create5point1point4();
case AAX_eStemFormat_7_0_4: return AudioChannelSet::create7point0point4();
case AAX_eStemFormat_7_1_4: return AudioChannelSet::create7point1point4();
case AAX_eStemFormat_7_0_6: return AudioChannelSet::create7point0point6();
case AAX_eStemFormat_7_1_6: return AudioChannelSet::create7point1point6();
case AAX_eStemFormat_9_0_4: return AudioChannelSet::create9point0point4();
case AAX_eStemFormat_9_1_4: return AudioChannelSet::create9point1point4();
case AAX_eStemFormat_9_0_6: return AudioChannelSet::create9point0point6();
case AAX_eStemFormat_9_1_6: return AudioChannelSet::create9point1point6();
case AAX_eStemFormat_Ambi_4_ACN: return AudioChannelSet::ambisonic (4);
case AAX_eStemFormat_Ambi_5_ACN: return AudioChannelSet::ambisonic (5);
case AAX_eStemFormat_Ambi_6_ACN: return AudioChannelSet::ambisonic (6);
case AAX_eStemFormat_Ambi_7_ACN: return AudioChannelSet::ambisonic (7);
#else
case AAX_eStemFormat_Reserved_1:
case AAX_eStemFormat_Reserved_2:
case AAX_eStemFormat_Reserved_3:
#endif
case AAX_eStemFormatNum:
case AAX_eStemFormat_Any:
case AAX_eStemFormat_INT32_MAX:
@ -345,11 +460,12 @@ namespace AAXClasses
auto& channelOrder = aaxChannelOrder[layoutIndex];
auto channelType = channelSet.getTypeOfChannel (static_cast<int> (juceIndex));
auto numSpeakers = numElementsInArray (channelOrder.speakerOrder);
const auto& speakerOrder = channelOrder.speakerOrder;
for (int i = 0; i < numSpeakers && channelOrder.speakerOrder[i] != 0; ++i)
if (channelOrder.speakerOrder[i] == channelType)
return i;
const auto it = std::find (std::cbegin (speakerOrder), std::cend (speakerOrder), channelType);
if (it != std::cend (speakerOrder))
return (int) std::distance (std::cbegin (speakerOrder), it);
return juceIndex;
}

View file

@ -274,6 +274,34 @@ static std::optional<Steinberg::Vst::Speaker> getSpeakerType (const AudioChannel
case AudioChannelSet::ambisonicACN33:
case AudioChannelSet::ambisonicACN34:
case AudioChannelSet::ambisonicACN35:
case AudioChannelSet::ambisonicACN36:
case AudioChannelSet::ambisonicACN37:
case AudioChannelSet::ambisonicACN38:
case AudioChannelSet::ambisonicACN39:
case AudioChannelSet::ambisonicACN40:
case AudioChannelSet::ambisonicACN41:
case AudioChannelSet::ambisonicACN42:
case AudioChannelSet::ambisonicACN43:
case AudioChannelSet::ambisonicACN44:
case AudioChannelSet::ambisonicACN45:
case AudioChannelSet::ambisonicACN46:
case AudioChannelSet::ambisonicACN47:
case AudioChannelSet::ambisonicACN48:
case AudioChannelSet::ambisonicACN49:
case AudioChannelSet::ambisonicACN50:
case AudioChannelSet::ambisonicACN51:
case AudioChannelSet::ambisonicACN52:
case AudioChannelSet::ambisonicACN53:
case AudioChannelSet::ambisonicACN54:
case AudioChannelSet::ambisonicACN55:
case AudioChannelSet::ambisonicACN56:
case AudioChannelSet::ambisonicACN57:
case AudioChannelSet::ambisonicACN58:
case AudioChannelSet::ambisonicACN59:
case AudioChannelSet::ambisonicACN60:
case AudioChannelSet::ambisonicACN61:
case AudioChannelSet::ambisonicACN62:
case AudioChannelSet::ambisonicACN63:
case AudioChannelSet::wideLeft:
case AudioChannelSet::wideRight:
case AudioChannelSet::unknown:

View file

@ -1214,7 +1214,23 @@ int32 AudioProcessor::getAAXPluginIDForMainBusConfig (const AudioChannelSet& mai
AudioChannelSet::create7point1point2(),
AudioChannelSet::ambisonic (1),
AudioChannelSet::ambisonic (2),
AudioChannelSet::ambisonic (3)
AudioChannelSet::ambisonic (3),
AudioChannelSet::create5point0point2(),
AudioChannelSet::create5point1point2(),
AudioChannelSet::create5point0point4(),
AudioChannelSet::create5point1point4(),
AudioChannelSet::create7point0point4(),
AudioChannelSet::create7point1point4(),
AudioChannelSet::create7point0point6(),
AudioChannelSet::create7point1point6(),
AudioChannelSet::create9point0point4(),
AudioChannelSet::create9point1point4(),
AudioChannelSet::create9point0point6(),
AudioChannelSet::create9point1point6(),
AudioChannelSet::ambisonic (4),
AudioChannelSet::ambisonic (5),
AudioChannelSet::ambisonic (6),
AudioChannelSet::ambisonic (7)
};
const auto index = (int) std::distance (std::begin (sets), std::find (std::begin (sets), std::end (sets), set));