|
- /*
- ==============================================================================
-
- 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.
-
- ==============================================================================
- */
-
- #ifndef DOXYGEN
-
- // Forward declarations to avoid leaking implementation details.
- namespace Steinberg::Vst
- {
- class IComponent;
- } // namespace Steinberg::Vst
-
- #endif
-
- //==============================================================================
- #if TARGET_OS_IPHONE
- struct OpaqueAudioComponentInstance;
- typedef struct OpaqueAudioComponentInstance* AudioComponentInstance;
- #else
- struct ComponentInstanceRecord;
- typedef struct ComponentInstanceRecord* AudioComponentInstance;
- #endif
-
- typedef AudioComponentInstance AudioUnit;
-
- //==============================================================================
- /* If you are including the VST headers inside a namespace this forward
- declaration may cause a collision with the contents of `aeffect.h`.
-
- If that is the case you can avoid the collision by placing a `struct AEffect;`
- forward declaration inside the namespace and before the inclusion of the VST
- headers, e.g. @code
-
- namespace Vst2
- {
- struct AEffect;
- #include <pluginterfaces/vst2.x/aeffect.h>
- #include <pluginterfaces/vst2.x/aeffectx.h>
- }
- @endcode
- */
- struct AEffect;
-
- //==============================================================================
- namespace juce
- {
-
- //==============================================================================
- /** Create a derived implementation of this class and pass it to
- AudioPluginInstance::getExtensions() to retrieve format-specific
- information about a plugin instance.
-
- Note that the references passed to the visit member functions are only
- guaranteed to live for the duration of the function call, so don't
- store pointers to these objects! If you need to store and reuse
- format-specific information, it is recommended to copy the result
- of the function calls that you care about. For example, you should
- store the result of VST::getAEffectPtr() rather than storing a pointer
- to the VST instance.
-
- @tags{Audio}
- */
- struct ExtensionsVisitor
- {
- /** Indicates that there is no platform specific information available. */
- struct Unknown {};
-
- /** Can be used to retrieve information about a VST3 that is wrapped by an AudioProcessor. */
- struct VST3Client
- {
- virtual ~VST3Client() = default;
- virtual Steinberg::Vst::IComponent* getIComponentPtr() const noexcept = 0;
-
- virtual MemoryBlock getPreset() const = 0;
- virtual bool setPreset (const MemoryBlock&) const = 0;
- };
-
- /** Can be used to retrieve information about an AudioUnit that is wrapped by an AudioProcessor. */
- struct AudioUnitClient
- {
- virtual ~AudioUnitClient() = default;
- virtual AudioUnit getAudioUnitHandle() const noexcept = 0;
- };
-
- /** Can be used to retrieve information about a VST that is wrapped by an AudioProcessor. */
- struct VSTClient
- {
- virtual ~VSTClient() = default;
- virtual AEffect* getAEffectPtr() const noexcept = 0;
- };
-
- /** Can be used to retrieve information about a plugin that provides ARA extensions. */
- struct ARAClient
- {
- virtual ~ARAClient() = default;
- virtual void createARAFactoryAsync (std::function<void (ARAFactoryWrapper)>) const = 0;
- };
-
- ExtensionsVisitor() = default;
-
- ExtensionsVisitor (const ExtensionsVisitor&) = default;
- ExtensionsVisitor (ExtensionsVisitor&&) = default;
-
- ExtensionsVisitor& operator= (const ExtensionsVisitor&) = default;
- ExtensionsVisitor& operator= (ExtensionsVisitor&&) = default;
-
- virtual ~ExtensionsVisitor() = default;
-
- /** Will be called if there is no platform specific information available. */
- virtual void visitUnknown (const Unknown&) {}
-
- /** Called with VST3-specific information. */
- virtual void visitVST3Client (const VST3Client&) {}
-
- /** Called with VST-specific information. */
- virtual void visitVSTClient (const VSTClient&) {}
-
- /** Called with AU-specific information. */
- virtual void visitAudioUnitClient (const AudioUnitClient&) {}
-
- /** Called with ARA-specific information. */
- virtual void visitARAClient (const ARAClient&) {}
- };
-
- } // namespace juce
|