|
|
@@ -162,22 +162,53 @@ 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_Stereo, { AudioChannelSet::left, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
|
|
|
|
{ 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_LCRS, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::centreSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
|
|
|
|
{ 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_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_1, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
|
|
|
|
{ AAX_eStemFormat_6_0, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
|
|
|
|
{ AAX_eStemFormat_6_1, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround, AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
|
|
|
|
{ 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 } },
|
|
|
|
{ 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 } },
|
|
|
|
{ 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 } },
|
|
|
|
{ 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 } },
|
|
|
|
{ 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 } },
|
|
|
|
{ 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 } },
|
|
|
|
{ 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_Stereo, { AudioChannelSet::left, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown,
|
|
|
|
AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
|
|
|
|
|
|
|
|
{ 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_LCRS, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::centreSurround, AudioChannelSet::unknown,
|
|
|
|
AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
|
|
|
|
|
|
|
|
{ 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_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_1, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround,
|
|
|
|
AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
|
|
|
|
|
|
|
|
{ AAX_eStemFormat_6_0, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround,
|
|
|
|
AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
|
|
|
|
|
|
|
|
{ AAX_eStemFormat_6_1, { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround,
|
|
|
|
AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
|
|
|
|
|
|
|
|
{ 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 } },
|
|
|
|
|
|
|
|
{ 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 } },
|
|
|
|
|
|
|
|
{ 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 } },
|
|
|
|
|
|
|
|
{ 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 } },
|
|
|
|
|
|
|
|
{ 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 } },
|
|
|
|
|
|
|
|
{ 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 } },
|
|
|
|
};
|
|
|
|
|
|
|
|
static AAX_EStemFormat aaxFormats[] =
|
|
|
@@ -624,6 +655,8 @@ namespace AAXClasses |
|
|
|
|
|
|
|
static void AAX_CALLBACK algorithmProcessCallback (JUCEAlgorithmContext* const instancesBegin[], const void* const instancesEnd);
|
|
|
|
|
|
|
|
static Array<JuceAAX_Processor*> activeProcessors;
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
class JuceAAX_Processor : public AAX_CEffectParameters,
|
|
|
|
public juce::AudioPlayHead,
|
|
|
@@ -642,11 +675,30 @@ namespace AAXClasses |
|
|
|
rebuildChannelMapArrays();
|
|
|
|
|
|
|
|
AAX_CEffectParameters::GetNumberOfChunks (&juceChunkIndex);
|
|
|
|
activeProcessors.add (this);
|
|
|
|
}
|
|
|
|
|
|
|
|
~JuceAAX_Processor()
|
|
|
|
{
|
|
|
|
activeProcessors.removeAllInstancesOf (this);
|
|
|
|
}
|
|
|
|
|
|
|
|
static AAX_CEffectParameters* AAX_CALLBACK Create()
|
|
|
|
{
|
|
|
|
PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_AAX;
|
|
|
|
|
|
|
|
if (PluginHostType::jucePlugInIsRunningInAudioSuiteFn == nullptr)
|
|
|
|
{
|
|
|
|
PluginHostType::jucePlugInIsRunningInAudioSuiteFn = [] (AudioProcessor& processor)
|
|
|
|
{
|
|
|
|
for (auto* p : activeProcessors)
|
|
|
|
if (&p->getPluginInstance() == &processor)
|
|
|
|
return p->isInAudioSuite();
|
|
|
|
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
return new JuceAAX_Processor();
|
|
|
|
}
|
|
|
|
|
|
|
@@ -1313,6 +1365,14 @@ namespace AAXClasses |
|
|
|
return foundValid;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool isInAudioSuite()
|
|
|
|
{
|
|
|
|
AAX_CBoolean res;
|
|
|
|
Controller()->GetIsAudioSuite (&res);
|
|
|
|
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
friend class JuceAAX_GUI;
|
|
|
|
friend void AAX_CALLBACK AAXClasses::algorithmProcessCallback (JUCEAlgorithmContext* const instancesBegin[], const void* const instancesEnd);
|
|
|
@@ -1501,10 +1561,6 @@ namespace AAXClasses |
|
|
|
bool getMainBusFormats (AudioChannelSet& inputSet, AudioChannelSet& outputSet)
|
|
|
|
{
|
|
|
|
auto& audioProcessor = getPluginInstance();
|
|
|
|
#if ! JucePlugin_IsMidiEffect
|
|
|
|
auto inputBuses = audioProcessor.getBusCount (true);
|
|
|
|
auto outputBuses = audioProcessor.getBusCount (false);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if JucePlugin_IsMidiEffect
|
|
|
|
// MIDI effect plug-ins do not support any audio channels
|
|
|
@@ -1514,24 +1570,25 @@ namespace AAXClasses |
|
|
|
inputSet = outputSet = AudioChannelSet();
|
|
|
|
return true;
|
|
|
|
#else
|
|
|
|
auto inputBuses = audioProcessor.getBusCount (true);
|
|
|
|
auto outputBuses = audioProcessor.getBusCount (false);
|
|
|
|
|
|
|
|
AAX_EStemFormat inputStemFormat = AAX_eStemFormat_None;
|
|
|
|
check (Controller()->GetInputStemFormat (&inputStemFormat));
|
|
|
|
|
|
|
|
AAX_EStemFormat outputStemFormat = AAX_eStemFormat_None;
|
|
|
|
check (Controller()->GetOutputStemFormat (&outputStemFormat));
|
|
|
|
|
|
|
|
#if JucePlugin_IsSynth
|
|
|
|
if (inputBuses == 0)
|
|
|
|
inputStemFormat = AAX_eStemFormat_None;
|
|
|
|
#endif
|
|
|
|
#if JucePlugin_IsSynth
|
|
|
|
if (inputBuses == 0)
|
|
|
|
inputStemFormat = AAX_eStemFormat_None;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
inputSet = (inputBuses > 0 ? channelSetFromStemFormat (inputStemFormat, false) : AudioChannelSet());
|
|
|
|
outputSet = (outputBuses > 0 ? channelSetFromStemFormat (outputStemFormat, false) : AudioChannelSet());
|
|
|
|
|
|
|
|
if ( (inputSet == AudioChannelSet::disabled() && inputStemFormat != AAX_eStemFormat_None)
|
|
|
|
|| (outputSet == AudioChannelSet::disabled() && outputStemFormat != AAX_eStemFormat_None)
|
|
|
|
|| (inputSet != AudioChannelSet::disabled() && inputBuses == 0)
|
|
|
|
|| (outputSet != AudioChannelSet::disabled() && outputBuses == 0))
|
|
|
|
if ((inputSet == AudioChannelSet::disabled() && inputStemFormat != AAX_eStemFormat_None) || (outputSet == AudioChannelSet::disabled() && outputStemFormat != AAX_eStemFormat_None)
|
|
|
|
|| (inputSet != AudioChannelSet::disabled() && inputBuses == 0) || (outputSet != AudioChannelSet::disabled() && outputBuses == 0))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
|
|
@@ -1586,6 +1643,27 @@ namespace AAXClasses |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isInAudioSuite())
|
|
|
|
{
|
|
|
|
// AudioSuite doesnt support multiple output buses
|
|
|
|
for (int i = 1; i < newLayout.outputBuses.size(); ++i)
|
|
|
|
newLayout.outputBuses.getReference (i) = AudioChannelSet::disabled();
|
|
|
|
|
|
|
|
if (! audioProcessor.checkBusesLayoutSupported (newLayout))
|
|
|
|
{
|
|
|
|
// your plug-in needs to support a single output bus if running in AudioSuite
|
|
|
|
jassertfalse;
|
|
|
|
|
|
|
|
if (isPrepared)
|
|
|
|
{
|
|
|
|
isPrepared = false;
|
|
|
|
audioProcessor.releaseResources();
|
|
|
|
}
|
|
|
|
|
|
|
|
return AAX_ERROR_UNIMPLEMENTED;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const bool layoutChanged = (oldLayout != newLayout);
|
|
|
|
|
|
|
|
if (layoutChanged)
|
|
|
|