1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-09 23:34:20 +00:00

AudioPluginFormatManager: Move to headless processors module

This commit is contained in:
reuk 2025-08-19 19:55:20 +01:00
parent 718d2151ed
commit 8148421145
No known key found for this signature in database
6 changed files with 2 additions and 2 deletions

View file

@ -1,165 +0,0 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
#include <juce_audio_processors_headless/format/juce_PluginFormatDefs.h>
namespace juce
{
//==============================================================================
void addHeadlessDefaultFormatsToManager ([[maybe_unused]] AudioPluginFormatManager& manager)
{
#if JUCE_INTERNAL_HAS_AU
manager.addFormat (std::make_unique<AudioUnitPluginFormatHeadless>());
#endif
#if JUCE_INTERNAL_HAS_VST
manager.addFormat (std::make_unique<VSTPluginFormatHeadless>());
#endif
#if JUCE_INTERNAL_HAS_VST3
manager.addFormat (std::make_unique<VST3PluginFormatHeadless>());
#endif
#if JUCE_INTERNAL_HAS_LADSPA
manager.addFormat (std::make_unique<LADSPAPluginFormatHeadless>());
#endif
#if JUCE_INTERNAL_HAS_LV2
manager.addFormat (std::make_unique<LV2PluginFormatHeadless>());
#endif
}
int AudioPluginFormatManager::getNumFormats() const { return formats.size(); }
AudioPluginFormat* AudioPluginFormatManager::getFormat (int index) const { return formats[index]; }
Array<AudioPluginFormat*> AudioPluginFormatManager::getFormats() const
{
Array<AudioPluginFormat*> a;
a.addArray (formats);
return a;
}
void AudioPluginFormatManager::addFormat (std::unique_ptr<AudioPluginFormat> format)
{
for (auto* existing : formats)
{
if (existing->getName() == format->getName())
{
// This format manager already contains a format with this name!
jassertfalse;
return;
}
}
formats.add (std::move (format));
}
std::unique_ptr<AudioPluginInstance> AudioPluginFormatManager::createPluginInstance (const PluginDescription& description,
double rate, int blockSize,
String& errorMessage) const
{
if (auto* format = findFormatForDescription (description, errorMessage))
return format->createInstanceFromDescription (description, rate, blockSize, errorMessage);
return {};
}
void AudioPluginFormatManager::createARAFactoryAsync (const PluginDescription& description,
AudioPluginFormat::ARAFactoryCreationCallback callback) const
{
String errorMessage;
if (auto* format = findFormatForDescription (description, errorMessage))
{
format->createARAFactoryAsync (description, callback);
}
else
{
errorMessage = NEEDS_TRANS ("Couldn't find format for the provided description");
callback ({ {}, std::move (errorMessage) });
}
}
void AudioPluginFormatManager::createPluginInstanceAsync (const PluginDescription& description,
double initialSampleRate, int initialBufferSize,
AudioPluginFormat::PluginCreationCallback callback)
{
String error;
if (auto* format = findFormatForDescription (description, error))
return format->createPluginInstanceAsync (description, initialSampleRate, initialBufferSize, std::move (callback));
struct DeliverError final : public CallbackMessage
{
DeliverError (AudioPluginFormat::PluginCreationCallback c, const String& e)
: call (std::move (c)), error (e)
{
post();
}
void messageCallback() override { call (nullptr, error); }
AudioPluginFormat::PluginCreationCallback call;
String error;
};
new DeliverError (std::move (callback), error);
}
AudioPluginFormat* AudioPluginFormatManager::findFormatForDescription (const PluginDescription& description,
String& errorMessage) const
{
errorMessage = {};
for (auto* format : formats)
if (format->getName() == description.pluginFormatName
&& format->fileMightContainThisPluginType (description.fileOrIdentifier))
return format;
errorMessage = NEEDS_TRANS ("No compatible plug-in format exists for this plug-in");
return {};
}
bool AudioPluginFormatManager::doesPluginStillExist (const PluginDescription& description) const
{
for (auto* format : formats)
if (format->getName() == description.pluginFormatName)
return format->doesPluginStillExist (description);
return false;
}
} // namespace juce

View file

@ -1,169 +0,0 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
namespace juce
{
//==============================================================================
/**
This maintains a list of known AudioPluginFormats.
@see AudioPluginFormat
@tags{Audio}
*/
class JUCE_API AudioPluginFormatManager
{
public:
//==============================================================================
AudioPluginFormatManager() = default;
//==============================================================================
/** This function has been removed. To add default formats to the manager,
use one of the new functions addDefaultFormatsToManager() or
addHeadlessDefaultFormatsToManager();
*/
void addDefaultFormats() = delete;
//==============================================================================
/** Returns the number of types of format that are available.
Use getFormat() to get one of them.
*/
int getNumFormats() const;
/** Returns one of the available formats.
@see getNumFormats
*/
AudioPluginFormat* getFormat (int index) const;
/** Returns a list of all the registered formats. */
Array<AudioPluginFormat*> getFormats() const;
//==============================================================================
/** Adds a format to the list.
The object passed in will be owned and deleted by the manager.
*/
[[deprecated ("Prefer the signature that accepts a unique_ptr")]]
void addFormat (AudioPluginFormat* f) { addFormat (rawToUniquePtr (f)); }
/** Adds a format to the list.
The object passed in will be owned and deleted by the manager.
*/
void addFormat (std::unique_ptr<AudioPluginFormat>);
//==============================================================================
/** Tries to load the type for this description, by trying all the formats
that this manager knows about.
If it can't load the plugin, it returns nullptr and leaves a message in the
errorMessage string.
If you intend to instantiate a AudioUnit v3 plug-in then you must either
use the non-blocking asynchronous version below - or call this method from a
thread other than the message thread and without blocking the message
thread.
*/
std::unique_ptr<AudioPluginInstance> createPluginInstance (const PluginDescription& description,
double initialSampleRate, int initialBufferSize,
String& errorMessage) const;
/** Tries to asynchronously load the type for this description, by trying
all the formats that this manager knows about.
The caller must supply a callback object which will be called when
the instantiation has completed.
If it can't load the plugin then the callback function will be called
passing a nullptr as the instance argument along with an error message.
The callback function will be called on the message thread so the caller
must not block the message thread.
The callback object will be deleted automatically after it has been
invoked.
The caller is responsible for deleting the instance that is passed to
the callback function.
If you intend to instantiate a AudioUnit v3 plug-in then you must use
this non-blocking asynchronous version - or call the synchronous method
from an auxiliary thread.
*/
void createPluginInstanceAsync (const PluginDescription& description,
double initialSampleRate, int initialBufferSize,
AudioPluginFormat::PluginCreationCallback callback);
/** Tries to create an ::ARAFactoryWrapper for this description.
The result of the operation will be wrapped into an ARAFactoryResult,
which will be passed to a callback object supplied by the caller.
The operation may fail, in which case the callback will be called with
with a result object where ARAFactoryResult::araFactory.get() will return
a nullptr.
In case of success the returned ::ARAFactoryWrapper will ensure that
modules required for the correct functioning of the ARAFactory will remain
loaded for the lifetime of the object.
*/
void createARAFactoryAsync (const PluginDescription& description,
AudioPluginFormat::ARAFactoryCreationCallback callback) const;
/** Checks that the file or component for this plugin actually still exists.
(This won't try to load the plugin)
*/
bool doesPluginStillExist (const PluginDescription&) const;
private:
//==============================================================================
AudioPluginFormat* findFormatForDescription (const PluginDescription&, String& errorMessage) const;
OwnedArray<AudioPluginFormat> formats;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioPluginFormatManager)
};
/** Add all standard plugin formats to the AudioPluginFormatManager, *without* UI support.
If you use one of these formats to load a plugin, the resulting plugin will always return
false from hasEditor(), and return nullptr from createEditor().
This function is intended for use in commandline projects that never need to load plugin UIs.
In such cases, build times can be improved by omitting UI code from the project.
This is a cut-down version of the old AudioPluginFormatManager::addDefaultFormats().
*/
void addHeadlessDefaultFormatsToManager (AudioPluginFormatManager&);
} // namespace juce

View file

@ -166,7 +166,6 @@ private:
} // namespace juce
#include "format/juce_AudioPluginFormatManager.cpp"
#include "format/juce_AudioPluginFormatManagerHelpers.cpp"
#include "processors/juce_AudioProcessorEditor.cpp"
#include "processors/juce_GenericAudioProcessorEditor.cpp"

View file

@ -140,7 +140,6 @@
#include "processors/juce_AudioProcessorEditorHostContext.h"
#include "processors/juce_AudioProcessorEditor.h"
#include "processors/juce_GenericAudioProcessorEditor.h"
#include "format/juce_AudioPluginFormatManager.h"
#include "format/juce_AudioPluginFormatManagerHelpers.h"
#include "scanning/juce_KnownPluginList.h"
#include "format_types/juce_AudioUnitPluginFormat.h"