Thanks for the compliments :-)
There are two options IMHO,
a) simply change the sideLeft against surroundLeft and right the same:
AudioChannelSet AudioChannelSet::create5point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << sideLeft) | (1u << sideRight)); }
AudioChannelSet AudioChannelSet::create5point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << subbass) | (1u << sideLeft) | (1u << sideRight)); }
AudioChannelSet AudioChannelSet::create6point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << sideLeft) | (1u << sideRight) | (1u << surround)); }
AudioChannelSet AudioChannelSet::create6point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << subbass) | (1u << sideLeft) | (1u << sideRight) | (1u << surround)); }
AudioChannelSet AudioChannelSet::create7point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << sideLeft) | (1u << sideRight) | (1u << surroundLeft) | (1u << surroundRight)); }
AudioChannelSet AudioChannelSet::create7point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << subbass) | (1u << sideLeft) | (1u << sideRight) | (1u << surroundLeft) | (1u << surroundRight)); }
Pro: no changes needed in the enums
Con: there will be people asking, why the surround format 5.x doesn't return the surroundLeft / surroundRight channels...
b) drop the name sideLeft and sideRight. Instead add the rearLeft and rearRight. This way the names are the same like in Apples logic.
This changes also the mapping in the VST wrapper.
AudioChannelSet AudioChannelSet::create5point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << surroundLeft) | (1u << surroundRight)); }
AudioChannelSet AudioChannelSet::create5point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << subbass) | (1u << surroundLeft) | (1u << surroundRight)); }
AudioChannelSet AudioChannelSet::create6point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << surroundLeft) | (1u << surroundRight) | (1u << surround)); }
AudioChannelSet AudioChannelSet::create6point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << subbass) | (1u << surroundLeft) | (1u << surroundRight) | (1u << surround)); }
AudioChannelSet AudioChannelSet::create7point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << surroundLeft) | (1u << surroundRight) | (1u << rearLeft) | (1u << rearRight)); }
AudioChannelSet AudioChannelSet::create7point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << subbass) | (1u << surroundLeft) | (1u << surroundRight) | (1u << rearLeft) | (1u << rearRight)); }
in juce_VST3Common.h:
static inline Steinberg::Vst::Speaker getSpeakerType (AudioChannelSet::ChannelType type) noexcept
{
using namespace Steinberg::Vst;
switch (type)
{
case AudioChannelSet::left: return kSpeakerL;
case AudioChannelSet::right: return kSpeakerR;
case AudioChannelSet::centre: return kSpeakerC;
case AudioChannelSet::subbass: return kSpeakerLfe;
case AudioChannelSet::surroundLeft: return kSpeakerSl;
case AudioChannelSet::surroundRight: return kSpeakerSr;
case AudioChannelSet::centreLeft: return kSpeakerLc;
case AudioChannelSet::centreRight: return kSpeakerRc;
case AudioChannelSet::surround: return kSpeakerS;
case AudioChannelSet::rearLeft: return kSpeakerLs;
case AudioChannelSet::rearRight: return kSpeakerRs;
case AudioChannelSet::topMiddle: return kSpeakerTm;
case AudioChannelSet::topFrontLeft: return kSpeakerTfl;
case AudioChannelSet::topFrontCentre: return kSpeakerTfc;
case AudioChannelSet::topFrontRight: return kSpeakerTfr;
case AudioChannelSet::topRearLeft: return kSpeakerTrl;
case AudioChannelSet::topRearCentre: return kSpeakerTrc;
case AudioChannelSet::topRearRight: return kSpeakerTrr;
case AudioChannelSet::subbass2: return kSpeakerLfe2;
default: break;
}
return 0;
}
static inline AudioChannelSet::ChannelType getChannelType (Steinberg::Vst::Speaker type) noexcept
{
using namespace Steinberg::Vst;
switch (type)
{
case kSpeakerL: return AudioChannelSet::left;
case kSpeakerR: return AudioChannelSet::right;
case kSpeakerC: return AudioChannelSet::centre;
case kSpeakerLfe: return AudioChannelSet::subbass;
case kSpeakerLs: return AudioChannelSet::rearLeft;
case kSpeakerRs: return AudioChannelSet::rearRight;
case kSpeakerLc: return AudioChannelSet::centreLeft;
case kSpeakerRc: return AudioChannelSet::centreRight;
case kSpeakerS: return AudioChannelSet::surround;
case kSpeakerSl: return AudioChannelSet::surroundLeft;
case kSpeakerSr: return AudioChannelSet::surroundRight;
case kSpeakerTm: return AudioChannelSet::topMiddle;
case kSpeakerTfl: return AudioChannelSet::topFrontLeft;
case kSpeakerTfc: return AudioChannelSet::topFrontCentre;
case kSpeakerTfr: return AudioChannelSet::topFrontRight;
case kSpeakerTrl: return AudioChannelSet::topRearLeft;
case kSpeakerTrc: return AudioChannelSet::topRearCentre;
case kSpeakerTrr: return AudioChannelSet::topRearRight;
case kSpeakerLfe2: return AudioChannelSet::subbass2;
default: break;
}
return AudioChannelSet::unknown;
}
Pro: channels named surround represent the more dominant surround channels
Con: enum names changes -> compilation breaks / people accustomed to the VST names might look for the sideLeft and sideRight names.
Personally I would go for version b, sticking with apples names...
And for double check AAX: they have no channel name enum, so nothing can break. And in the comments in AAX_Enums.h they simply have different abbreviations in 5.x and 7.x:
AAX_eStemFormat_5_0 = AAX_STEM_FORMAT ( 5, 5 ), ///< L C R Ls Rs
AAX_eStemFormat_5_1 = AAX_STEM_FORMAT ( 6, 6 ), ///< L C R Ls Rs LFE
[...]
AAX_eStemFormat_7_0_DTS = AAX_STEM_FORMAT ( 11, 7 ), ///< L C R Lss Rss Lsr Rsr
AAX_eStemFormat_7_1_DTS = AAX_STEM_FORMAT ( 12, 8 ), ///< L C R Lss Rss Lsr Rsr LFE
Ls becomes either Lss or Lsr, we can chose ourselves... The definition is only in the create5point1 etc.
This really sounds like an endless mountain of problems and discussions, I don't envy you for that job. Keep your head up, it's gonna be good :-)
Best, daniel