Signed-off-by: falkTX <falktx@falktx.com>pull/1658/merge
@@ -1,19 +1,5 @@ | |||||
/* | |||||
* Carla Plugin Host | |||||
* Copyright (C) 2011-2022 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* This program is free software; you can redistribute it and/or | |||||
* modify it under the terms of the GNU General Public License as | |||||
* published by the Free Software Foundation; either version 2 of | |||||
* the License, or any later version. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
*/ | |||||
// SPDX-FileCopyrightText: 2011-2024 Filipe Coelho <falktx@falktx.com> | |||||
// SPDX-License-Identifier: GPL-2.0-or-later | |||||
#ifndef CARLA_UTILS_H_INCLUDED | #ifndef CARLA_UTILS_H_INCLUDED | ||||
#define CARLA_UTILS_H_INCLUDED | #define CARLA_UTILS_H_INCLUDED | ||||
@@ -341,19 +327,13 @@ typedef struct _CarlaCachedPluginInfo { | |||||
/*! | /*! | ||||
* Get how many cached plugins are available. | * Get how many cached plugins are available. | ||||
* Internal and LV2 plugin formats are cached and need to be discovered via this function. | |||||
* Internal, LV2 and SFZ plugin formats are cached and can be discovered via this function. | |||||
* Do not call this for any other plugin formats. | * Do not call this for any other plugin formats. | ||||
* | |||||
* @note if this carla build uses JUCE, then you must call carla_juce_init beforehand | |||||
* @note for AU plugins, you cannot call this outside the main thread | |||||
*/ | */ | ||||
CARLA_PLUGIN_EXPORT uint carla_get_cached_plugin_count(PluginType ptype, const char* pluginPath); | CARLA_PLUGIN_EXPORT uint carla_get_cached_plugin_count(PluginType ptype, const char* pluginPath); | ||||
/*! | /*! | ||||
* Get information about a cached plugin. | * Get information about a cached plugin. | ||||
* | |||||
* @note if this carla build uses JUCE, then you must call carla_juce_init beforehand | |||||
* @note for AU plugins, you cannot call this outside the main thread | |||||
*/ | */ | ||||
CARLA_PLUGIN_EXPORT const CarlaCachedPluginInfo* carla_get_cached_plugin_info(PluginType ptype, uint index); | CARLA_PLUGIN_EXPORT const CarlaCachedPluginInfo* carla_get_cached_plugin_info(PluginType ptype, uint index); | ||||
@@ -368,7 +348,7 @@ CARLA_PLUGIN_EXPORT const CarlaCachedPluginInfo* carla_get_cached_plugin_info(Pl | |||||
CARLA_PLUGIN_EXPORT const char* carla_get_complete_license_text(void); | CARLA_PLUGIN_EXPORT const char* carla_get_complete_license_text(void); | ||||
/*! | /*! | ||||
* Get the juce version used in the current Carla build. | |||||
* @deprecated do not use | |||||
*/ | */ | ||||
CARLA_PLUGIN_EXPORT const char* carla_get_juce_version(void); | CARLA_PLUGIN_EXPORT const char* carla_get_juce_version(void); | ||||
@@ -397,23 +377,17 @@ CARLA_PLUGIN_EXPORT const char* carla_get_library_folder(void); | |||||
* JUCE */ | * JUCE */ | ||||
/*! | /*! | ||||
* Initialize data structures and GUI support for JUCE. | |||||
* This is only needed when carla builds use JUCE and you call cached-plugin related APIs. | |||||
* | |||||
* Idle must then be called at somewhat regular intervals, though in practice there is no reason for it yet. | |||||
* | |||||
* Make sure to call carla_juce_cleanup after you are done with APIs that need JUCE. | |||||
* @deprecated do not use | |||||
*/ | */ | ||||
CARLA_PLUGIN_EXPORT void carla_juce_init(void); | CARLA_PLUGIN_EXPORT void carla_juce_init(void); | ||||
/*! | /*! | ||||
* Give idle time to JUCE stuff. | |||||
* Currently only used for Linux. | |||||
* @deprecated do not use | |||||
*/ | */ | ||||
CARLA_PLUGIN_EXPORT void carla_juce_idle(void); | CARLA_PLUGIN_EXPORT void carla_juce_idle(void); | ||||
/*! | /*! | ||||
* Cleanup the JUCE stuff that was initialized by carla_juce_init. | |||||
* @deprecated do not use | |||||
*/ | */ | ||||
CARLA_PLUGIN_EXPORT void carla_juce_cleanup(void); | CARLA_PLUGIN_EXPORT void carla_juce_cleanup(void); | ||||
@@ -1642,7 +1642,33 @@ public: | |||||
if (std::strcmp(format, "AU") == 0) | if (std::strcmp(format, "AU") == 0) | ||||
{ | { | ||||
fileOrIdentifier = label; | |||||
// compat with new scanning | |||||
if (std::strlen(label) == 14 && label[4] == ',' && label[9] == ',') | |||||
{ | |||||
fileOrIdentifier = "AudioUnit:"; | |||||
/**/ if (std::strncmp(label, "aumu", 4) == 0) | |||||
fileOrIdentifier += "Synths/"; | |||||
else if (std::strncmp(label, "aumf", 4) == 0) | |||||
fileOrIdentifier += "Effects/"; | |||||
else if (std::strncmp(label, "aufx", 4) == 0) | |||||
fileOrIdentifier += "Effects/"; | |||||
else if (std::strncmp(label, "augn", 4) == 0) | |||||
fileOrIdentifier += "Generators/"; | |||||
else if (std::strncmp(label, "aupn", 4) == 0) | |||||
fileOrIdentifier += "Panners/"; | |||||
else if (std::strncmp(label, "aumx", 4) == 0) | |||||
fileOrIdentifier += "Mixers/"; | |||||
else if (std::strncmp(label, "aumi", 4) == 0) | |||||
fileOrIdentifier += "MidiEffects/"; | |||||
fileOrIdentifier += label; | |||||
} | |||||
// old style label | |||||
else | |||||
{ | |||||
fileOrIdentifier = label; | |||||
} | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
@@ -1,19 +1,5 @@ | |||||
/* | |||||
* Carla Plugin Host | |||||
* Copyright (C) 2011-2023 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* This program is free software; you can redistribute it and/or | |||||
* modify it under the terms of the GNU General Public License as | |||||
* published by the Free Software Foundation; either version 2 of | |||||
* the License, or any later version. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
*/ | |||||
// SPDX-FileCopyrightText: 2011-2024 Filipe Coelho <falktx@falktx.com> | |||||
// SPDX-License-Identifier: GPL-2.0-or-later | |||||
#include "CarlaUtils.h" | #include "CarlaUtils.h" | ||||
@@ -22,11 +8,6 @@ | |||||
#include "CarlaBackendUtils.hpp" | #include "CarlaBackendUtils.hpp" | ||||
#include "CarlaLv2Utils.hpp" | #include "CarlaLv2Utils.hpp" | ||||
#if defined(USING_JUCE) && defined(CARLA_OS_MAC) | |||||
# include "AppConfig.h" | |||||
# include "juce_audio_processors/juce_audio_processors.h" | |||||
#endif | |||||
#ifndef STATIC_PLUGIN_TARGET | #ifndef STATIC_PLUGIN_TARGET | ||||
# define HAVE_SFZ | # define HAVE_SFZ | ||||
# include "water/containers/Array.h" | # include "water/containers/Array.h" | ||||
@@ -603,67 +584,6 @@ static const CarlaCachedPluginInfo* get_cached_plugin_lv2(Lv2WorldClass& lv2Worl | |||||
// ------------------------------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------------------------------- | ||||
#if defined(USING_JUCE) && defined(CARLA_OS_MAC) | |||||
static juce::StringArray gCachedAuPluginResults; | |||||
static void findAUs() | |||||
{ | |||||
if (gCachedAuPluginResults.size() != 0) | |||||
return; | |||||
juce::AudioUnitPluginFormat auFormat; | |||||
gCachedAuPluginResults = auFormat.searchPathsForPlugins(juce::FileSearchPath(), false, false); | |||||
} | |||||
static const CarlaCachedPluginInfo* get_cached_plugin_au(const juce::String pluginId) | |||||
{ | |||||
static CarlaCachedPluginInfo info; | |||||
static CarlaString sname, slabel, smaker; | |||||
info.valid = false; | |||||
juce::AudioUnitPluginFormat auFormat; | |||||
juce::OwnedArray<juce::PluginDescription> results; | |||||
auFormat.findAllTypesForFile(results, pluginId); | |||||
CARLA_SAFE_ASSERT_RETURN(results.size() > 0, &info); | |||||
CARLA_SAFE_ASSERT(results.size() == 1); | |||||
juce::PluginDescription* const desc(results[0]); | |||||
CARLA_SAFE_ASSERT_RETURN(desc != nullptr, &info); | |||||
info.category = CB::getPluginCategoryFromName(desc->category.toRawUTF8()); | |||||
info.hints = 0x0; | |||||
info.valid = true; | |||||
if (desc->isInstrument) | |||||
info.hints |= CB::PLUGIN_IS_SYNTH; | |||||
if (true) | |||||
info.hints |= CB::PLUGIN_HAS_CUSTOM_UI; | |||||
info.audioIns = static_cast<uint32_t>(desc->numInputChannels); | |||||
info.audioOuts = static_cast<uint32_t>(desc->numOutputChannels); | |||||
info.cvIns = 0; | |||||
info.cvOuts = 0; | |||||
info.midiIns = desc->isInstrument ? 1 : 0; | |||||
info.midiOuts = 0; | |||||
info.parameterIns = 0; | |||||
info.parameterOuts = 0; | |||||
sname = desc->name.toRawUTF8(); | |||||
slabel = desc->fileOrIdentifier.toRawUTF8(); | |||||
smaker = desc->manufacturerName.toRawUTF8(); | |||||
info.name = sname; | |||||
info.label = slabel; | |||||
info.maker = smaker; | |||||
info.copyright = gCachedPluginsNullCharPtr; | |||||
return &info; | |||||
} | |||||
#endif | |||||
// ------------------------------------------------------------------------------------------------------------------- | |||||
#ifdef HAVE_SFZ | #ifdef HAVE_SFZ | ||||
static const CarlaCachedPluginInfo* get_cached_plugin_sfz(const water::File& file) | static const CarlaCachedPluginInfo* get_cached_plugin_sfz(const water::File& file) | ||||
{ | { | ||||
@@ -796,12 +716,6 @@ uint carla_get_cached_plugin_count(CB::PluginType ptype, const char* pluginPath) | |||||
return lv2World.getPluginCount(); | return lv2World.getPluginCount(); | ||||
} | } | ||||
#if defined(USING_JUCE) && defined(CARLA_OS_MAC) | |||||
case CB::PLUGIN_AU: | |||||
findAUs(); | |||||
return static_cast<uint>(gCachedAuPluginResults.size()); | |||||
#endif | |||||
#ifdef HAVE_SFZ | #ifdef HAVE_SFZ | ||||
case CB::PLUGIN_SFZ: | case CB::PLUGIN_SFZ: | ||||
findSFZs(pluginPath); | findSFZs(pluginPath); | ||||
@@ -847,12 +761,6 @@ const CarlaCachedPluginInfo* carla_get_cached_plugin_info(CB::PluginType ptype, | |||||
return get_cached_plugin_lv2(lv2World, lilvPlugin); | return get_cached_plugin_lv2(lv2World, lilvPlugin); | ||||
} | } | ||||
#if defined(USING_JUCE) && defined(CARLA_OS_MAC) | |||||
case CB::PLUGIN_AU: | |||||
CARLA_SAFE_ASSERT_BREAK(index < static_cast<uint>(gCachedAuPluginResults.size())); | |||||
return get_cached_plugin_au(gCachedAuPluginResults.strings.getUnchecked(static_cast<int>(index))); | |||||
#endif | |||||
#ifdef HAVE_SFZ | #ifdef HAVE_SFZ | ||||
case CB::PLUGIN_SFZ: | case CB::PLUGIN_SFZ: | ||||
CARLA_SAFE_ASSERT_BREAK(index < gSFZs.size()); | CARLA_SAFE_ASSERT_BREAK(index < gSFZs.size()); | ||||
@@ -1,19 +1,5 @@ | |||||
/* | |||||
* Carla Plugin Host | |||||
* Copyright (C) 2011-2023 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* This program is free software; you can redistribute it and/or | |||||
* modify it under the terms of the GNU General Public License as | |||||
* published by the Free Software Foundation; either version 2 of | |||||
* the License, or any later version. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
*/ | |||||
// SPDX-FileCopyrightText: 2011-2024 Filipe Coelho <falktx@falktx.com> | |||||
// SPDX-License-Identifier: GPL-2.0-or-later | |||||
#include "CarlaUtils.h" | #include "CarlaUtils.h" | ||||
#include "CarlaString.hpp" | #include "CarlaString.hpp" | ||||
@@ -31,10 +17,6 @@ | |||||
# pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" | # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" | ||||
#endif | #endif | ||||
#if defined(USING_JUCE) && !defined(BUILD_BRIDGE) | |||||
# include "carla_juce/carla_juce.h" | |||||
#endif | |||||
#ifdef USING_RTAUDIO | #ifdef USING_RTAUDIO | ||||
# include "rtaudio/RtAudio.h" | # include "rtaudio/RtAudio.h" | ||||
# include "rtmidi/RtMidi.h" | # include "rtmidi/RtMidi.h" | ||||
@@ -126,19 +108,11 @@ const char* carla_get_juce_version() | |||||
{ | { | ||||
carla_debug("carla_get_juce_version()"); | carla_debug("carla_get_juce_version()"); | ||||
static CarlaString retVersion; | |||||
#if defined(USING_JUCE) && !defined(BUILD_BRIDGE) | |||||
if (retVersion.isEmpty()) | |||||
{ | |||||
if (const char* const version = CarlaJUCE::getVersion()) | |||||
retVersion = version+6; | |||||
else | |||||
retVersion = "Unknown"; | |||||
} | |||||
#ifdef USING_JUCE | |||||
return "JUCE v7.0.1"; | |||||
#else | |||||
return "Unknown"; | |||||
#endif | #endif | ||||
return retVersion; | |||||
} | } | ||||
const char* const* carla_get_supported_file_extensions() | const char* const* carla_get_supported_file_extensions() | ||||
@@ -1,19 +1,5 @@ | |||||
/* | |||||
* Carla Plugin Host | |||||
* Copyright (C) 2011-2022 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* This program is free software; you can redistribute it and/or | |||||
* modify it under the terms of the GNU General Public License as | |||||
* published by the Free Software Foundation; either version 2 of | |||||
* the License, or any later version. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
*/ | |||||
// SPDX-FileCopyrightText: 2011-2024 Filipe Coelho <falktx@falktx.com> | |||||
// SPDX-License-Identifier: GPL-2.0-or-later | |||||
#include "CarlaUtils.h" | #include "CarlaUtils.h" | ||||
@@ -25,23 +11,23 @@ | |||||
void carla_juce_init() | void carla_juce_init() | ||||
{ | { | ||||
#ifdef USING_JUCE | |||||
#ifdef USING_JUCE | |||||
CarlaJUCE::initialiseJuce_GUI(); | CarlaJUCE::initialiseJuce_GUI(); | ||||
#endif | |||||
#endif | |||||
} | } | ||||
void carla_juce_idle() | void carla_juce_idle() | ||||
{ | { | ||||
#ifdef USING_JUCE | |||||
#ifdef USING_JUCE | |||||
CarlaJUCE::idleJuce_GUI(); | CarlaJUCE::idleJuce_GUI(); | ||||
#endif | |||||
#endif | |||||
} | } | ||||
void carla_juce_cleanup() | void carla_juce_cleanup() | ||||
{ | { | ||||
#ifdef USING_JUCE | |||||
#ifdef USING_JUCE | |||||
CarlaJUCE::shutdownJuce_GUI(); | CarlaJUCE::shutdownJuce_GUI(); | ||||
#endif | |||||
#endif | |||||
} | } | ||||
// ------------------------------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------------------------------- |
@@ -13,6 +13,9 @@ BUILD_CXX_FLAGS += $(FLUIDSYNTH_FLAGS) | |||||
BUILD_CXX_FLAGS += $(MAGIC_LIBS) | BUILD_CXX_FLAGS += $(MAGIC_LIBS) | ||||
BUILD_CXX_FLAGS += $(YSFX_FLAGS) | BUILD_CXX_FLAGS += $(YSFX_FLAGS) | ||||
# FIXME remove this after getting rid of juce | |||||
BUILD_CXX_FLAGS += -UUSING_JUCE | |||||
# --------------------------------------------------------------------------------------------------------------------- | # --------------------------------------------------------------------------------------------------------------------- | ||||
OBJS = \ | OBJS = \ | ||||
@@ -37,18 +40,6 @@ ifeq ($(HAVE_YSFX),true) | |||||
LIBS += $(MODULEDIR)/ysfx.a | LIBS += $(MODULEDIR)/ysfx.a | ||||
endif | endif | ||||
ifeq ($(USING_JUCE),true) | |||||
LIBS += $(MODULEDIR)/carla_juce.a | |||||
LIBS += $(MODULEDIR)/juce_audio_basics.a | |||||
LIBS += $(MODULEDIR)/juce_audio_processors.a | |||||
LIBS += $(MODULEDIR)/juce_core.a | |||||
LIBS += $(MODULEDIR)/juce_data_structures.a | |||||
LIBS += $(MODULEDIR)/juce_events.a | |||||
LIBS += $(MODULEDIR)/juce_graphics.a | |||||
LIBS += $(MODULEDIR)/juce_gui_basics.a | |||||
LIBS += $(MODULEDIR)/juce_gui_extra.a | |||||
endif | |||||
LINK_FLAGS += $(JACKBRIDGE_LIBS) | LINK_FLAGS += $(JACKBRIDGE_LIBS) | ||||
LINK_FLAGS += $(LILV_LIBS) | LINK_FLAGS += $(LILV_LIBS) | ||||
LINK_FLAGS += $(WATER_LIBS) | LINK_FLAGS += $(WATER_LIBS) | ||||
@@ -67,17 +58,6 @@ LINK_FLAGS += -pthread | |||||
endif | endif | ||||
endif | endif | ||||
ifeq ($(USING_JUCE),true) | |||||
LINK_FLAGS += $(JUCE_AUDIO_BASICS_LIBS) | |||||
LINK_FLAGS += $(JUCE_AUDIO_PROCESSORS_LIBS) | |||||
LINK_FLAGS += $(JUCE_CORE_LIBS) | |||||
LINK_FLAGS += $(JUCE_DATA_STRUCTURES_LIBS) | |||||
LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||||
LINK_FLAGS += $(JUCE_GRAPHICS_LIBS) | |||||
LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||||
LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS) | |||||
endif | |||||
# --------------------------------------------------------------------------------------------------------------------- | # --------------------------------------------------------------------------------------------------------------------- | ||||
all: $(TARGETS) | all: $(TARGETS) | ||||
@@ -100,12 +80,10 @@ $(BINDIR)/libcarla_utils$(LIB_EXT): $(OBJS) $(LIBS) | |||||
# --------------------------------------------------------------------------------------------------------------------- | # --------------------------------------------------------------------------------------------------------------------- | ||||
ifeq ($(MACOS),true) | ifeq ($(MACOS),true) | ||||
ifeq ($(USING_JUCE),true) | |||||
$(OBJDIR)/CachedPlugins.cpp.o: BUILD_CXX_FLAGS += -std=gnu++14 | |||||
endif | |||||
$(OBJDIR)/CarlaUtils.cpp.o: BUILD_CXX_FLAGS += -ObjC++ | $(OBJDIR)/CarlaUtils.cpp.o: BUILD_CXX_FLAGS += -ObjC++ | ||||
$(OBJDIR)/Windows.cpp.o: BUILD_CXX_FLAGS += -ObjC++ | $(OBJDIR)/Windows.cpp.o: BUILD_CXX_FLAGS += -ObjC++ | ||||
endif | endif | ||||
$(OBJDIR)/%.cpp.o: %.cpp | $(OBJDIR)/%.cpp.o: %.cpp | ||||
@@ -1,19 +1,5 @@ | |||||
/* | |||||
* Carla Plugin Host | |||||
* Copyright (C) 2011-2023 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* This program is free software; you can redistribute it and/or | |||||
* modify it under the terms of the GNU General Public License as | |||||
* published by the Free Software Foundation; either version 2 of | |||||
* the License, or any later version. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
*/ | |||||
// SPDX-FileCopyrightText: 2011-2024 Filipe Coelho <falktx@falktx.com> | |||||
// SPDX-License-Identifier: GPL-2.0-or-later | |||||
#include "CarlaUtils.h" | #include "CarlaUtils.h" | ||||
@@ -760,7 +746,6 @@ CarlaPluginDiscoveryHandle carla_plugin_discovery_start(const char* const discov | |||||
} | } | ||||
case CB::PLUGIN_INTERNAL: | case CB::PLUGIN_INTERNAL: | ||||
case CB::PLUGIN_AU: | |||||
return new CarlaPluginDiscovery(discoveryTool, btype, ptype, discoveryCb, checkCacheCb, callbackPtr); | return new CarlaPluginDiscovery(discoveryTool, btype, ptype, discoveryCb, checkCacheCb, callbackPtr); | ||||
case CB::PLUGIN_LADSPA: | case CB::PLUGIN_LADSPA: | ||||
@@ -808,6 +793,11 @@ CarlaPluginDiscoveryHandle carla_plugin_discovery_start(const char* const discov | |||||
wildcard = "*.vst3"; | wildcard = "*.vst3"; | ||||
break; | break; | ||||
case CB::PLUGIN_AU: | |||||
directories = true; | |||||
wildcard = "*.component"; | |||||
break; | |||||
case CB::PLUGIN_CLAP: | case CB::PLUGIN_CLAP: | ||||
wildcard = "*.clap"; | wildcard = "*.clap"; | ||||
#ifdef CARLA_OS_MAC | #ifdef CARLA_OS_MAC | ||||
@@ -8,13 +8,6 @@ CWD=.. | |||||
MODULENAME=carla-discovery | MODULENAME=carla-discovery | ||||
include $(CWD)/Makefile.mk | include $(CWD)/Makefile.mk | ||||
# Workaround GCC bug | |||||
ifeq ($(TESTBUILD),true) | |||||
ifeq ($(USING_JUCE),true) | |||||
BUILD_CXX_FLAGS += -Wno-undef | |||||
endif | |||||
endif | |||||
# --------------------------------------------------------------------------------------------------------------------- | # --------------------------------------------------------------------------------------------------------------------- | ||||
BINDIR := $(CWD)/../bin | BINDIR := $(CWD)/../bin | ||||
@@ -46,10 +39,6 @@ BUILD_CXX_FLAGS += -pthread | |||||
LINK_FLAGS += -pthread | LINK_FLAGS += -pthread | ||||
endif | endif | ||||
ifeq ($(USING_JUCE),true) | |||||
BUILD_CXX_FLAGS += -std=gnu++14 | |||||
endif | |||||
32BIT_FLAGS += -DBUILD_BRIDGE -DBUILD_BRIDGE_ALTERNATIVE_ARCH | 32BIT_FLAGS += -DBUILD_BRIDGE -DBUILD_BRIDGE_ALTERNATIVE_ARCH | ||||
64BIT_FLAGS += -DBUILD_BRIDGE -DBUILD_BRIDGE_ALTERNATIVE_ARCH | 64BIT_FLAGS += -DBUILD_BRIDGE -DBUILD_BRIDGE_ALTERNATIVE_ARCH | ||||
ARM32_FLAGS += -DBUILD_BRIDGE -DBUILD_BRIDGE_ALTERNATIVE_ARCH | ARM32_FLAGS += -DBUILD_BRIDGE -DBUILD_BRIDGE_ALTERNATIVE_ARCH | ||||
@@ -97,27 +86,6 @@ LIBS_win32 += $(MODULEDIR)/jackbridge.win32e.a | |||||
LIBS_win64 += $(MODULEDIR)/jackbridge.win64e.a | LIBS_win64 += $(MODULEDIR)/jackbridge.win64e.a | ||||
endif | endif | ||||
ifeq ($(USING_JUCE),true) | |||||
LIBS_native += $(MODULEDIR)/carla_juce.a | |||||
LIBS_native += $(MODULEDIR)/juce_audio_basics.a | |||||
LIBS_native += $(MODULEDIR)/juce_audio_processors.a | |||||
LIBS_native += $(MODULEDIR)/juce_core.a | |||||
LIBS_native += $(MODULEDIR)/juce_data_structures.a | |||||
LIBS_native += $(MODULEDIR)/juce_events.a | |||||
LIBS_native += $(MODULEDIR)/juce_graphics.a | |||||
LIBS_native += $(MODULEDIR)/juce_gui_basics.a | |||||
LIBS_native += $(MODULEDIR)/juce_gui_extra.a | |||||
LINK_FLAGS += $(JUCE_AUDIO_BASICS_LIBS) | |||||
LINK_FLAGS += $(JUCE_AUDIO_PROCESSORS_LIBS) | |||||
LINK_FLAGS += $(JUCE_CORE_LIBS) | |||||
LINK_FLAGS += $(JUCE_DATA_STRUCTURES_LIBS) | |||||
LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||||
LINK_FLAGS += $(JUCE_GRAPHICS_LIBS) | |||||
LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||||
LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS) | |||||
endif # USING_JUCE | |||||
# --------------------------------------------------------------------------------------------------------------------- | # --------------------------------------------------------------------------------------------------------------------- | ||||
OBJS_native = $(OBJDIR)/$(MODULENAME).cpp.o | OBJS_native = $(OBJDIR)/$(MODULENAME).cpp.o | ||||
@@ -36,7 +36,6 @@ | |||||
#ifdef BUILD_BRIDGE | #ifdef BUILD_BRIDGE | ||||
# undef HAVE_FLUIDSYNTH | # undef HAVE_FLUIDSYNTH | ||||
# undef HAVE_YSFX | # undef HAVE_YSFX | ||||
# undef USING_JUCE | |||||
#endif | #endif | ||||
#ifdef HAVE_FLUIDSYNTH | #ifdef HAVE_FLUIDSYNTH | ||||
@@ -54,22 +53,6 @@ | |||||
# include "../backend/utils/CachedPlugins.cpp" | # include "../backend/utils/CachedPlugins.cpp" | ||||
#endif | #endif | ||||
#ifdef USING_JUCE | |||||
# include "carla_juce/carla_juce.h" | |||||
# pragma GCC diagnostic ignored "-Wdouble-promotion" | |||||
# pragma GCC diagnostic ignored "-Wduplicated-branches" | |||||
# pragma GCC diagnostic ignored "-Weffc++" | |||||
# pragma GCC diagnostic ignored "-Wfloat-equal" | |||||
# include "juce_audio_processors/juce_audio_processors.h" | |||||
# if JUCE_PLUGINHOST_VST | |||||
# define USING_JUCE_FOR_VST2 | |||||
# endif | |||||
# if JUCE_PLUGINHOST_VST3 | |||||
# define USING_JUCE_FOR_VST3 | |||||
# endif | |||||
# pragma GCC diagnostic pop | |||||
#endif | |||||
// must be last | // must be last | ||||
#ifdef BUILDING_CARLA_FOR_WINE | #ifdef BUILDING_CARLA_FOR_WINE | ||||
# include "../jackbridge/JackBridge.hpp" | # include "../jackbridge/JackBridge.hpp" | ||||
@@ -230,11 +213,6 @@ static void do_cached_check(const PluginType type) | |||||
} | } | ||||
} | } | ||||
#ifdef USING_JUCE | |||||
if (type == PLUGIN_AU) | |||||
CarlaJUCE::initialiseJuce_GUI(); | |||||
#endif | |||||
const uint count = carla_get_cached_plugin_count(type, plugPath); | const uint count = carla_get_cached_plugin_count(type, plugPath); | ||||
for (uint i=0; i<count; ++i) | for (uint i=0; i<count; ++i) | ||||
@@ -244,11 +222,6 @@ static void do_cached_check(const PluginType type) | |||||
print_cached_plugin(pinfo); | print_cached_plugin(pinfo); | ||||
} | } | ||||
#ifdef USING_JUCE | |||||
if (type == PLUGIN_AU) | |||||
CarlaJUCE::shutdownJuce_GUI(); | |||||
#endif | |||||
} | } | ||||
#endif // ! BUILD_BRIDGE | #endif // ! BUILD_BRIDGE | ||||
@@ -889,7 +862,6 @@ static void do_lv2_check(const char* const bundle, const bool doInit) | |||||
} | } | ||||
#endif // ! BUILD_BRIDGE | #endif // ! BUILD_BRIDGE | ||||
#ifndef USING_JUCE_FOR_VST2 | |||||
// -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
// VST2 | // VST2 | ||||
@@ -1452,12 +1424,10 @@ static bool do_vst2_check(lib_t& libHandle, const char* const filename, const bo | |||||
(void)filename; | (void)filename; | ||||
#endif | #endif | ||||
} | } | ||||
#endif // ! USING_JUCE_FOR_VST2 | |||||
// -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
// VST3 | // VST3 | ||||
#ifndef USING_JUCE_FOR_VST3 | |||||
struct carla_v3_host_application : v3_host_application_cpp { | struct carla_v3_host_application : v3_host_application_cpp { | ||||
carla_v3_host_application() | carla_v3_host_application() | ||||
{ | { | ||||
@@ -2033,7 +2003,6 @@ static bool do_vst3_check(lib_t& libHandle, const char* const filename, const bo | |||||
v3_exit(); | v3_exit(); | ||||
return false; | return false; | ||||
} | } | ||||
#endif // ! USING_JUCE_FOR_VST3 | |||||
// -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
// AU | // AU | ||||
@@ -2259,7 +2228,9 @@ static bool do_au_check(const char* const filename, const bool doInit) | |||||
{ | { | ||||
hints |= PLUGIN_HAS_CUSTOM_UI; | hints |= PLUGIN_HAS_CUSTOM_UI; | ||||
#ifndef BUILD_BRIDGE | #ifndef BUILD_BRIDGE | ||||
/* FIXME only enable this after doing custom AU hosting | |||||
hints |= PLUGIN_HAS_CUSTOM_EMBED_UI; | hints |= PLUGIN_HAS_CUSTOM_EMBED_UI; | ||||
*/ | |||||
#endif | #endif | ||||
} | } | ||||
@@ -2326,7 +2297,7 @@ static bool do_au_check(const char* const filename, const bool doInit) | |||||
return false; | return false; | ||||
} | } | ||||
#endif | |||||
#endif // CARLA_OS_MAC | |||||
// -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
// CLAP | // CLAP | ||||
@@ -2596,172 +2567,6 @@ static bool do_clap_check(lib_t& libHandle, const char* const filename, const bo | |||||
return false; | return false; | ||||
} | } | ||||
#ifdef USING_JUCE | |||||
// -------------------------------------------------------------------------------------------------------------------- | |||||
// JUCE | |||||
// find all available plugin audio ports | |||||
static void findMaxTotalChannels(juce::AudioProcessor* const filter, int& maxTotalIns, int& maxTotalOuts) | |||||
{ | |||||
filter->enableAllBuses(); | |||||
const int numInputBuses = filter->getBusCount(true); | |||||
const int numOutputBuses = filter->getBusCount(false); | |||||
if (numInputBuses > 1 || numOutputBuses > 1) | |||||
{ | |||||
maxTotalIns = maxTotalOuts = 0; | |||||
for (int i = 0; i < numInputBuses; ++i) | |||||
maxTotalIns += filter->getChannelCountOfBus(true, i); | |||||
for (int i = 0; i < numOutputBuses; ++i) | |||||
maxTotalOuts += filter->getChannelCountOfBus(false, i); | |||||
} | |||||
else | |||||
{ | |||||
maxTotalIns = numInputBuses > 0 ? filter->getBus(true, 0)->getMaxSupportedChannels(64) : 0; | |||||
maxTotalOuts = numOutputBuses > 0 ? filter->getBus(false, 0)->getMaxSupportedChannels(64) : 0; | |||||
} | |||||
} | |||||
static bool do_juce_check(const char* const filename_, const char* const stype, const bool doInit) | |||||
{ | |||||
CARLA_SAFE_ASSERT_RETURN(stype != nullptr && stype[0] != 0, false) // FIXME | |||||
carla_debug("do_juce_check(%s, %s, %s)", filename_, stype, bool2str(doInit)); | |||||
CarlaJUCE::initialiseJuce_GUI(); | |||||
juce::String filename; | |||||
#ifdef CARLA_OS_WIN | |||||
// Fix for wine usage | |||||
if (juce::File("Z:\\usr\\").isDirectory() && filename_[0] == '/') | |||||
{ | |||||
filename = filename_; | |||||
filename.replace("/", "\\"); | |||||
filename = "Z:" + filename; | |||||
} | |||||
else | |||||
#endif | |||||
{ | |||||
filename = juce::File(filename_).getFullPathName(); | |||||
} | |||||
CarlaScopedPointer<juce::AudioPluginFormat> pluginFormat; | |||||
/* */ if (std::strcmp(stype, "VST2") == 0) | |||||
{ | |||||
#if JUCE_PLUGINHOST_VST | |||||
pluginFormat = new juce::VSTPluginFormat(); | |||||
#else | |||||
DISCOVERY_OUT("error", "VST2 support not available"); | |||||
return false; | |||||
#endif | |||||
} | |||||
else if (std::strcmp(stype, "VST3") == 0) | |||||
{ | |||||
#if JUCE_PLUGINHOST_VST3 | |||||
pluginFormat = new juce::VST3PluginFormat(); | |||||
#else | |||||
DISCOVERY_OUT("error", "VST3 support not available"); | |||||
return false; | |||||
#endif | |||||
} | |||||
else if (std::strcmp(stype, "AU") == 0) | |||||
{ | |||||
#if JUCE_PLUGINHOST_AU | |||||
pluginFormat = new juce::AudioUnitPluginFormat(); | |||||
#else | |||||
DISCOVERY_OUT("error", "AU support not available"); | |||||
return false; | |||||
#endif | |||||
} | |||||
if (pluginFormat == nullptr) | |||||
{ | |||||
DISCOVERY_OUT("error", stype << " support not available"); | |||||
return false; | |||||
} | |||||
#ifdef CARLA_OS_WIN | |||||
CARLA_CUSTOM_SAFE_ASSERT_RETURN("Plugin file/folder does not exist", juce::File(filename).exists(), false); | |||||
#endif | |||||
CARLA_SAFE_ASSERT_RETURN(pluginFormat->fileMightContainThisPluginType(filename), false); | |||||
juce::OwnedArray<juce::PluginDescription> results; | |||||
pluginFormat->findAllTypesForFile(results, filename); | |||||
if (results.size() == 0) | |||||
{ | |||||
#if defined(CARLA_OS_MAC) && defined(__aarch64__) | |||||
if (std::strcmp(stype, "VST2") == 0 || std::strcmp(stype, "VST3") == 0) | |||||
return true; | |||||
#endif | |||||
DISCOVERY_OUT("error", "No plugins found"); | |||||
return false; | |||||
} | |||||
for (juce::PluginDescription **it = results.begin(), **end = results.end(); it != end; ++it) | |||||
{ | |||||
juce::PluginDescription* const desc(*it); | |||||
uint hints = 0x0; | |||||
int audioIns = desc->numInputChannels; | |||||
int audioOuts = desc->numOutputChannels; | |||||
int midiIns = 0; | |||||
int midiOuts = 0; | |||||
int parameters = 0; | |||||
if (desc->isInstrument) | |||||
{ | |||||
hints |= PLUGIN_IS_SYNTH; | |||||
midiIns = 1; | |||||
} | |||||
if (doInit) | |||||
{ | |||||
if (std::unique_ptr<juce::AudioPluginInstance> instance | |||||
= pluginFormat->createInstanceFromDescription(*desc, kSampleRate, kBufferSize)) | |||||
{ | |||||
CarlaJUCE::idleJuce_GUI(); | |||||
findMaxTotalChannels(instance.get(), audioIns, audioOuts); | |||||
instance->refreshParameterList(); | |||||
parameters = instance->getParameters().size(); | |||||
if (instance->hasEditor()) | |||||
hints |= PLUGIN_HAS_CUSTOM_UI; | |||||
if (instance->acceptsMidi()) | |||||
midiIns = 1; | |||||
if (instance->producesMidi()) | |||||
midiOuts = 1; | |||||
} | |||||
} | |||||
DISCOVERY_OUT("init", "------------"); | |||||
DISCOVERY_OUT("build", BINARY_NATIVE); | |||||
DISCOVERY_OUT("hints", hints); | |||||
DISCOVERY_OUT("category", getPluginCategoryAsString(getPluginCategoryFromName(desc->category.toRawUTF8()))); | |||||
DISCOVERY_OUT("name", desc->descriptiveName); | |||||
DISCOVERY_OUT("label", desc->name); | |||||
DISCOVERY_OUT("maker", desc->manufacturerName); | |||||
DISCOVERY_OUT("uniqueId", desc->uniqueId); | |||||
DISCOVERY_OUT("audio.ins", audioIns); | |||||
DISCOVERY_OUT("audio.outs", audioOuts); | |||||
DISCOVERY_OUT("midi.ins", midiIns); | |||||
DISCOVERY_OUT("midi.outs", midiOuts); | |||||
DISCOVERY_OUT("parameters.ins", parameters); | |||||
DISCOVERY_OUT("end", "------------"); | |||||
} | |||||
CarlaJUCE::idleJuce_GUI(); | |||||
CarlaJUCE::shutdownJuce_GUI(); | |||||
return false; | |||||
} | |||||
#endif // USING_JUCE_FOR_VST2 | |||||
// -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
// fluidsynth (dls, sf2, sfz) | // fluidsynth (dls, sf2, sfz) | ||||
@@ -3102,25 +2907,15 @@ int main(int argc, const char* argv[]) | |||||
#endif | #endif | ||||
case PLUGIN_VST2: | case PLUGIN_VST2: | ||||
#if defined(USING_JUCE) && JUCE_PLUGINHOST_VST | |||||
retryAsX64lugin = do_juce_check(filename, "VST2", doInit); | |||||
#else | |||||
retryAsX64lugin = do_vst2_check(handle, filename, doInit); | retryAsX64lugin = do_vst2_check(handle, filename, doInit); | ||||
#endif | |||||
break; | break; | ||||
case PLUGIN_VST3: | case PLUGIN_VST3: | ||||
#if defined(USING_JUCE) && JUCE_PLUGINHOST_VST3 | |||||
retryAsX64lugin = do_juce_check(filename, "VST3", doInit); | |||||
#else | |||||
retryAsX64lugin = do_vst3_check(handle, filename, doInit); | retryAsX64lugin = do_vst3_check(handle, filename, doInit); | ||||
#endif | |||||
break; | break; | ||||
case PLUGIN_AU: | case PLUGIN_AU: | ||||
#if defined(USING_JUCE) && JUCE_PLUGINHOST_AU | |||||
do_juce_check(filename, "AU", doInit); | |||||
#elif defined(CARLA_OS_MAC) | |||||
#ifdef CARLA_OS_MAC | |||||
retryAsX64lugin = do_au_check(filename, doInit); | retryAsX64lugin = do_au_check(filename, doInit); | ||||
#else | #else | ||||
DISCOVERY_OUT("error", "AU support not available"); | DISCOVERY_OUT("error", "AU support not available"); | ||||
@@ -1,19 +1,5 @@ | |||||
/* | |||||
* Carla Plugin Host | |||||
* Copyright (C) 2011-2023 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* This program is free software; you can redistribute it and/or | |||||
* modify it under the terms of the GNU General Public License as | |||||
* published by the Free Software Foundation; either version 2 of | |||||
* the License, or any later version. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||||
*/ | |||||
// SPDX-FileCopyrightText: 2011-2024 Filipe Coelho <falktx@falktx.com> | |||||
// SPDX-License-Identifier: GPL-2.0-or-later | |||||
#pragma once | #pragma once | ||||
@@ -61,7 +47,11 @@ typedef struct { | |||||
uint parameterOuts; | uint parameterOuts; | ||||
} PluginListDialogResults; | } PluginListDialogResults; | ||||
#ifdef __cplusplus | |||||
class PluginListDialog; | |||||
#else | |||||
struct PluginListDialog; | struct PluginListDialog; | ||||
#endif | |||||
// -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
@@ -262,9 +262,6 @@ class CarlaUtils(): | |||||
self.lib.carla_get_complete_license_text.argtypes = None | self.lib.carla_get_complete_license_text.argtypes = None | ||||
self.lib.carla_get_complete_license_text.restype = c_char_p | self.lib.carla_get_complete_license_text.restype = c_char_p | ||||
self.lib.carla_get_juce_version.argtypes = None | |||||
self.lib.carla_get_juce_version.restype = c_char_p | |||||
self.lib.carla_get_supported_file_extensions.argtypes = None | self.lib.carla_get_supported_file_extensions.argtypes = None | ||||
self.lib.carla_get_supported_file_extensions.restype = POINTER(c_char_p) | self.lib.carla_get_supported_file_extensions.restype = POINTER(c_char_p) | ||||
@@ -328,15 +325,6 @@ class CarlaUtils(): | |||||
self.lib.carla_pipe_client_destroy.argtypes = [CarlaPipeClientHandle] | self.lib.carla_pipe_client_destroy.argtypes = [CarlaPipeClientHandle] | ||||
self.lib.carla_pipe_client_destroy.restype = None | self.lib.carla_pipe_client_destroy.restype = None | ||||
self.lib.carla_juce_init.argtypes = None | |||||
self.lib.carla_juce_init.restype = None | |||||
self.lib.carla_juce_idle.argtypes = None | |||||
self.lib.carla_juce_idle.restype = None | |||||
self.lib.carla_juce_cleanup.argtypes = None | |||||
self.lib.carla_juce_cleanup.restype = None | |||||
self.lib.carla_get_desktop_scale_factor.argtypes = None | self.lib.carla_get_desktop_scale_factor.argtypes = None | ||||
self.lib.carla_get_desktop_scale_factor.restype = c_double | self.lib.carla_get_desktop_scale_factor.restype = c_double | ||||
@@ -399,10 +387,6 @@ class CarlaUtils(): | |||||
def get_complete_license_text(self): | def get_complete_license_text(self): | ||||
return charPtrToString(self.lib.carla_get_complete_license_text()) | return charPtrToString(self.lib.carla_get_complete_license_text()) | ||||
# Get the juce version used in the current Carla build. | |||||
def get_juce_version(self): | |||||
return charPtrToString(self.lib.carla_get_juce_version()) | |||||
# Get the list of supported file extensions in carla_load_file(). | # Get the list of supported file extensions in carla_load_file(). | ||||
def get_supported_file_extensions(self): | def get_supported_file_extensions(self): | ||||
return charPtrPtrToStringList(self.lib.carla_get_supported_file_extensions()) | return charPtrPtrToStringList(self.lib.carla_get_supported_file_extensions()) | ||||
@@ -484,15 +468,6 @@ class CarlaUtils(): | |||||
def pipe_client_destroy(self, handle): | def pipe_client_destroy(self, handle): | ||||
self.lib.carla_pipe_client_destroy(handle) | self.lib.carla_pipe_client_destroy(handle) | ||||
def juce_init(self): | |||||
self.lib.carla_juce_init() | |||||
def juce_idle(self): | |||||
self.lib.carla_juce_idle() | |||||
def juce_cleanup(self): | |||||
self.lib.carla_juce_cleanup() | |||||
def get_desktop_scale_factor(self): | def get_desktop_scale_factor(self): | ||||
return float(self.lib.carla_get_desktop_scale_factor()) | return float(self.lib.carla_get_desktop_scale_factor()) | ||||
@@ -1,8 +1,5 @@ | |||||
/* | |||||
* Carla plugin host | |||||
* Copyright (C) 2011-2023 Filipe Coelho <falktx@falktx.com> | |||||
* SPDX-License-Identifier: GPL-2.0-or-later | |||||
*/ | |||||
// SPDX-FileCopyrightText: 2011-2024 Filipe Coelho <falktx@falktx.com> | |||||
// SPDX-License-Identifier: GPL-2.0-or-later | |||||
#include "pluginlistdialog.hpp" | #include "pluginlistdialog.hpp" | ||||
#include "pluginrefreshdialog.hpp" | #include "pluginrefreshdialog.hpp" | ||||
@@ -65,6 +62,9 @@ struct PluginPaths { | |||||
QCarlaString vst2; | QCarlaString vst2; | ||||
QCarlaString vst3; | QCarlaString vst3; | ||||
QCarlaString clap; | QCarlaString clap; | ||||
#ifdef CARLA_OS_MAC | |||||
QCarlaString au; | |||||
#endif | |||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | #ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | ||||
QCarlaString jsfx; | QCarlaString jsfx; | ||||
QCarlaString sf2; | QCarlaString sf2; | ||||
@@ -261,6 +261,12 @@ struct PluginPaths { | |||||
#endif | #endif | ||||
} | } | ||||
#ifdef CARLA_OS_MAC | |||||
au = HOME + "/Library/Audio/Plug-Ins/Components"; | |||||
au += ":/Library/Audio/Plug-Ins/Components"; | |||||
au += ":/System/Library/Components"; | |||||
#endif | |||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | #ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | ||||
if (const char *const envJSFX = std::getenv("JSFX_PATH")) | if (const char *const envJSFX = std::getenv("JSFX_PATH")) | ||||
{ | { | ||||
@@ -780,13 +786,13 @@ struct PluginListDialog::PrivateData { | |||||
std::vector<PluginInfo> vst2; | std::vector<PluginInfo> vst2; | ||||
std::vector<PluginInfo> vst3; | std::vector<PluginInfo> vst3; | ||||
std::vector<PluginInfo> clap; | std::vector<PluginInfo> clap; | ||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | |||||
#ifdef CARLA_OS_MAC | #ifdef CARLA_OS_MAC | ||||
std::vector<PluginInfo> au; | std::vector<PluginInfo> au; | ||||
#endif | #endif | ||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | |||||
std::vector<PluginInfo> jsfx; | std::vector<PluginInfo> jsfx; | ||||
std::vector<PluginInfo> kits; | std::vector<PluginInfo> kits; | ||||
#endif | |||||
#endif | |||||
QMap<QString, QList<PluginInfo>> cache; | QMap<QString, QList<PluginInfo>> cache; | ||||
QList<PluginFavorite> favorites; | QList<PluginFavorite> favorites; | ||||
@@ -803,14 +809,14 @@ struct PluginListDialog::PrivateData { | |||||
case PLUGIN_VST2: vst2.push_back(pinfo); return true; | case PLUGIN_VST2: vst2.push_back(pinfo); return true; | ||||
case PLUGIN_VST3: vst3.push_back(pinfo); return true; | case PLUGIN_VST3: vst3.push_back(pinfo); return true; | ||||
case PLUGIN_CLAP: clap.push_back(pinfo); return true; | case PLUGIN_CLAP: clap.push_back(pinfo); return true; | ||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | |||||
#ifdef CARLA_OS_MAC | #ifdef CARLA_OS_MAC | ||||
case PLUGIN_AU: au.push_back(pinfo); return true; | case PLUGIN_AU: au.push_back(pinfo); return true; | ||||
#endif | #endif | ||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | |||||
case PLUGIN_JSFX: jsfx.push_back(pinfo); return true; | case PLUGIN_JSFX: jsfx.push_back(pinfo); return true; | ||||
case PLUGIN_SF2: | case PLUGIN_SF2: | ||||
case PLUGIN_SFZ: kits.push_back(pinfo); return true; | case PLUGIN_SFZ: kits.push_back(pinfo); return true; | ||||
#endif | |||||
#endif | |||||
default: return false; | default: return false; | ||||
} | } | ||||
} | } | ||||
@@ -1111,6 +1117,11 @@ void PluginListDialog::setPluginPath(const PluginType ptype, const char* const p | |||||
case PLUGIN_CLAP: | case PLUGIN_CLAP: | ||||
p->paths.clap = path; | p->paths.clap = path; | ||||
break; | break; | ||||
#ifdef CARLA_OS_MAC | |||||
case PLUGIN_AU: | |||||
p->paths.au = path; | |||||
break; | |||||
#endif | |||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | #ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | ||||
case PLUGIN_LADSPA: | case PLUGIN_LADSPA: | ||||
p->paths.ladspa = path; | p->paths.ladspa = path; | ||||
@@ -1245,17 +1256,14 @@ void PluginListDialog::timerEvent(QTimerEvent* const event) | |||||
p->discovery.ptype = PLUGIN_CLAP; | p->discovery.ptype = PLUGIN_CLAP; | ||||
break; | break; | ||||
case PLUGIN_CLAP: | case PLUGIN_CLAP: | ||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | |||||
#ifdef CARLA_OS_MAC | #ifdef CARLA_OS_MAC | ||||
if (p->discovery.btype == BINARY_POSIX32 || p->discovery.btype == BINARY_POSIX64) | |||||
{ | |||||
ui.label->setText(tr("Discovering AU plugins...")); | |||||
p->discovery.ptype = PLUGIN_AU; | |||||
break; | |||||
} | |||||
[[fallthrough]]; | |||||
ui.label->setText(tr("Discovering AU plugins...")); | |||||
path = p->paths.au; | |||||
p->discovery.ptype = PLUGIN_AU; | |||||
break; | |||||
case PLUGIN_AU: | case PLUGIN_AU: | ||||
#endif | #endif | ||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | |||||
if (p->discovery.btype == BINARY_NATIVE && p->paths.jsfx.isNotEmpty()) | if (p->discovery.btype == BINARY_NATIVE && p->paths.jsfx.isNotEmpty()) | ||||
{ | { | ||||
ui.label->setText(tr("Discovering JSFX plugins...")); | ui.label->setText(tr("Discovering JSFX plugins...")); | ||||
@@ -1422,18 +1430,18 @@ void PluginListDialog::addPluginsToTable() | |||||
for (const PluginInfo& plugin : p->plugins.clap) | for (const PluginInfo& plugin : p->plugins.clap) | ||||
addPluginToTable(plugin); | addPluginToTable(plugin); | ||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | |||||
#ifdef CARLA_OS_MAC | #ifdef CARLA_OS_MAC | ||||
for (const PluginInfo& plugin : p->plugins.au) | for (const PluginInfo& plugin : p->plugins.au) | ||||
addPluginToTable(plugin); | addPluginToTable(plugin); | ||||
#endif | #endif | ||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | |||||
for (const PluginInfo& plugin : p->plugins.jsfx) | for (const PluginInfo& plugin : p->plugins.jsfx) | ||||
addPluginToTable(plugin); | addPluginToTable(plugin); | ||||
for (const PluginInfo& plugin : p->plugins.kits) | for (const PluginInfo& plugin : p->plugins.kits) | ||||
addPluginToTable(plugin); | addPluginToTable(plugin); | ||||
#endif | |||||
#endif | |||||
CARLA_SAFE_ASSERT_INT2(p->lastTableWidgetIndex == ui.tableWidget->rowCount(), | CARLA_SAFE_ASSERT_INT2(p->lastTableWidgetIndex == ui.tableWidget->rowCount(), | ||||
p->lastTableWidgetIndex, ui.tableWidget->rowCount()); | p->lastTableWidgetIndex, ui.tableWidget->rowCount()); | ||||
@@ -1936,13 +1944,13 @@ void PluginListDialog::refreshPluginsStart() | |||||
p->plugins.vst2.clear(); | p->plugins.vst2.clear(); | ||||
p->plugins.vst3.clear(); | p->plugins.vst3.clear(); | ||||
p->plugins.clap.clear(); | p->plugins.clap.clear(); | ||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | |||||
#ifdef CARLA_OS_MAC | #ifdef CARLA_OS_MAC | ||||
p->plugins.au.clear(); | p->plugins.au.clear(); | ||||
#endif | #endif | ||||
#ifndef CARLA_FRONTEND_ONLY_EMBEDDABLE_PLUGINS | |||||
p->plugins.jsfx.clear(); | p->plugins.jsfx.clear(); | ||||
p->plugins.kits.clear(); | p->plugins.kits.clear(); | ||||
#endif | |||||
#endif | |||||
p->discovery.dialog->b_start->setEnabled(false); | p->discovery.dialog->b_start->setEnabled(false); | ||||
p->discovery.dialog->b_skip->setEnabled(true); | p->discovery.dialog->b_skip->setEnabled(true); | ||||
p->discovery.ignoreCache = p->discovery.dialog->ch_all->isChecked(); | p->discovery.ignoreCache = p->discovery.dialog->ch_all->isChecked(); | ||||
@@ -1,8 +1,5 @@ | |||||
/* | |||||
* Carla plugin host | |||||
* Copyright (C) 2011-2023 Filipe Coelho <falktx@falktx.com> | |||||
* SPDX-License-Identifier: GPL-2.0-or-later | |||||
*/ | |||||
// SPDX-FileCopyrightText: 2011-2024 Filipe Coelho <falktx@falktx.com> | |||||
// SPDX-License-Identifier: GPL-2.0-or-later | |||||
#pragma once | #pragma once | ||||
@@ -19,6 +16,7 @@ | |||||
#endif | #endif | ||||
#include <QtWidgets/QDialog> | #include <QtWidgets/QDialog> | ||||
#include "ui_pluginlistdialog.h" | |||||
#ifdef __clang__ | #ifdef __clang__ | ||||
# pragma clang diagnostic pop | # pragma clang diagnostic pop | ||||
@@ -26,8 +24,6 @@ | |||||
# pragma GCC diagnostic pop | # pragma GCC diagnostic pop | ||||
#endif | #endif | ||||
#include "ui_pluginlistdialog.h" | |||||
class QSafeSettings; | class QSafeSettings; | ||||
typedef struct _CarlaPluginDiscoveryInfo CarlaPluginDiscoveryInfo; | typedef struct _CarlaPluginDiscoveryInfo CarlaPluginDiscoveryInfo; | ||||
typedef struct _HostSettings HostSettings; | typedef struct _HostSettings HostSettings; | ||||