diff --git a/BREAKING-CHANGES.txt b/BREAKING-CHANGES.txt
index 2c54649b35..8f98892fd3 100644
--- a/BREAKING-CHANGES.txt
+++ b/BREAKING-CHANGES.txt
@@ -4,6 +4,31 @@ JUCE breaking changes
develop
=======
+Change
+------
+AudioProcessor::getAAXPluginIDForMainBusConfig() has been deprecated.
+
+Possible Issues
+---------------
+Any AudioProcessor overriding this method will fail to compile.
+
+Workaround
+----------
+- Create an object which inherits from AAXClientExtensions.
+- In the object override and implement getPluginIDForMainBusConfig().
+- In the AudioProcessor override getAAXClientExtensions() and return a pointer
+ to the object.
+
+Rationale
+---------
+Additional AAX specific functionality was required in the audio processor.
+Rather than continuing to grow and expand the AudioProcessor class with format
+specific functionality, separating this concern into a new class allows for
+greater expansion for those that need it without burdening those that don't.
+Moving this function into this class improves consistency both with the new
+functionality and with similar functionality for the VST2 and VST3 formats.
+
+
Change
------
Unique device IDs on Windows have been updated to use a more reliable SMBIOS
@@ -24,8 +49,9 @@ to switch to using SystemStats::getMachineIdentifiers() instead.
Rationale
---------
-This update ensures the generation of more stable and reliable unique device IDs,
-while also maintaining backward compatibility with the previous ID generation methods.
+This update ensures the generation of more stable and reliable unique device
+IDs, while also maintaining backward compatibility with the previous ID
+generation methods.
Change
diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
index 635a2d1b4b..66c66df04e 100644
--- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
+++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
@@ -785,6 +785,8 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.h"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.cpp"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp"
@@ -807,9 +809,9 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_audio_processors/utilities/juce_PluginHostType.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_audio_processors/juce_audio_processors_ara.cpp"
@@ -2844,6 +2846,8 @@ set_source_files_properties(
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.h"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.cpp"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp"
@@ -2866,9 +2870,9 @@ set_source_files_properties(
"../../../../../modules/juce_audio_processors/utilities/juce_PluginHostType.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_audio_processors/juce_audio_processors_ara.cpp"
diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
index 6aa086618c..06bb5ff33e 100644
--- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
@@ -992,6 +992,9 @@
true
+
+ true
+
true
@@ -1022,7 +1025,7 @@
true
-
+
true
@@ -3204,6 +3207,7 @@
+
@@ -3216,8 +3220,8 @@
+
-
diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
index f178355a52..862d9fbdf6 100644
--- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
@@ -1588,6 +1588,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1618,7 +1621,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4836,6 +4839,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4872,10 +4878,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
index 3dbde96cec..5fc1879092 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
@@ -992,6 +992,9 @@
true
+
+ true
+
true
@@ -1022,7 +1025,7 @@
true
-
+
true
@@ -3204,6 +3207,7 @@
+
@@ -3216,8 +3220,8 @@
+
-
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
index f60a5e9ce9..39f25b4a8b 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
@@ -1588,6 +1588,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1618,7 +1621,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4836,6 +4839,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4872,10 +4878,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
index 649ad32b5b..a99ce6e0e9 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
@@ -992,6 +992,9 @@
true
+
+ true
+
true
@@ -1022,7 +1025,7 @@
true
-
+
true
@@ -3204,6 +3207,7 @@
+
@@ -3216,8 +3220,8 @@
+
-
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
index 02ec327c69..95104d169c 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
@@ -1588,6 +1588,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1618,7 +1621,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4836,6 +4839,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4872,10 +4878,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/examples/Plugins/ReaperEmbeddedViewPluginDemo.h b/examples/Plugins/ReaperEmbeddedViewPluginDemo.h
index dbc5f71877..ea0065d54e 100644
--- a/examples/Plugins/ReaperEmbeddedViewPluginDemo.h
+++ b/examples/Plugins/ReaperEmbeddedViewPluginDemo.h
@@ -104,6 +104,8 @@ struct EmbeddedViewListener
virtual Steinberg::TPtrInt handledEmbeddedUIMessage (int msg,
Steinberg::TPtrInt parm2,
Steinberg::TPtrInt parm3) = 0;
+
+ virtual void setGlobalBypassFunction (void (*) (int)) = 0;
};
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wnon-virtual-dtor")
@@ -144,6 +146,85 @@ private:
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
+class VST2Extensions : public VSTCallbackHandler
+{
+public:
+ explicit VST2Extensions (EmbeddedViewListener& l)
+ : listener (l) {}
+
+ pointer_sized_int handleVstPluginCanDo (int32, pointer_sized_int, void* ptr, float) override
+ {
+ if (auto* str = static_cast (ptr))
+ {
+ if (strcmp (str, "hasCockosEmbeddedUI") == 0)
+ return 0xbeef0000;
+
+ if (strcmp (str, "hasCockosExtensions") == 0)
+ return 0xbeef0000;
+ }
+
+ return 0;
+ }
+
+ pointer_sized_int handleVstManufacturerSpecific (int32 index,
+ pointer_sized_int value,
+ void* ptr,
+ float opt) override
+ {
+ // The docstring at the top of reaper_plugin_fx_embed.h specifies
+ // that the index will always be effEditDraw, which is now deprecated.
+ if (index != __effEditDrawDeprecated)
+ return 0;
+
+ return (pointer_sized_int) listener.handledEmbeddedUIMessage ((int) opt,
+ (Steinberg::TPtrInt) value,
+ (Steinberg::TPtrInt) ptr);
+ }
+
+ void handleVstHostCallbackAvailable (std::function&& hostcb) override
+ {
+ char functionName[] = "BypassFxAllTracks";
+ listener.setGlobalBypassFunction (reinterpret_cast (hostcb ((int32_t) 0xdeadbeef, (int32_t) 0xdeadf00d, 0, functionName, 0.0)));
+ }
+
+private:
+ EmbeddedViewListener& listener;
+};
+
+class VST3Extensions : public VST3ClientExtensions
+{
+public:
+ explicit VST3Extensions (EmbeddedViewListener& l)
+ : listener (l) {}
+
+ int32_t queryIEditController (const Steinberg::TUID tuid, void** obj) override
+ {
+ if (embeddedUi.queryInterface (tuid, obj) == Steinberg::kResultOk)
+ return Steinberg::kResultOk;
+
+ *obj = nullptr;
+ return Steinberg::kNoInterface;
+ }
+
+ void setIHostApplication (Steinberg::FUnknown* ptr) override
+ {
+ if (ptr == nullptr)
+ return;
+
+ void* objPtr = nullptr;
+
+ if (ptr->queryInterface (reaper::IReaperHostApplication::iid, &objPtr) == Steinberg::kResultOk)
+ {
+ if (void* fnPtr = static_cast (objPtr)->getReaperApi ("BypassFxAllTracks"))
+ listener.setGlobalBypassFunction (reinterpret_cast (fnPtr));
+ }
+ }
+
+private:
+ EmbeddedViewListener& listener;
+ EmbeddedUI embeddedUi { listener };
+};
+
//==============================================================================
class Editor : public AudioProcessorEditor
{
@@ -182,8 +263,6 @@ private:
//==============================================================================
class ReaperEmbeddedViewDemo : public AudioProcessor,
- public VSTCallbackHandler,
- public VST3ClientExtensions,
private EmbeddedViewListener,
private Timer
{
@@ -236,63 +315,8 @@ public:
false).readFloat());
}
- int32_t queryIEditController (const Steinberg::TUID tuid, void** obj) override
- {
- if (embeddedUi.queryInterface (tuid, obj) == Steinberg::kResultOk)
- return Steinberg::kResultOk;
-
- *obj = nullptr;
- return Steinberg::kNoInterface;
- }
-
- void setIHostApplication (Steinberg::FUnknown* ptr) override
- {
- if (ptr == nullptr)
- return;
-
- void* objPtr = nullptr;
-
- if (ptr->queryInterface (reaper::IReaperHostApplication::iid, &objPtr) == Steinberg::kResultOk)
- {
- if (void* fnPtr = static_cast (objPtr)->getReaperApi ("BypassFxAllTracks"))
- globalBypassFn = reinterpret_cast (fnPtr);
- }
- }
-
- pointer_sized_int handleVstPluginCanDo (int32, pointer_sized_int, void* ptr, float) override
- {
- if (auto* str = static_cast (ptr))
- {
- if (strcmp (str, "hasCockosEmbeddedUI") == 0)
- return 0xbeef0000;
-
- if (strcmp (str, "hasCockosExtensions") == 0)
- return 0xbeef0000;
- }
-
- return 0;
- }
-
- pointer_sized_int handleVstManufacturerSpecific (int32 index,
- pointer_sized_int value,
- void* ptr,
- float opt) override
- {
- // The docstring at the top of reaper_plugin_fx_embed.h specifies
- // that the index will always be effEditDraw, which is now deprecated.
- if (index != __effEditDrawDeprecated)
- return 0;
-
- return (pointer_sized_int) handledEmbeddedUIMessage ((int) opt,
- (Steinberg::TPtrInt) value,
- (Steinberg::TPtrInt) ptr);
- }
-
- void handleVstHostCallbackAvailable (std::function&& hostcb) override
- {
- char functionName[] = "BypassFxAllTracks";
- globalBypassFn = reinterpret_cast (hostcb ((int32_t) 0xdeadbeef, (int32_t) 0xdeadf00d, 0, functionName, 0.0));
- }
+ VST2ClientExtensions* getVST2ClientExtensions() override { return &vst2Extensions; }
+ VST3ClientExtensions* getVST3ClientExtensions() override { return &vst3Extensions; }
private:
template
@@ -414,10 +438,14 @@ private:
return 0;
}
+ void setGlobalBypassFunction (void (*fn) (int)) override { globalBypassFn = fn; }
+
AudioParameterFloat* gain = nullptr;
void (*globalBypassFn) (int) = nullptr;
- EmbeddedUI embeddedUi { *this };
std::atomic storedLevel { 0.0f };
float levelToDraw = 0.0f;
+
+ VST2Extensions vst2Extensions { *this };
+ VST3Extensions vst3Extensions { *this };
};
diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
index e28de3083c..c2ee6310b1 100644
--- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
@@ -757,6 +757,8 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.h"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.cpp"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp"
@@ -779,9 +781,9 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_audio_processors/utilities/juce_PluginHostType.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_audio_processors/juce_audio_processors_ara.cpp"
@@ -2514,6 +2516,8 @@ set_source_files_properties(
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.h"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.cpp"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp"
@@ -2536,9 +2540,9 @@ set_source_files_properties(
"../../../../../modules/juce_audio_processors/utilities/juce_PluginHostType.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_audio_processors/juce_audio_processors_ara.cpp"
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
index d40810ae98..aee36638ec 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
@@ -973,6 +973,9 @@
true
+
+ true
+
true
@@ -1003,7 +1006,7 @@
true
-
+
true
@@ -2805,6 +2808,7 @@
+
@@ -2817,8 +2821,8 @@
+
-
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
index 689f9381de..4568206c30 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
@@ -1438,6 +1438,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1468,7 +1471,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4257,6 +4260,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4293,10 +4299,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
index 4650bcedde..1f27d52d7f 100644
--- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
@@ -790,6 +790,8 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.h"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.cpp"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp"
@@ -812,9 +814,9 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_audio_processors/utilities/juce_PluginHostType.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_audio_processors/juce_audio_processors_ara.cpp"
@@ -2702,6 +2704,8 @@ set_source_files_properties(
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.h"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.cpp"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp"
@@ -2724,9 +2728,9 @@ set_source_files_properties(
"../../../../../modules/juce_audio_processors/utilities/juce_PluginHostType.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_audio_processors/juce_audio_processors_ara.cpp"
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
index 68b1d39397..ec87885b73 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
@@ -981,6 +981,9 @@
true
+
+ true
+
true
@@ -1011,7 +1014,7 @@
true
-
+
true
@@ -2988,6 +2991,7 @@
+
@@ -3000,8 +3004,8 @@
+
-
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
index a0ff6b17e9..3cd5ae6558 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
@@ -1513,6 +1513,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1543,7 +1546,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4536,6 +4539,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4572,10 +4578,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
index cd734941d9..754e772f21 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
@@ -981,6 +981,9 @@
true
+
+ true
+
true
@@ -1011,7 +1014,7 @@
true
-
+
true
@@ -2988,6 +2991,7 @@
+
@@ -3000,8 +3004,8 @@
+
-
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
index c14ec7c3c5..0731c8b19d 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
@@ -1513,6 +1513,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1543,7 +1546,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4536,6 +4539,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4572,10 +4578,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
index 25d1d76e91..dbfd9533e6 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
@@ -981,6 +981,9 @@
true
+
+ true
+
true
@@ -1011,7 +1014,7 @@
true
-
+
true
@@ -2988,6 +2991,7 @@
+
@@ -3000,8 +3004,8 @@
+
-
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
index d05fd38560..f9e43cfb26 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
@@ -1513,6 +1513,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1543,7 +1546,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4536,6 +4539,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4572,10 +4578,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
index 82c8c2e513..cd4b759262 100644
--- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
+++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
@@ -761,6 +761,8 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.h"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.cpp"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp"
@@ -783,9 +785,9 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_audio_processors/utilities/juce_PluginHostType.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_audio_processors/juce_audio_processors_ara.cpp"
@@ -2598,6 +2600,8 @@ set_source_files_properties(
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.h"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.cpp"
"../../../../../modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterBool.h"
"../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp"
@@ -2620,9 +2624,9 @@ set_source_files_properties(
"../../../../../modules/juce_audio_processors/utilities/juce_PluginHostType.h"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp"
"../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp"
+ "../../../../../modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h"
"../../../../../modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp"
- "../../../../../modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h"
"../../../../../modules/juce_audio_processors/juce_audio_processors.cpp"
"../../../../../modules/juce_audio_processors/juce_audio_processors.mm"
"../../../../../modules/juce_audio_processors/juce_audio_processors_ara.cpp"
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
index 8d490ddbf7..83fa131667 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
@@ -973,6 +973,9 @@
true
+
+ true
+
true
@@ -1003,7 +1006,7 @@
true
-
+
true
@@ -2896,6 +2899,7 @@
+
@@ -2908,8 +2912,8 @@
+
-
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
index c216e50ae2..a6214b3502 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
@@ -1468,6 +1468,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1498,7 +1501,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4398,6 +4401,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4434,10 +4440,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
index e0cb48eb37..2db847c3d5 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
@@ -989,6 +989,9 @@
true
+
+ true
+
true
@@ -1019,7 +1022,7 @@
true
-
+
true
@@ -3054,6 +3057,7 @@
+
@@ -3066,8 +3070,8 @@
+
-
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
index ddd189d265..8007173095 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -1537,6 +1537,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1567,7 +1570,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4626,6 +4629,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4662,10 +4668,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
index cc596e814b..8a74c01266 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
@@ -989,6 +989,9 @@
true
+
+ true
+
true
@@ -1019,7 +1022,7 @@
true
-
+
true
@@ -3054,6 +3057,7 @@
+
@@ -3066,8 +3070,8 @@
+
-
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
index eb238e3165..b87b23c093 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -1537,6 +1537,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1567,7 +1570,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4626,6 +4629,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4662,10 +4668,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
index d9eb92d9c8..4bd9ebbc02 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
@@ -989,6 +989,9 @@
true
+
+ true
+
true
@@ -1019,7 +1022,7 @@
true
-
+
true
@@ -3054,6 +3057,7 @@
+
@@ -3066,8 +3070,8 @@
+
-
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
index b2e0114227..1df33f0f40 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -1537,6 +1537,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1567,7 +1570,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4626,6 +4629,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4662,10 +4668,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
index 48bc93caaf..d913190802 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
@@ -972,6 +972,9 @@
true
+
+ true
+
true
@@ -1002,7 +1005,7 @@
true
-
+
true
@@ -2872,6 +2875,7 @@
+
@@ -2884,8 +2888,8 @@
+
-
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
index 719440f3e5..9c39d38dae 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
@@ -1465,6 +1465,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -1495,7 +1498,7 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
@@ -4365,6 +4368,9 @@
JUCE Modules\juce_audio_processors\utilities\ARA
+
+ JUCE Modules\juce_audio_processors\utilities
+
JUCE Modules\juce_audio_processors\utilities
@@ -4401,10 +4407,10 @@
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
-
+
JUCE Modules\juce_audio_processors\utilities
diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp b/modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp
index 222a20483b..1b0140877b 100644
--- a/modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp
+++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp
@@ -2480,11 +2480,13 @@ namespace AAXClasses
properties->AddProperty (AAX_eProperty_InputStemFormat, static_cast (aaxInputFormat));
properties->AddProperty (AAX_eProperty_OutputStemFormat, static_cast (aaxOutputFormat));
+ const auto& extensions = processor.getAAXClientExtensions();
+
// This value needs to match the RTAS wrapper's Type ID, so that
// the host knows that the RTAS/AAX plugins are equivalent.
- const int32 pluginID = processor.getAAXPluginIDForMainBusConfig (fullLayout.getMainInputChannelSet(),
- fullLayout.getMainOutputChannelSet(),
- false);
+ const auto pluginID = extensions.getPluginIDForMainBusConfig (fullLayout.getMainInputChannelSet(),
+ fullLayout.getMainOutputChannelSet(),
+ false);
// The plugin id generated from your AudioProcessor's getAAXPluginIDForMainBusConfig callback
// it not unique. Please fix your implementation!
@@ -2495,9 +2497,9 @@ namespace AAXClasses
#if ! JucePlugin_AAXDisableAudioSuite
properties->AddProperty (AAX_eProperty_PlugInID_AudioSuite,
- processor.getAAXPluginIDForMainBusConfig (fullLayout.getMainInputChannelSet(),
- fullLayout.getMainOutputChannelSet(),
- true));
+ extensions.getPluginIDForMainBusConfig (fullLayout.getMainInputChannelSet(),
+ fullLayout.getMainOutputChannelSet(),
+ true));
#endif
#if JucePlugin_AAXDisableMultiMono
@@ -2601,11 +2603,13 @@ namespace AAXClasses
const int numMeters = addAAXMeters (*plugin, descriptor);
- #ifdef JucePlugin_AAXPageTableFile
- // optional page table setting - define this macro in your project if you want
- // to set this value - see Avid documentation for details about its format.
- descriptor.AddResourceInfo (AAX_eResourceType_PageTable, JucePlugin_AAXPageTableFile);
- #endif
+ const auto& extensions = plugin->getAAXClientExtensions();
+
+ if (const auto searchPath = extensions.getPageFileSearchPath().getFullPathName(); searchPath.isNotEmpty())
+ descriptor.AddResourceInfo (AAX_eResourceType_PageTableDir, searchPath.toRawUTF8());
+
+ if (const auto filename = extensions.getPageFileName(); filename.isNotEmpty())
+ descriptor.AddResourceInfo (AAX_eResourceType_PageTable, filename.toRawUTF8());
check (descriptor.AddProcPtr ((void*) JuceAAX_GUI::Create, kAAX_ProcPtrID_Create_EffectGUI));
check (descriptor.AddProcPtr ((void*) JuceAAX_Processor::Create, kAAX_ProcPtrID_Create_EffectParameters));
diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp
index e62cabb90d..50b6c321dc 100644
--- a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp
+++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp
@@ -1823,7 +1823,7 @@ private:
if (args.index == Vst2::effGetParamDisplay)
return handleCockosGetParameterText (args.value, args.ptr, args.opt);
- if (auto callbackHandler = dynamic_cast (processor.get()))
+ if (auto callbackHandler = processor->getVST2ClientExtensions())
return callbackHandler->handleVstManufacturerSpecific (args.index, args.value, args.ptr, args.opt);
return 0;
@@ -1882,7 +1882,7 @@ private:
if (matches ("hasCockosExtensions"))
return (int32) 0xbeef0000;
- if (auto callbackHandler = dynamic_cast (processor.get()))
+ if (auto callbackHandler = processor->getVST2ClientExtensions())
return callbackHandler->handleVstPluginCanDo (args.index, args.value, args.ptr, args.opt);
return 0;
@@ -2115,7 +2115,7 @@ namespace
auto* wrapper = new JuceVSTWrapper (audioMaster, std::move (processor));
auto* aEffect = wrapper->getAEffect();
- if (auto* callbackHandler = dynamic_cast (processorPtr))
+ if (auto* callbackHandler = processorPtr->getVST2ClientExtensions())
{
callbackHandler->handleVstHostCallbackAvailable ([audioMaster, aEffect] (int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt)
{
diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp
index 5daa3dae31..4ed1cdadf9 100644
--- a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp
+++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp
@@ -371,7 +371,7 @@ static QueryInterfaceResult queryAdditionalInterfaces (AudioProcessor* processor
void* obj = nullptr;
- if (auto* extensions = dynamic_cast (processor))
+ if (auto* extensions = processor->getVST3ClientExtensions())
{
const auto result = (extensions->*member) (targetIID, &obj);
return { result, obj };
@@ -1523,7 +1523,7 @@ private:
{
audioProcessor = newAudioProcessor;
- if (auto* extensions = dynamic_cast (audioProcessor->get()))
+ if (auto* extensions = audioProcessor->get()->getVST3ClientExtensions())
{
extensions->setIComponentHandler (componentHandler);
extensions->setIHostApplication (hostContext.get());
@@ -3082,7 +3082,7 @@ public:
{
if (isFirstBus)
{
- if (auto* extensions = dynamic_cast (pluginInstance))
+ if (auto* extensions = pluginInstance->getVST3ClientExtensions())
return extensions->getPluginHasMainInput() ? Vst::kMain : Vst::kAux;
return Vst::kMain;
@@ -3957,7 +3957,7 @@ public:
const ScopedJuceInitialiser_GUI libraryInitialiser;
auto filter = createPluginFilterOfType (AudioProcessor::WrapperType::wrapperType_VST3);
- auto* extensions = dynamic_cast (filter.get());
+ auto* extensions = filter->getVST3ClientExtensions();
if (extensions == nullptr || extensions->getCompatibleClasses().empty())
return kResultFalse;
diff --git a/modules/juce_audio_processors/juce_audio_processors.cpp b/modules/juce_audio_processors/juce_audio_processors.cpp
index c17745ef7e..27ed7c3290 100644
--- a/modules/juce_audio_processors/juce_audio_processors.cpp
+++ b/modules/juce_audio_processors/juce_audio_processors.cpp
@@ -222,7 +222,8 @@ private:
#include "utilities/juce_AudioProcessorValueTreeState.cpp"
#include "utilities/juce_PluginHostType.cpp"
#include "utilities/juce_NativeScaleFactorNotifier.cpp"
-#include "utilities/juce_VSTCallbackHandler.cpp"
+#include "utilities/juce_AAXClientExtensions.cpp"
+#include "utilities/juce_VST2ClientExtensions.cpp"
#include "utilities/ARA/juce_ARA_utils.cpp"
#include "format_types/juce_LV2PluginFormat.cpp"
diff --git a/modules/juce_audio_processors/juce_audio_processors.h b/modules/juce_audio_processors/juce_audio_processors.h
index aa618eeb71..e3d2b7a9ff 100644
--- a/modules/juce_audio_processors/juce_audio_processors.h
+++ b/modules/juce_audio_processors/juce_audio_processors.h
@@ -130,7 +130,8 @@
#endif
//==============================================================================
-#include "utilities/juce_VSTCallbackHandler.h"
+#include "utilities/juce_AAXClientExtensions.h"
+#include "utilities/juce_VST2ClientExtensions.h"
#include "utilities/juce_VST3ClientExtensions.h"
#include "utilities/juce_NativeScaleFactorNotifier.h"
#include "format_types/juce_ARACommon.h"
diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp
index c7e9f88a91..31422a588a 100644
--- a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp
+++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp
@@ -1183,71 +1183,6 @@ AudioProcessor::BusesProperties AudioProcessor::BusesProperties::withOutput (con
return retval;
}
-//==============================================================================
-int32 AudioProcessor::getAAXPluginIDForMainBusConfig (const AudioChannelSet& mainInputLayout,
- const AudioChannelSet& mainOutputLayout,
- const bool idForAudioSuite) const
-{
- int uniqueFormatId = 0;
-
- for (int dir = 0; dir < 2; ++dir)
- {
- const bool isInput = (dir == 0);
- auto& set = (isInput ? mainInputLayout : mainOutputLayout);
- int aaxFormatIndex = 0;
-
- const AudioChannelSet sets[]
- {
- AudioChannelSet::disabled(),
- AudioChannelSet::mono(),
- AudioChannelSet::stereo(),
- AudioChannelSet::createLCR(),
- AudioChannelSet::createLCRS(),
- AudioChannelSet::quadraphonic(),
- AudioChannelSet::create5point0(),
- AudioChannelSet::create5point1(),
- AudioChannelSet::create6point0(),
- AudioChannelSet::create6point1(),
- AudioChannelSet::create7point0(),
- AudioChannelSet::create7point1(),
- AudioChannelSet::create7point0SDDS(),
- AudioChannelSet::create7point1SDDS(),
- AudioChannelSet::create7point0point2(),
- AudioChannelSet::create7point1point2(),
- AudioChannelSet::ambisonic (1),
- AudioChannelSet::ambisonic (2),
- 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));
-
- if (index != numElementsInArray (sets))
- aaxFormatIndex = index;
- else
- jassertfalse;
-
- uniqueFormatId = (uniqueFormatId << 8) | aaxFormatIndex;
- }
-
- return (idForAudioSuite ? 0x6a796161 /* 'jyaa' */ : 0x6a636161 /* 'jcaa' */) + uniqueFormatId;
-}
-
//==============================================================================
const char* AudioProcessor::getWrapperTypeDescription (AudioProcessor::WrapperType type) noexcept
{
@@ -1266,6 +1201,63 @@ const char* AudioProcessor::getWrapperTypeDescription (AudioProcessor::WrapperTy
}
}
+//==============================================================================
+VST2ClientExtensions* AudioProcessor::getVST2ClientExtensions()
+{
+ if (auto* extensions = dynamic_cast (this))
+ {
+ // To silence this jassert there are two options:
+ //
+ // 1. - Override AudioProcessor::getVST2ClientExtensions() and
+ // return the "this" pointer.
+ //
+ // - This option has the advantage of being quick and easy,
+ // and avoids the above dynamic_cast.
+ //
+ // 2. - Create a new object that inherits from VST2ClientExtensions.
+ //
+ // - Port your existing functionality from the AudioProcessor
+ // to the new object.
+ //
+ // - Return a pointer to the object in AudioProcessor::getVST2ClientExtensions().
+ //
+ // - This option has the advantage of allowing you to break
+ // up your AudioProcessor into smaller composable objects.
+ jassertfalse;
+ return extensions;
+ }
+
+ return nullptr;
+}
+
+VST3ClientExtensions* AudioProcessor::getVST3ClientExtensions()
+{
+ if (auto* extensions = dynamic_cast (this))
+ {
+ // To silence this jassert there are two options:
+ //
+ // 1. - Override AudioProcessor::getVST3ClientExtensions() and
+ // return the "this" pointer.
+ //
+ // - This option has the advantage of being quick and easy,
+ // and avoids the above dynamic_cast.
+ //
+ // 2. - Create a new object that inherits from VST3ClientExtensions.
+ //
+ // - Port your existing functionality from the AudioProcessor
+ // to the new object.
+ //
+ // - Return a pointer to the object in AudioProcessor::getVST3ClientExtensions().
+ //
+ // - This option has the advantage of allowing you to break
+ // up your AudioProcessor into smaller composable objects.
+ jassertfalse;
+ return extensions;
+ }
+
+ return nullptr;
+}
+
//==============================================================================
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations")
JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4996)
diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.h b/modules/juce_audio_processors/processors/juce_AudioProcessor.h
index 27accb8a6f..9ae88c7b54 100644
--- a/modules/juce_audio_processors/processors/juce_AudioProcessor.h
+++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.h
@@ -40,9 +40,11 @@ namespace juce
plugin, you should implement a global function called createPluginFilter() which
creates and returns a new instance of your subclass.
+ @see AAXClientExtensions, VST2ClientExtensions, VST3ClientExtensions
+
@tags{Audio}
*/
-class JUCE_API AudioProcessor
+class JUCE_API AudioProcessor : private AAXClientExtensions
{
protected:
struct BusesProperties;
@@ -1176,18 +1178,30 @@ public:
void setRateAndBufferSizeDetails (double sampleRate, int blockSize) noexcept;
//==============================================================================
- /** AAX plug-ins need to report a unique "plug-in id" for every audio layout
- configuration that your AudioProcessor supports on the main bus. Override this
- function if you want your AudioProcessor to use a custom "plug-in id" (for example
- to stay backward compatible with older versions of JUCE).
-
- The default implementation will compute a unique integer from the input and output
- layout and add this value to the 4 character code 'jcaa' (for native AAX) or 'jyaa'
- (for AudioSuite plug-ins).
+ /** Returns a reference to an object that implements AAX specific information regarding
+ this AudioProcessor.
*/
- virtual int32 getAAXPluginIDForMainBusConfig (const AudioChannelSet& mainInputLayout,
- const AudioChannelSet& mainOutputLayout,
- bool idForAudioSuite) const;
+ virtual AAXClientExtensions& getAAXClientExtensions() { return *this; }
+
+ /** Returns a non-owning pointer to an object that implements VST2 specific information
+ regarding this AudioProcessor.
+
+ By default, for backwards compatibility, this will attempt to dynamic-cast this
+ AudioProcessor to VST2ClientExtensions.
+ It is recommended to override this function to return a pointer directly to an object
+ of the correct type in order to avoid this dynamic cast.
+ */
+ virtual VST2ClientExtensions* getVST2ClientExtensions();
+
+ /** Returns a non-owning pointer to an object that implements VST3 specific information
+ regarding this AudioProcessor.
+
+ By default, for backwards compatibility, this will attempt to dynamic-cast this
+ AudioProcessor to VST3ClientExtensions.
+ It is recommended to override this function to return a pointer directly to an object
+ of the correct type in order to avoid this dynamic cast.
+ */
+ virtual VST3ClientExtensions* getVST3ClientExtensions();
//==============================================================================
/** Some plug-ins support sharing response curve data with the host so that it can
@@ -1444,6 +1458,15 @@ public:
#endif
private:
+ /** This is deprecated. Instead, create an AAXClientExtensions object,
+ implement getPluginIDForMainBusConfig() and return the object from
+ getAAXClientExtensions().
+ */
+ [[deprecated ("Override AAXClientExtensions::getPluginIDForMainBusConfig() instead")]]
+ virtual int32 getAAXPluginIDForMainBusConfig (const AudioChannelSet&,
+ const AudioChannelSet&,
+ const bool) const { return {}; }
+
//==============================================================================
struct InOutChannelPair
{
diff --git a/modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp b/modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp
new file mode 100644
index 0000000000..d11ed295dd
--- /dev/null
+++ b/modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp
@@ -0,0 +1,103 @@
+/*
+ ==============================================================================
+
+ This file is part of the JUCE library.
+ Copyright (c) 2022 - Raw Material Software Limited
+
+ JUCE is an open source library subject to commercial or open-source
+ licensing.
+
+ By using JUCE, you agree to the terms of both the JUCE 7 End-User License
+ Agreement and JUCE Privacy Policy.
+
+ End User License Agreement: www.juce.com/juce-7-licence
+ Privacy Policy: www.juce.com/juce-privacy-policy
+
+ Or: You may also use this code under the terms of the GPL v3 (see
+ www.gnu.org/licenses).
+
+ 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
+{
+
+int32 AAXClientExtensions::getPluginIDForMainBusConfig (const AudioChannelSet& mainInputLayout,
+ const AudioChannelSet& mainOutputLayout,
+ bool idForAudioSuite) const
+{
+ int uniqueFormatId = 0;
+
+ for (int dir = 0; dir < 2; ++dir)
+ {
+ const bool isInput = (dir == 0);
+ auto& set = (isInput ? mainInputLayout : mainOutputLayout);
+ int aaxFormatIndex = 0;
+
+ const AudioChannelSet sets[]
+ {
+ AudioChannelSet::disabled(),
+ AudioChannelSet::mono(),
+ AudioChannelSet::stereo(),
+ AudioChannelSet::createLCR(),
+ AudioChannelSet::createLCRS(),
+ AudioChannelSet::quadraphonic(),
+ AudioChannelSet::create5point0(),
+ AudioChannelSet::create5point1(),
+ AudioChannelSet::create6point0(),
+ AudioChannelSet::create6point1(),
+ AudioChannelSet::create7point0(),
+ AudioChannelSet::create7point1(),
+ AudioChannelSet::create7point0SDDS(),
+ AudioChannelSet::create7point1SDDS(),
+ AudioChannelSet::create7point0point2(),
+ AudioChannelSet::create7point1point2(),
+ AudioChannelSet::ambisonic (1),
+ AudioChannelSet::ambisonic (2),
+ 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));
+
+ if (index != numElementsInArray (sets))
+ aaxFormatIndex = index;
+ else
+ jassertfalse;
+
+ uniqueFormatId = (uniqueFormatId << 8) | aaxFormatIndex;
+ }
+
+ return (idForAudioSuite ? 0x6a796161 /* 'jyaa' */ : 0x6a636161 /* 'jcaa' */) + uniqueFormatId;
+}
+
+String AAXClientExtensions::getPageFileName() const
+{
+ #ifdef JucePlugin_AAXPageTableFile
+ #warning "JucePlugin_AAXPageTableFile is deprecated, instead implement AAXClientExtensions::getPageFileName()"
+ return JucePlugin_AAXPageTableFile;
+ #else
+ return {};
+ #endif
+}
+
+} // namespace juce
diff --git a/modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h b/modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h
new file mode 100644
index 0000000000..870ab966fd
--- /dev/null
+++ b/modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h
@@ -0,0 +1,83 @@
+/*
+ ==============================================================================
+
+ This file is part of the JUCE library.
+ Copyright (c) 2022 - Raw Material Software Limited
+
+ JUCE is an open source library subject to commercial or open-source
+ licensing.
+
+ By using JUCE, you agree to the terms of both the JUCE 7 End-User License
+ Agreement and JUCE Privacy Policy.
+
+ End User License Agreement: www.juce.com/juce-7-licence
+ Privacy Policy: www.juce.com/juce-privacy-policy
+
+ Or: You may also use this code under the terms of the GPL v3 (see
+ www.gnu.org/licenses).
+
+ 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
+{
+
+/**
+ An interface to allow an AudioProcessor to implement extended AAX-specific functionality.
+
+ To use this class, create an object that inherits from it, implement the methods, then return
+ a pointer to the object in your AudioProcessor `getAAXClientExtensions()` method.
+
+ @see AudioProcessor, VST2ClientExtensions, VST3ClientExtensions
+
+ @tags{Audio}
+*/
+struct AAXClientExtensions
+{
+ virtual ~AAXClientExtensions() = default;
+
+ /** AAX plug-ins need to report a unique "plug-in id" for every audio layout
+ configuration that your AudioProcessor supports on the main bus. Override this
+ function if you want your AudioProcessor to use a custom "plug-in id" (for example
+ to stay backward compatible with older versions of JUCE).
+
+ The default implementation will compute a unique integer from the input and output
+ layout and add this value to the 4 character code 'jcaa' (for native AAX) or 'jyaa'
+ (for AudioSuite plug-ins).
+ */
+ virtual int32 getPluginIDForMainBusConfig (const AudioChannelSet& mainInputLayout,
+ const AudioChannelSet& mainOutputLayout,
+ bool idForAudioSuite) const;
+
+ /** Returns an optional filename (including extension) for a page file to be used.
+
+ A page file allows an AAX plugin to specify how its parameters are displayed on
+ various control surfaces. For more information read the Page Table Guide in the
+ AAX SDK documentation.
+
+ By default this file will be searched for in `*.aaxplugin/Contents/Resources`.
+
+ @see getPageFileSearchPath
+ */
+ virtual String getPageFileName() const;
+
+ /** Optionally returns a search path for finding a page table file.
+
+ This can be useful for specifying a location outside the plugin bundle so users can
+ make changes to a page table file without breaking any code signatures.
+
+ If this function returns a default-constructed File, then a default location will be used.
+ The AAX SDK states this location will be `*.aaxplugin/Contents/Resources`.
+
+ @note The returned path should be an absolute path to a directory.
+
+ @see getPageFileName
+ */
+ virtual File getPageFileSearchPath() const { return {}; }
+};
+
+} // namespace juce
diff --git a/modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp b/modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp
similarity index 62%
rename from modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp
rename to modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp
index e8b42e9b0a..b7ea7f2108 100644
--- a/modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.cpp
+++ b/modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp
@@ -26,14 +26,14 @@
namespace juce
{
-pointer_sized_int VSTCallbackHandler::handleVstPluginCanDo ([[maybe_unused]] int32 index,
- [[maybe_unused]] pointer_sized_int value,
- [[maybe_unused]] void* ptr,
- [[maybe_unused]] float opt)
+pointer_sized_int VST2ClientExtensions::handleVstPluginCanDo ([[maybe_unused]] int32 index,
+ [[maybe_unused]] pointer_sized_int value,
+ [[maybe_unused]] void* ptr,
+ [[maybe_unused]] float opt)
{
return 0;
}
-void VSTCallbackHandler::handleVstHostCallbackAvailable ([[maybe_unused]] std::function&& callback) {}
+void VST2ClientExtensions::handleVstHostCallbackAvailable ([[maybe_unused]] std::function&& callback) {}
} // namespace juce
diff --git a/modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h b/modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h
similarity index 68%
rename from modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h
rename to modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h
index 9fe3a0ad82..b656ec4cef 100644
--- a/modules/juce_audio_processors/utilities/juce_VSTCallbackHandler.h
+++ b/modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h
@@ -26,19 +26,19 @@
namespace juce
{
-/** An interface to allow an AudioProcessor to send and receive VST specific calls from
- the host.
+/**
+ An interface to allow an AudioProcessor to implement extended VST2-specific functionality.
- To use this class, ensure that your AudioProcessor publicly inherits
- from VSTCallbackHandler.
+ To use this class, create an object that inherits from it, implement the methods, then return
+ a pointer to the object in your AudioProcessor::getVST2ClientExtensions() method.
- @see VST3ClientExtensions
+ @see AudioProcessor, AAXClientExtensions, VST3ClientExtensions
@tags{Audio}
*/
-struct VSTCallbackHandler
+struct VST2ClientExtensions
{
- virtual ~VSTCallbackHandler() = default;
+ virtual ~VST2ClientExtensions() = default;
/** This is called by the VST plug-in wrapper when it receives unhandled
plug-in "can do" calls from the host.
@@ -56,13 +56,12 @@ struct VSTCallbackHandler
void* ptr,
float opt) = 0;
- // Note: VS2013 prevents a "using" declaration here
/** The host callback function type. */
- typedef pointer_sized_int (VstHostCallbackType) (int32 opcode,
- int32 index,
- pointer_sized_int value,
- void* ptr,
- float opt);
+ using VstHostCallbackType = pointer_sized_int (int32 opcode,
+ int32 index,
+ pointer_sized_int value,
+ void* ptr,
+ float opt);
/** This is called once by the VST plug-in wrapper after its constructor.
You can use the supplied function to query the VST host.
@@ -70,4 +69,6 @@ struct VSTCallbackHandler
virtual void handleVstHostCallbackAvailable (std::function&& callback);
};
+using VSTCallbackHandler [[deprecated ("replace with VST2ClientExtensions")]] = VST2ClientExtensions;
+
} // namespace juce
diff --git a/modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h b/modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h
index 70a5fdfd7c..665f11f1f7 100644
--- a/modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h
+++ b/modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h
@@ -37,13 +37,13 @@ namespace Steinberg
namespace juce
{
-/** An interface to allow an AudioProcessor to implement extended VST3-specific
- functionality.
+/**
+ An interface to allow an AudioProcessor to implement extended VST3-specific functionality.
- To use this class, ensure that your AudioProcessor publicly inherits
- from VST3ClientExtensions.
+ To use this class, create an object that inherits from it, implement the methods, then return
+ a pointer to the object in your AudioProcessor::getVST3ClientExtensions() method.
- @see VSTCallbackHandler
+ @see AudioProcessor, AAXClientExtensions, VST2ClientExtensions
@tags{Audio}
*/