audacia/src/effects/lv2/LoadLV2.h

207 lines
8.9 KiB
C++
Executable File

/**********************************************************************
Audacity: A Digital Audio Editor
LoadLV2.h
Audacity(R) is copyright (c) 1999-2008 Audacity Team.
License: GPL v2. See License.txt.
*********************************************************************/
#ifndef LV2EFFECTSMODULE_H
#define LV2EFFECTSMODULE_H
#include <memory>
#include "lilv/lilv.h"
#include "lv2/core/lv2.h"
#include "lv2/buf-size/buf-size.h"
#include "lv2/data-access/data-access.h"
#include "lv2/event/event.h"
#include "lv2/instance-access/instance-access.h"
#include "lv2/midi/midi.h"
#include "lv2/parameters/parameters.h"
#include "lv2/port-groups/port-groups.h"
#include "lv2/port-props/port-props.h"
#include "lv2/presets/presets.h"
#include "lv2/resize-port/resize-port.h"
#include "lv2/time/time.h"
#include "lv2/uri-map/uri-map.h"
#include "lv2/units/units.h"
#include "audacity/ModuleInterface.h"
#include "audacity/EffectInterface.h"
#include "audacity/PluginInterface.h"
#include "lv2_external_ui.h"
#if !defined(LV2_CORE__MIDIPlugin)
#define LV2_CORE__MIDIPlugin LV2_CORE_PREFIX "MIDIPlugin"
#endif
#if !defined(LV2_CORE__Enabled)
#define LV2_CORE__enabled LV2_CORE_PREFIX "enabled"
#endif
#if !defined(LV2_UI__makeResident)
#define LV2_UI__makeResident LV2_UI_PREFIX "makeResident"
#endif
#if !defined(LV2_BUF_SIZE__nominalBlockLength)
#define LV2_BUF_SIZE__nominalBlockLength LV2_BUF_SIZE_PREFIX "nominalBlockLength"
#endif
// The "ll-plugin" package includes math functions that appear as plugins
// and the best way to exclude them is by their class URI.
#define LL_NAMESPACE "http://ll-plugins.nongnu.org/lv2/namespace#"
#define LL_MATH_CONSTANTS LL_NAMESPACE "MathConstantPlugin"
#define LL_MATH_FUNCTIONS LL_NAMESPACE "MathFunctionPlugin"
// Define the list of URIs that need an LilvNode created
#undef NODE
#define NODE(n, u)
#undef NODELIST
#define NODELIST \
NODE( AtomPort, LV2_ATOM__AtomPort ) \
NODE( MaxBlockLength, LV2_BUF_SIZE__maxBlockLength ) \
NODE( MinBlockLength, LV2_BUF_SIZE__minBlockLength ) \
NODE( AudioPort, LV2_CORE__AudioPort ) \
NODE( ControlPort, LV2_CORE__ControlPort ) \
NODE( CVPort, LV2_CORE__CVPort ) \
NODE( Designation, LV2_CORE__designation ) \
NODE( InputPort, LV2_CORE__InputPort ) \
NODE( InstrumentPlugin, LV2_CORE__InstrumentPlugin ) \
NODE( MIDIPlugin, LV2_CORE__MIDIPlugin ) \
NODE( OutputPort, LV2_CORE__OutputPort ) \
NODE( Control, LV2_CORE__control ) \
NODE( Enumeration, LV2_CORE__enumeration ) \
NODE( Integer, LV2_CORE__integer ) \
NODE( Name, LV2_CORE__name ) \
NODE( OptionalFeature, LV2_CORE__optionalFeature ) \
NODE( RequiredFeature, LV2_CORE__requiredFeature ) \
NODE( SampleRate, LV2_CORE__sampleRate ) \
NODE( Toggled, LV2_CORE__toggled ) \
NODE( ExternalUI, LV2_EXTERNAL_UI__Widget ) \
NODE( ExternalUIOld, LV2_EXTERNAL_UI_DEPRECATED_URI ) \
NODE( MidiEvent, LV2_MIDI__MidiEvent ) \
NODE( SupportedOption, LV2_OPTIONS__supportedOption ) \
NODE( RequiredOption, LV2_OPTIONS__requiredOption ) \
NODE( Group, LV2_PORT_GROUPS__group ) \
NODE( Logarithmic, LV2_PORT_PROPS__logarithmic ) \
NODE( Trigger, LV2_PORT_PROPS__trigger ) \
NODE( Preset, LV2_PRESETS__Preset ) \
NODE( MinimumSize, LV2_RESIZE_PORT__minimumSize ) \
NODE( Position, LV2_TIME__Position ) \
NODE( Gtk, LV2_UI__GtkUI ) \
NODE( Gtk3, LV2_UI__Gtk3UI ) \
NODE( Unit, LV2_UNITS__unit ) \
NODE( Comment, LILV_NS_RDFS "comment" ) \
NODE( Label, LILV_NS_RDFS "label" ) \
NODE( MathConstants, LL_MATH_CONSTANTS ) \
NODE( MathFunctions, LL_MATH_FUNCTIONS )
// Define the list of URIs that need a URID registered
#undef URID
#define URID(n, u)
#undef URIDLIST
#define URIDLIST \
URID( Blank, LV2_ATOM__Blank ) \
URID( Bool, LV2_ATOM__Bool ) \
URID( Chunk, LV2_ATOM__Chunk ) \
URID( Double, LV2_ATOM__Double ) \
URID( Float, LV2_ATOM__Float ) \
URID( Int, LV2_ATOM__Int ) \
URID( Literal, LV2_ATOM__Literal ) \
URID( Long, LV2_ATOM__Long ) \
URID( Object, LV2_ATOM__Object ) \
URID( Path, LV2_ATOM__Path ) \
URID( Property, LV2_ATOM__Property ) \
URID( Resource, LV2_ATOM__Resource ) \
URID( Sequence, LV2_ATOM__Sequence ) \
URID( String, LV2_ATOM__String ) \
URID( Tuple, LV2_ATOM__Tuple ) \
URID( Uri, LV2_ATOM__URI ) \
URID( Urid, LV2_ATOM__URID ) \
URID( Vector, LV2_ATOM__Vector ) \
URID( EventTransfer, LV2_ATOM__eventTransfer ) \
URID( AtomSupports, LV2_ATOM__supports ) \
URID( MaxBlockLength, LV2_BUF_SIZE__maxBlockLength ) \
URID( MinBlockLength, LV2_BUF_SIZE__minBlockLength ) \
URID( NominalBlockLength, LV2_BUF_SIZE__nominalBlockLength ) \
URID( SequenceSize, LV2_BUF_SIZE__sequenceSize ) \
URID( InstrumentPlugin, LV2_CORE__InstrumentPlugin ) \
URID( MIDIPlugin, LV2_CORE__MIDIPlugin ) \
URID( Toggled, LV2_CORE__toggled ) \
URID( ExternalUI, LV2_EXTERNAL_UI__Widget ) \
URID( ExternalUIOld, LV2_EXTERNAL_UI_DEPRECATED_URI ) \
URID( Error, LV2_LOG__Error ) \
URID( Note, LV2_LOG__Note ) \
URID( Trace, LV2_LOG__Trace ) \
URID( Warning, LV2_LOG__Warning ) \
URID( MidiEvent, LV2_MIDI__MidiEvent ) \
URID( RequiredOption, LV2_OPTIONS__requiredOption ) \
URID( SampleRate, LV2_PARAMETERS__sampleRate ) \
URID( RangeSteps, LV2_PORT_PROPS__rangeSteps ) \
URID( NotOnGUI, LV2_PORT_PROPS__notOnGUI ) \
URID( Expensive, LV2_PORT_PROPS__expensive ) \
URID( CausesArtifacts, LV2_PORT_PROPS__causesArtifacts ) \
URID( NotAutomatic, LV2_PORT_PROPS__notAutomatic ) \
URID( Position, LV2_TIME__Position ) \
URID( Speed, LV2_TIME__speed ) \
URID( Frame, LV2_TIME__frame )
///////////////////////////////////////////////////////////////////////////////
//
// LV2EffectsModule
//
///////////////////////////////////////////////////////////////////////////////
class LV2EffectsModule final : public ModuleInterface
{
public:
LV2EffectsModule();
virtual ~LV2EffectsModule();
// ComponentInterface implementation
PluginPath GetPath() override;
ComponentInterfaceSymbol GetSymbol() override;
VendorSymbol GetVendor() override;
wxString GetVersion() override;
TranslatableString GetDescription() override;
// ModuleInterface implementation
bool Initialize() override;
void Terminate() override;
EffectFamilySymbol GetOptionalFamilySymbol() override;
const FileExtensions &GetFileExtensions() override;
FilePath InstallPath() override { return {}; }
bool AutoRegisterPlugins(PluginManagerInterface & pm) override;
PluginPaths FindPluginPaths(PluginManagerInterface & pm) override;
unsigned DiscoverPluginsAtPath(
const PluginPath & path, TranslatableString &errMsg,
const RegistrationCallback &callback)
override;
bool IsPluginValid(const PluginPath & path, bool bFast) override;
std::unique_ptr<ComponentInterface>
CreateInstance(const PluginPath & path) override;
// LV2EffectModule implementation
private:
const LilvPlugin *GetPlugin(const PluginPath & path);
};
extern LilvWorld *gWorld;
#endif