Browse Source

Continue work on jucewrapper

Signed-off-by: falkTX <falktx@falktx.com>
tags/22.03
falkTX 3 years ago
parent
commit
649c88629e
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
3 changed files with 226 additions and 26 deletions
  1. +115
    -6
      jucewrapper/CMakeLists.txt
  2. +109
    -20
      jucewrapper/CardinalWrapper.cpp
  3. +2
    -0
      src/Makefile.cardinal.mk

+ 115
- 6
jucewrapper/CMakeLists.txt View File

@@ -3,6 +3,82 @@ project(Cardinal VERSION 0.0.0)

add_subdirectory(JUCE)

# Config

set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)

# Define static libs

add_library(dgl STATIC IMPORTED)
set_property(TARGET dgl PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../dpf/build/libdgl-opengl.a")

add_library(carla_host_plugin STATIC IMPORTED)
set_property(TARGET carla_host_plugin PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/plugin/Release/carla-host-plugin.cpp.o")

add_library(carla_engine_plugin STATIC IMPORTED)
set_property(TARGET carla_engine_plugin PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/carla_engine_plugin.a")

add_library(carla_plugin STATIC IMPORTED)
set_property(TARGET carla_plugin PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/carla_plugin.a")

add_library(native_plugins STATIC IMPORTED)
set_property(TARGET native_plugins PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/native-plugins.a")

add_library(audio_decoder STATIC IMPORTED)
set_property(TARGET audio_decoder PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/audio_decoder.a")

add_library(jackbridge STATIC IMPORTED)
set_property(TARGET jackbridge PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/jackbridge.min.a")

add_library(lilv STATIC IMPORTED)
set_property(TARGET lilv PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/lilv.a")

add_library(rtmempool STATIC IMPORTED)
set_property(TARGET rtmempool PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/rtmempool.a")

add_library(sfzero STATIC IMPORTED)
set_property(TARGET sfzero PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/sfzero.a")

add_library(water STATIC IMPORTED)
set_property(TARGET water PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/water.a")

add_library(zita_resampler STATIC IMPORTED)
set_property(TARGET zita_resampler PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/zita-resampler.a")

add_library(sCardinalFX STATIC IMPORTED)
set_property(TARGET sCardinalFX PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../bin/CardinalFX.a")

add_library(sPlugins STATIC IMPORTED)
set_property(TARGET sPlugins PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../plugins/plugins.a")

add_library(sRack STATIC IMPORTED)
set_property(TARGET sRack PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/rack.a")

#ifeq ($(WINDOWS),true)
#RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libarchive_static.a
add_library(libarchive STATIC IMPORTED)
set_property(TARGET libarchive PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libarchive.a")

add_library(libjansson STATIC IMPORTED)
set_property(TARGET libjansson PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libjansson.a")

add_library(libquickjs STATIC IMPORTED)
set_property(TARGET libquickjs PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libquickjs.a")

add_library(libsamplerate STATIC IMPORTED)
set_property(TARGET libsamplerate PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libsamplerate.a")

add_library(libspeexdsp STATIC IMPORTED)
set_property(TARGET libspeexdsp PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libspeexdsp.a")

add_library(libzstd STATIC IMPORTED)
set_property(TARGET libzstd PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libzstd.a")

#find_package(Dbus)
find_package(OpenGL)
find_package(X11)

# FX variant

juce_add_plugin(CardinalFX
@@ -13,7 +89,7 @@ juce_add_plugin(CardinalFX
EDITOR_WANTS_KEYBOARD_FOCUS TRUE
PLUGIN_MANUFACTURER_CODE Dstr
PLUGIN_CODE dCnF
FORMATS VST3 AU
FORMATS Standalone AU
PRODUCT_NAME "CardinalFX")

target_sources(CardinalFX
@@ -27,19 +103,52 @@ target_include_directories(CardinalFX

target_compile_definitions(CardinalFX
PUBLIC
JUCE_DISPLAY_SPLASH_SCREEN=0
JUCE_USE_CURL=0
JUCE_WEB_BROWSER=0)

target_link_options(CardinalFX
PRIVATE
"-l/Shared/Personal/FOSS/GIT/DISTRHO/DISTRHO_Cardinal/bin/CardinalFX.so"
"-Wl,-rpath,."
)
target_link_directories(CardinalFX
PUBLIC
/opt/kxstudio/lib)

target_link_libraries(CardinalFX
PRIVATE
juce::juce_audio_utils
-Wl,--whole-archive
sCardinalFX
sPlugins
sRack
carla_host_plugin
carla_engine_plugin
carla_plugin
native_plugins
audio_decoder
jackbridge
lilv
rtmempool
sfzero
water
zita_resampler
dgl
libarchive
libjansson
libquickjs
libsamplerate
libspeexdsp
libzstd
-Wl,--no-whole-archive
GLX
OpenGL
X11
Xcursor
Xext
Xrandr
PUBLIC
-ldbus-1
-llo
-lmagic
-lsndfile -lFLAC -lvorbisenc -lvorbis -logg
-lrt
juce::juce_recommended_config_flags
juce::juce_recommended_lto_flags
juce::juce_recommended_warning_flags)


+ 109
- 20
jucewrapper/CardinalWrapper.cpp View File

@@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-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
@@ -17,15 +17,14 @@

#include <juce_audio_processors/juce_audio_processors.h>

#include "DistrhoPlugin.hpp"
#include "DistrhoUI.hpp"

DISTRHO_PLUGIN_EXPORT DISTRHO_NAMESPACE::Plugin* createSharedPlugin();
#define createPlugin ::createSharedPlugin
#define createPlugin createStaticPlugin
#include "src/DistrhoPluginInternal.hpp"
#include "src/DistrhoUIInternal.hpp"

START_NAMESPACE_DISTRHO

#if 0

// -----------------------------------------------------------------------------------------------------------

class ParameterForDPF : public juce::AudioProcessorParameter
@@ -69,29 +68,43 @@ protected:
return 0.0f;
}
};
#endif

// -----------------------------------------------------------------------------------------------------------

class CardinalWrapperProcessor : public juce::AudioProcessor
{
friend class CardinalWrapperEditor;

PluginExporter plugin;

static bool writeMidiCb(void* ptr, const MidiEvent& midiEvent)
static bool writeMidi(void* ptr, const MidiEvent& midiEvent)
{
return false;
}

static bool requestParameterValueChangeCb(void* ptr, uint32_t index, float value)
static bool requestParameterValueChange(void* ptr, uint32_t index, float value)
{
return false;
}

static bool updateStateValue(void* ptr, const char* key, const char* value)
{
return false;
}

public:
CardinalWrapperProcessor()
: plugin(this, writeMidiCb, requestParameterValueChangeCb)
: plugin(this, writeMidi, requestParameterValueChange, updateStateValue)
{
for (uint i=0; i<plugin.getParameterCount(); ++i)
addParameter(new ParameterForDPF(plugin, i));
if (const double sampleRate = getSampleRate())
plugin.setSampleRate(sampleRate);

if (const int blockSize = getBlockSize())
plugin.setBufferSize(blockSize);

// for (uint i=0; i<plugin.getParameterCount(); ++i)
// addParameter(new ParameterForDPF(plugin, i));
}

~CardinalWrapperProcessor() override
@@ -125,11 +138,25 @@ public:
{
midiMessages.clear();
// AudioPlayHead* getPlayHead()

const int numSamples = buffer.getNumSamples();
DISTRHO_SAFE_ASSERT_INT_RETURN(numSamples > 0, numSamples,);

DISTRHO_SAFE_ASSERT_RETURN(buffer.getNumChannels() == 2,);

const float* audioBufferIn[2];
float* audioBufferOut[2];
audioBufferIn[0] = buffer.getReadPointer(0);
audioBufferIn[1] = buffer.getReadPointer(1);
audioBufferOut[0] = buffer.getWritePointer(0);
audioBufferOut[1] = buffer.getWritePointer(1);

plugin.run(audioBufferIn, audioBufferOut, numSamples, nullptr, 0);
}

double getTailLengthSeconds() const override
{
return true;
return 0.0;
}

bool acceptsMidi() const override
@@ -181,17 +208,80 @@ public:
}
};

// -----------------------------------------------------------------------------------------------------------

class CardinalWrapperEditor : public juce::AudioProcessorEditor
{
UIExporter* ui;
void* const dspPtr;

static void editParamFunc(void* ptr, uint32_t rindex, bool started) {}
static void setParamFunc(void* ptr, uint32_t rindex, float value) {}
static void setStateFunc(void* ptr, const char* key, const char* value) {}
static void sendNoteFunc(void* ptr, uint8_t channel, uint8_t note, uint8_t velo) {}

static void setSizeFunc(void* ptr, uint width, uint height)
{
static_cast<CardinalWrapperEditor*>(ptr)->setSize(width, height);
}

static bool fileRequestFunc(void* ptr, const char* key) { return false; }

public:
CardinalWrapperEditor(CardinalWrapperProcessor& processor)
: juce::AudioProcessorEditor(processor)
{}
CardinalWrapperEditor(CardinalWrapperProcessor& cardinalProcessor)
: juce::AudioProcessorEditor(cardinalProcessor),
ui(nullptr),
dspPtr(cardinalProcessor.plugin.getInstancePointer())
{
setOpaque(true);
setResizable(true, false);
// setResizeLimits(648, 538, -1, -1);
setSize(1228, 666);
}

~CardinalWrapperEditor() override
{}
{
delete ui;
}

void paint(juce::Graphics&)
{
if (ui == nullptr)
{
auto peer = getPeer();
d_stdout("peer is %p", peer);

auto handle = peer->getNativeHandle();
d_stdout("handle is %p", handle);

auto proc = getAudioProcessor();
d_stdout("proc is %p", proc);

ui = new UIExporter(this,
(uintptr_t)handle,
proc->getSampleRate(),
editParamFunc,
setParamFunc,
setStateFunc,
sendNoteFunc,
setSizeFunc,
fileRequestFunc,
nullptr, // bundlePath
dspPtr,
0.0 // scaleFactor
);
}

ui->plugin_idle();
repaint();
}
};

juce::AudioProcessorEditor* CardinalWrapperProcessor::createEditor()
{
return new CardinalWrapperEditor(*this);
}

// -----------------------------------------------------------------------------------------------------------

END_NAMESPACE_DISTRHO
@@ -200,11 +290,10 @@ END_NAMESPACE_DISTRHO

juce::AudioProcessor* createPluginFilter()
{
// set valid but dummy values
d_nextBufferSize = 512;
d_nextSampleRate = 48000.0;
return new DISTRHO_NAMESPACE::CardinalWrapperProcessor;
}

// -----------------------------------------------------------------------------------------------------------

#define DISTRHO_IS_STANDALONE 0
#include "src/DistrhoPlugin.cpp"
#include "src/DistrhoUtils.cpp"

+ 2
- 0
src/Makefile.cardinal.mk View File

@@ -257,6 +257,8 @@ BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"'

ifeq ($(CARDINAL_VARIANT),main)
all: jack lv2 vst3
else ifeq ($(CARDINAL_VARIANT),fx)
all: lv2 vst2 vst3 static
else
all: lv2 vst2 vst3
endif


Loading…
Cancel
Save