|
|
|
@@ -65,7 +65,7 @@ struct AAXClasses |
|
|
|
{
|
|
|
|
static void check (AAX_Result result)
|
|
|
|
{
|
|
|
|
jassert (result == AAX_SUCCESS);
|
|
|
|
jassert (result == AAX_SUCCESS); (void) result;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct FourCharConst
|
|
|
|
@@ -148,22 +148,19 @@ struct AAXClasses |
|
|
|
//==============================================================================
|
|
|
|
struct PluginInstanceInfo
|
|
|
|
{
|
|
|
|
PluginInstanceInfo (AudioProcessor* pluginInstance_)
|
|
|
|
: pluginInstance (pluginInstance_)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
PluginInstanceInfo (AudioProcessor& p) : pluginInstance (p) {}
|
|
|
|
|
|
|
|
void process (const float* const* inputs, float* const* outputs, const int bufferSize)
|
|
|
|
void process (const float* const* inputs, float* const* outputs, const int bufferSize, const bool bypass)
|
|
|
|
{
|
|
|
|
const int numIns = pluginInstance->getNumInputChannels();
|
|
|
|
const int numOuts = pluginInstance->getNumOutputChannels();
|
|
|
|
const int numIns = pluginInstance.getNumInputChannels();
|
|
|
|
const int numOuts = pluginInstance.getNumOutputChannels();
|
|
|
|
|
|
|
|
if (numOuts >= numIns)
|
|
|
|
{
|
|
|
|
for (int i = 0; i < numIns; ++i)
|
|
|
|
memcpy (outputs[i], inputs[i], bufferSize * sizeof (float));
|
|
|
|
|
|
|
|
process (outputs, numOuts, bufferSize);
|
|
|
|
process (outputs, numOuts, bufferSize, bypass);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
@@ -181,11 +178,11 @@ struct AAXClasses |
|
|
|
for (int i = numOuts; i < numIns; ++i)
|
|
|
|
channels[i] = const_cast <float*> (inputs[i]);
|
|
|
|
|
|
|
|
process (channels, numIns, bufferSize);
|
|
|
|
process (channels, numIns, bufferSize, bypass);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void process (float* const* channels, const int numChans, const int bufferSize)
|
|
|
|
void process (float* const* channels, const int numChans, const int bufferSize, const bool bypass)
|
|
|
|
{
|
|
|
|
AudioSampleBuffer buffer (channels, numChans, bufferSize);
|
|
|
|
|
|
|
|
@@ -193,26 +190,16 @@ struct AAXClasses |
|
|
|
midiBuffer.clear();
|
|
|
|
|
|
|
|
{
|
|
|
|
const ScopedLock sl (pluginInstance->getCallbackLock());
|
|
|
|
pluginInstance->processBlock (buffer, midiBuffer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const ScopedLock sl (pluginInstance.getCallbackLock());
|
|
|
|
|
|
|
|
void bypass (float* const* inputs, float* const* outputs, int bufferSize)
|
|
|
|
{
|
|
|
|
const int numIns = pluginInstance->getNumInputChannels();
|
|
|
|
const int numOuts = pluginInstance->getNumOutputChannels();
|
|
|
|
|
|
|
|
for (int i = 0; i < numOuts; ++i)
|
|
|
|
{
|
|
|
|
if (i < numIns)
|
|
|
|
memcpy (outputs[i], inputs[i], sizeof (float) * bufferSize);
|
|
|
|
if (bypass)
|
|
|
|
pluginInstance.processBlockBypassed (buffer, midiBuffer);
|
|
|
|
else
|
|
|
|
zeromem (outputs[i], sizeof (float) * bufferSize);
|
|
|
|
pluginInstance.processBlock (buffer, midiBuffer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
AudioProcessor* pluginInstance;
|
|
|
|
AudioProcessor& pluginInstance;
|
|
|
|
MidiBuffer midiBuffer;
|
|
|
|
Array<float*> channelList;
|
|
|
|
|
|
|
|
@@ -257,20 +244,18 @@ struct AAXClasses |
|
|
|
{
|
|
|
|
if (component == nullptr)
|
|
|
|
{
|
|
|
|
JuceAAX_Parameters* params = dynamic_cast <JuceAAX_Parameters*> (GetEffectParameters());
|
|
|
|
jassert (params != nullptr);
|
|
|
|
|
|
|
|
if (params != nullptr)
|
|
|
|
if (JuceAAX_Parameters* params = dynamic_cast <JuceAAX_Parameters*> (GetEffectParameters()))
|
|
|
|
component = new ContentWrapperComponent (*this, params->getPluginInstance());
|
|
|
|
else
|
|
|
|
jassertfalse;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CreateViewContainer()
|
|
|
|
{
|
|
|
|
CreateViewContents();
|
|
|
|
void* nativeViewToAttachTo = GetViewContainerPtr();
|
|
|
|
|
|
|
|
if (nativeViewToAttachTo != nullptr)
|
|
|
|
if (void* nativeViewToAttachTo = GetViewContainerPtr())
|
|
|
|
{
|
|
|
|
#if JUCE_MAC
|
|
|
|
if (GetViewContainerType() == AAX_eViewContainer_Type_NSView)
|
|
|
|
@@ -322,11 +307,11 @@ struct AAXClasses |
|
|
|
class ContentWrapperComponent : public juce::Component
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
ContentWrapperComponent (JuceAAX_GUI& gui, AudioProcessor* plugin)
|
|
|
|
ContentWrapperComponent (JuceAAX_GUI& gui, AudioProcessor& plugin)
|
|
|
|
: owner (gui)
|
|
|
|
{
|
|
|
|
setOpaque (true);
|
|
|
|
addAndMakeVisible (pluginEditor = plugin->createEditorIfNeeded());
|
|
|
|
addAndMakeVisible (pluginEditor = plugin.createEditorIfNeeded());
|
|
|
|
setBounds (pluginEditor->getLocalBounds());
|
|
|
|
setBroughtToFrontOnMouseClick (true);
|
|
|
|
}
|
|
|
|
@@ -378,9 +363,9 @@ struct AAXClasses |
|
|
|
JuceAAX_Parameters()
|
|
|
|
{
|
|
|
|
pluginInstance = createPluginFilter();
|
|
|
|
jassert (pluginInstance != nullptr); // your createPluginFilter() method must return an object!
|
|
|
|
|
|
|
|
if (pluginInstance != nullptr)
|
|
|
|
pluginInstance->wrapperType = AudioProcessor::wrapperType_AAX;
|
|
|
|
pluginInstance->wrapperType = AudioProcessor::wrapperType_AAX;
|
|
|
|
}
|
|
|
|
|
|
|
|
static AAX_CEffectParameters* AAX_CALLBACK Create() { return new JuceAAX_Parameters(); }
|
|
|
|
@@ -408,7 +393,7 @@ struct AAXClasses |
|
|
|
jassert (numObjects == 1); // not sure how to handle more than one..
|
|
|
|
|
|
|
|
for (size_t i = 0; i < numObjects; ++i)
|
|
|
|
new (objects + i) PluginInstanceInfo (pluginInstance);
|
|
|
|
new (objects + i) PluginInstanceInfo (*pluginInstance);
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
@@ -431,7 +416,7 @@ struct AAXClasses |
|
|
|
//return AAX_ERROR_INVALID_FIELD_INDEX;
|
|
|
|
}
|
|
|
|
|
|
|
|
AudioProcessor* getPluginInstance() const noexcept { return pluginInstance; }
|
|
|
|
AudioProcessor& getPluginInstance() const noexcept { return *pluginInstance; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
void addBypassParameter()
|
|
|
|
@@ -467,9 +452,9 @@ struct AAXClasses |
|
|
|
int32_t bufferSize = 0;
|
|
|
|
check (Controller()->GetSignalLatency (&bufferSize));
|
|
|
|
|
|
|
|
AudioProcessor* audioProcessor = getPluginInstance();
|
|
|
|
audioProcessor->setPlayConfigDetails (numberOfInputChannels, numberOfOutputChannels, sampleRate, bufferSize);
|
|
|
|
audioProcessor->prepareToPlay (sampleRate, bufferSize);
|
|
|
|
AudioProcessor& audioProcessor = getPluginInstance();
|
|
|
|
audioProcessor.setPlayConfigDetails (numberOfInputChannels, numberOfOutputChannels, sampleRate, bufferSize);
|
|
|
|
audioProcessor.prepareToPlay (sampleRate, bufferSize);
|
|
|
|
}
|
|
|
|
|
|
|
|
JUCELibraryRefCount juceCount;
|
|
|
|
@@ -487,10 +472,8 @@ struct AAXClasses |
|
|
|
{
|
|
|
|
const JUCEAlgorithmContext& i = **iter;
|
|
|
|
|
|
|
|
if (*(i.bypass) != 0)
|
|
|
|
i.pluginInstance->bypass (i.inputChannels, i.outputChannels, *(i.bufferSize));
|
|
|
|
else
|
|
|
|
i.pluginInstance->process (i.inputChannels, i.outputChannels, *(i.bufferSize));
|
|
|
|
i.pluginInstance->process (i.inputChannels, i.outputChannels,
|
|
|
|
*(i.bufferSize), *(i.bypass) != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -544,9 +527,7 @@ struct AAXClasses |
|
|
|
|
|
|
|
for (int i = 0; i < numConfigs; ++i)
|
|
|
|
{
|
|
|
|
AAX_IComponentDescriptor* const desc = descriptor.NewComponentDescriptor();
|
|
|
|
|
|
|
|
if (desc != nullptr)
|
|
|
|
if (AAX_IComponentDescriptor* const desc = descriptor.NewComponentDescriptor())
|
|
|
|
{
|
|
|
|
createDescriptor (*desc,
|
|
|
|
channelConfigs [i][0],
|
|
|
|
@@ -563,20 +544,21 @@ AAX_Result JUCE_CDECL GetEffectDescriptions (AAX_ICollection* collection) |
|
|
|
{
|
|
|
|
AAXClasses::JUCELibraryRefCount libraryRefCount;
|
|
|
|
|
|
|
|
AAX_IEffectDescriptor* const descriptor = collection->NewDescriptor();
|
|
|
|
if (descriptor == nullptr)
|
|
|
|
return AAX_ERROR_NULL_OBJECT;
|
|
|
|
if (AAX_IEffectDescriptor* const descriptor = collection->NewDescriptor())
|
|
|
|
{
|
|
|
|
AAXClasses::getPlugInDescription (*descriptor);
|
|
|
|
collection->AddEffect (JUCE_STRINGIFY (JucePlugin_AAXIdentifier), descriptor);
|
|
|
|
|
|
|
|
AAXClasses::getPlugInDescription (*descriptor);
|
|
|
|
collection->AddEffect (JUCE_STRINGIFY (JucePlugin_AAXIdentifier), descriptor);
|
|
|
|
collection->SetManufacturerName (JucePlugin_Manufacturer);
|
|
|
|
collection->AddPackageName (JucePlugin_Desc);
|
|
|
|
collection->AddPackageName (JucePlugin_Name);
|
|
|
|
collection->AddPackageName (AAXClasses::FourCharConst (JucePlugin_PluginCode).asString);
|
|
|
|
collection->SetPackageVersion (JucePlugin_VersionCode);
|
|
|
|
|
|
|
|
collection->SetManufacturerName (JucePlugin_Manufacturer);
|
|
|
|
collection->AddPackageName (JucePlugin_Desc);
|
|
|
|
collection->AddPackageName (JucePlugin_Name);
|
|
|
|
collection->AddPackageName (AAXClasses::FourCharConst (JucePlugin_PluginCode).asString);
|
|
|
|
collection->SetPackageVersion (JucePlugin_VersionCode);
|
|
|
|
return AAX_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
return AAX_SUCCESS;
|
|
|
|
return AAX_ERROR_NULL_OBJECT;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|