Merge branch 'CVfunk' of https://github.com/codygeary/Cardinal into CVfunk

This commit is contained in:
CV funk 2024-04-17 15:39:20 +02:00
commit e08693a640
53 changed files with 614 additions and 225 deletions

42
.github/ISSUE_TEMPLATE/bug.yaml vendored Normal file
View file

@ -0,0 +1,42 @@
name: Bug Report
description: Report a bug with Cardinal
body:
- type: input
id: version
attributes:
label: Version
value: "24.04"
validations:
required: true
- type: dropdown
id: plugin-type
attributes:
label: Plugin type
multiple: true
options:
- Native / JACK
- AU
- CLAP
- LV2
- VST2
- VST3
validations:
required: true
- type: input
id: os
attributes:
label: OS
validations:
required: true
- type: input
id: daw-host
attributes:
label: "DAW / Host (if applicable)"
validations:
required: false
- type: textarea
id: bug-description
attributes:
label: Description
validations:
required: true

8
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View file

@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Module request
url: https://github.com/DISTRHO/Cardinal/wiki/Possible-modules-to-include
about: To request a new module, add it to the wiki page here
- name: Discussions
url: https://github.com/DISTRHO/Cardinal/discussions
about: Ask other questions or share what you've made with Cardinal

9
.github/ISSUE_TEMPLATE/feature.yaml vendored Normal file
View file

@ -0,0 +1,9 @@
name: Feature request
description: Request a new feature
body:
- type: textarea
id: feature-description
attributes:
label: Description
validations:
required: true

9
.gitmodules vendored
View file

@ -233,6 +233,15 @@
[submodule "plugins/DHE-Modules"]
path = plugins/DHE-Modules
url = https://github.com/dhemery/DHE-Modules.git
[submodule "plugins/Computerscare"]
path = plugins/Computerscare
url = https://github.com/freddyz/computerscare-vcv-modules.git
[submodule "plugins/CVfunk"]
path = plugins/CVfunk
url = https://github.com/codygeary/CVfunk-Modules.git
[submodule "plugins/StarlingVia"]
path = plugins/StarlingVia
url = https://github.com/starlingcode/Via-for-Rack.git
[submodule "plugins/Biset"]
path = plugins/Biset
url = https://github.com/gibbonjoyeux/VCV-Biset.git

View file

@ -10,11 +10,12 @@ include $(ROOT)/Makefile.base.mk
# Set version
# also set in:
# .github/ISSUE_TEMPLATE/bug.yaml
# src/CardinalCommon.cpp `CARDINAL_VERSION`
# src/CardinalPlugin.cpp `getVersion`
# utils/macOS/Info_{JACK,Native}.plist
# src/CardinalCommon.cpp src/CardinalPlugin.cpp utils/macOS/Info_{JACK,Native}.plist
VERSION = 24.03
# .github/ISSUE_TEMPLATE/bug.yaml src/CardinalCommon.cpp src/CardinalPlugin.cpp utils/macOS/Info_{JACK,Native}.plist
VERSION = 24.04
# --------------------------------------------------------------
# Build targets

View file

@ -139,6 +139,7 @@ At the moment the following 3rd-party modules are provided:
- [Catro/Modulo](https://github.com/catronomix/catro-modulo)
- [cf](https://github.com/cfoulc/cf)
- [ChowDSP](https://github.com/jatinchowdhury18/ChowDSP-VCV)
- [Computerscare](https://github.com/freddyz/computerscare-vcv-modules)
- [CVfunk](https://github.com/codygeary/CVfunk-Modules)
- [dBiz](https://github.com/dBiz/dBiz)
- [DHE Modules](https://github.com/dhemery/DHE-Modules)
@ -185,6 +186,7 @@ At the moment the following 3rd-party modules are provided:
- [Sapphire](https://github.com/cosinekitty/sapphire)
- [Sonus Modular](https://gitlab.com/sonusdept/sonusmodular)
- [stocaudio](https://github.com/aptrn/stocaudio-modules)
- [Starling Via](https://github.com/starlingcode/Via-for-Rack)
- [Stoermelder Pack-One](https://github.com/stoermelder/vcvrack-packone)
- [Surge XT](https://github.com/surge-synthesizer/surge-rack)
- [unless_modules](https://gitlab.com/unlessgames/unless_modules)

2
carla

@ -1 +1 @@
Subproject commit 66afe24a08790732cc17d81d4b846a1e0cfa0118
Subproject commit 3c7d0e7b914d38a32b733cc5ced0b5696d2f9a03

2
deps/PawPaw vendored

@ -1 +1 @@
Subproject commit b84d0ec2d1bb5c7d7fd05d4a8d7f4af71306c425
Subproject commit 0edef2120e7fd493493e66967438c0b2ea8c8552

View file

@ -29,10 +29,12 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule
| Bacon Music | GPL-3.0-or-later | |
| Befaco | GPL-3.0-or-later | |
| Bidoo | GPL-3.0-or-later | |
| Biset | MIT | |
| Bogaudio | GPL-3.0-or-later | |
| Catro/Modulo | BSD-3-Clause | |
| cf | BSD-3-Clause | |
| ChowDSP | GPL-3.0-or-later | |
| Computerscare | BSD-3-Clause | |
| CVfunk | MIT | |
| dBiz | GPL-3.0-or-later | |
| DHE-Modules | MIT | |
@ -78,6 +80,7 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule
| RebelTech | GPL-2.0-or-later | |
| Sapphire | GPL-3.0-or-later | |
| Sonus Modular | GPL-3.0-or-later | |
| Starling Via | MIT | |
| stocaudio | GPL-3.0-or-later | |
| Stoermelder Pack-One | GPL-3.0-or-later | |
| Surge XT | GPL-3.0-or-later | |
@ -145,6 +148,9 @@ Below is a list of artwork licenses from plugins
| Befaco/components/* | CC-BY-NC-4.0 | |
| Befaco/fonts/Segment7Standard.otf | OFL-1.1-RFN | |
| Befaco/panels/* | Custom | Copyright © [Befaco](https://www.befaco.org/), [used and distributed with permission](LICENSE-PERMISSIONS.md#befaco-manu-retamero--befaco) |
| Biset/* | MIT | No artwork specific license provided |
| Biset/FT88-Regular.ttf | OFL | |
| Biset/Recursive_VF_1.085.ttf | OFL-1.1-no-RFN | |
| BogaudioModules/* | CC-BY-SA-4.0 | |
| BogaudioModules/fonts/audiowide.ttf | OFL-1.1-RFN | |
| BogaudioModules/fonts/inconsolata*.ttf | OFL-1.1-no-RFN | |
@ -158,6 +164,9 @@ Below is a list of artwork licenses from plugins
| cf/VT323-Regular.ttf | OFL-1.1-no-RFN | |
| ChowDSP/* | GPL-3.0-or-later | Same license as source code |
| ChowDSP/fonts/RobotoCondensed-*.ttf | Apache-2.0 | |
| Computerscare/* | BSD-3-Clause | No artwork specific license provided |
| Computerscare/Oswald-Regular.ttf | OFL-1.1 | |
| Computerscare/Segment7Standard.ttf | OFL-1.1-RFN | |
| CVfunk/* | MIT | Same license as source code |
| dBiz/* | CC-BY-NC-ND-4.0 | |
| dBiz/DejaVuSansMono.ttf | Bitstream-Vera | |
@ -231,6 +240,7 @@ Below is a list of artwork licenses from plugins
| RebelTech/* | CC-BY-NC-4.0 | |
| Sapphire/* | GPL-3.0-or-later | No artwork specific license provided |
| sonusmodular/* | GPL-3.0-or-later | [Same license as source code](https://gitlab.com/sonusdept/sonusmodular/-/issues/14) |
| StarlingVia/* | MIT | No artwork specific license provided |
| stocaudio/* | GPL-3.0-or-later | No artwork specific license provided |
| stoermelder-packone/* | GPL-3.0-or-later | No artwork specific license provided |
| stoermelder-packone/fonts/RedkostComic.otf | OFL-1.1-RFN | |

2
dpf

@ -1 +1 @@
Subproject commit 045b943199393053c606b530fc882661502d53d7
Subproject commit 01aca7649c1a3a5ee20a47c5ecd3cb2e29395f89

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -29,6 +29,8 @@
#include "choc/choc_SmallVector.h"
#include <jansson.h>
namespace rack {
/** Abstraction for all MIDI drivers in Rack */
namespace midi {
@ -111,6 +113,18 @@ struct Message {
};
struct InputQueue {
struct Internal;
Internal* internal;
InputQueue();
~InputQueue();
bool tryPop(Message* const messageOut, int64_t maxFrame);
json_t* toJson() const;
void fromJson(json_t* rootJ);
};
/* NOTE all the other MIDI stuff (drivers, ports etc) is purposefully missing here, unwanted in Cardinal
*/
struct Port;

View file

@ -1,47 +1,27 @@
/*
* DISTRHO Cardinal Plugin
* 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
* published by the Free Software Foundation; either version 3 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 LICENSE file.
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#pragma once
#include "plugin.hpp"
#include "DistrhoUtils.hpp"
#ifdef BUILDING_PLUGIN_MODULES
#include "rack.hpp"
#endif
#include "../dgl/Base.hpp"
namespace rack {
namespace midi {
struct Message;
}
}
// -----------------------------------------------------------------------------------------------------------
// from PluginContext.hpp
// --------------------------------------------------------------------------------------------------------------------
// Base DISTRHO classes
START_NAMESPACE_DGL
class TopLevelWidget;
template <class BaseWidget> class NanoBaseWidget;
typedef NanoBaseWidget<TopLevelWidget> NanoTopLevelWidget;
END_NAMESPACE_DGL
#ifndef DISTRHO_DETAILS_HPP_INCLUDED
START_NAMESPACE_DISTRHO
static constexpr const uint32_t kModuleParameterCount = 24;
enum CardinalVariant {
kCardinalVariantMain,
kCardinalVariantMini,
kCardinalVariantFX,
kCardinalVariantNative,
kCardinalVariantSynth,
};
namespace CardinalDISTRHO {
class Plugin;
class UI;
@ -54,6 +34,45 @@ struct MidiEvent {
const uint8_t* dataExt;
};
}
#endif
// --------------------------------------------------------------------------------------------------------------------
// Base DGL classes
#ifndef DGL_BASE_HPP_INCLUDED
namespace CardinalDGL {
class TopLevelWidget;
template <class BaseWidget> class NanoBaseWidget;
typedef NanoBaseWidget<TopLevelWidget> NanoTopLevelWidget;
struct IdleCallback {
virtual ~IdleCallback() {}
virtual void idleCallback() = 0;
};
}
#endif
using CardinalDGL::IdleCallback;
// --------------------------------------------------------------------------------------------------------------------
// Cardinal specific context
static constexpr const uint32_t kModuleParameterCount = 24;
enum CardinalVariant {
kCardinalVariantMain,
kCardinalVariantMini,
kCardinalVariantFX,
kCardinalVariantNative,
kCardinalVariantSynth,
};
struct CardinalPluginContext : rack::Context {
uint32_t bufferSize, processCounter;
double sampleRate;
@ -67,23 +86,23 @@ struct CardinalPluginContext : rack::Context {
uintptr_t nativeWindowId;
const float* const* dataIns;
float** dataOuts;
const MidiEvent* midiEvents;
const CardinalDISTRHO::MidiEvent* midiEvents;
uint32_t midiEventCount;
Plugin* const plugin;
DGL_NAMESPACE::NanoTopLevelWidget* tlw;
UI* ui;
CardinalPluginContext(Plugin* const p);
CardinalDISTRHO::Plugin* const plugin;
#ifndef HEADLESS
CardinalDGL::NanoTopLevelWidget* tlw;
CardinalDISTRHO::UI* ui;
#endif
CardinalPluginContext(CardinalDISTRHO::Plugin* const p);
void writeMidiMessage(const rack::midi::Message& message, uint8_t channel);
#ifndef HEADLESS
#ifndef HEADLESS
bool addIdleCallback(IdleCallback* cb) const;
void removeIdleCallback(IdleCallback* cb) const;
#endif
#endif
};
#ifndef HEADLESS
void handleHostParameterDrag(const CardinalPluginContext* pcontext, uint index, bool started);
#endif
END_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------------------------------------

1
plugins/Biset Submodule

@ -0,0 +1 @@
Subproject commit a697109733cf0d0f022cf01e06896a1e78b236f6

View file

@ -1,11 +1,11 @@
/*
* AIDA-X Cardinal plugin
* Copyright (C) 2022-2023 Massimo Pennazio <maxipenna@libero.it>
* Copyright (C) 2023 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2023-2024 Filipe Coelho <falktx@falktx.com>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#include "plugincontext.hpp"
#include "plugin.hpp"
#include "ModuleWidgets.hpp"
#ifndef HEADLESS
@ -250,7 +250,6 @@ struct AidaPluginModule : Module {
NUM_LIGHTS
};
CardinalPluginContext* const pcontext;
bool fileChanged = false;
std::string currentFile;
@ -272,7 +271,6 @@ struct AidaPluginModule : Module {
#endif
AidaPluginModule()
: pcontext(static_cast<CardinalPluginContext*>(APP))
{
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
@ -656,8 +654,6 @@ struct AidaPluginModule : Module {
cachedParams[kParameterPRESENCE]);
}
#endif
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(AidaPluginModule)
};
// --------------------------------------------------------------------------------------------------------------------
@ -1093,8 +1089,6 @@ struct AidaWidget : ModuleWidgetWithSideScrews<23> {
menu->addChild(new LoadModelFileItem(module));
}
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(AidaWidget)
};
#else
struct AidaWidget : ModuleWidget {

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -15,6 +15,7 @@
* For a full copy of the GNU General Public License see the LICENSE file.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "ModuleWidgets.hpp"
#include "extra/Runner.hpp"
@ -39,6 +40,7 @@ const NativePluginDescriptor* carla_getNativePluginDescriptor(const std::size_t
// --------------------------------------------------------------------------------------------------------------------
using namespace CARLA_BACKEND_NAMESPACE;
using namespace DISTRHO_NAMESPACE;
static uint32_t host_get_buffer_size(NativeHostHandle);
static double host_get_sample_rate(NativeHostHandle);
@ -335,8 +337,6 @@ struct CarlaInternalPluginModule : Module, Runner {
0, 0, nullptr, e.sampleRate);
fCarlaPluginDescriptor->activate(fCarlaPluginHandle);
}
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaInternalPluginModule)
};
// -----------------------------------------------------------------------------------------------------------
@ -679,8 +679,6 @@ struct AudioFileWidget : ModuleWidgetWithSideScrews<23> {
menu->addChild(new LoadAudioFileItem(module));
}
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(AudioFileWidget)
};
#else
struct AudioFileWidget : ModuleWidget {

View file

@ -1,7 +1,7 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Bram Giesen
* Copyright (C) 2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2022-2024 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
@ -16,7 +16,7 @@
* For a full copy of the GNU General Public License see the LICENSE file.
*/
#include "plugincontext.hpp"
#include "plugin.hpp"
#include "ModuleWidgets.hpp"
#include "Widgets.hpp"
@ -24,8 +24,6 @@ extern "C" {
#include "aubio.h"
}
USE_NAMESPACE_DISTRHO;
// --------------------------------------------------------------------------------------------------------------------
// aubio setup values (tested under 48 kHz sample rate)

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -15,6 +15,7 @@
* For a full copy of the GNU General Public License see the LICENSE file.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "Expander.hpp"
#include "ModuleWidgets.hpp"
@ -427,8 +428,6 @@ struct CarlaModule : Module {
0, 0, nullptr, e.sampleRate);
fCarlaPluginDescriptor->activate(fCarlaPluginHandle);
}
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaModule)
};
static_assert((int)CarlaModule::NUM_INPUTS == (int)CarlaModule::NUM_OUTPUTS, "inputs must match outputs");
@ -715,8 +714,6 @@ struct CarlaModuleWidget : ModuleWidgetWith9HP, IdleCallback {
e.consume(this);
showUI();
}
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaModuleWidget)
};
static void host_ui_closed(NativeHostHandle handle)

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -15,9 +15,11 @@
* For a full copy of the GNU General Public License see the LICENSE file.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "ModuleWidgets.hpp"
#include "Widgets.hpp"
#include "engine/TerminalModule.hpp"
// -----------------------------------------------------------------------------------------------------------

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -15,8 +15,10 @@
* For a full copy of the GNU General Public License see the LICENSE file.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "ModuleWidgets.hpp"
#include "engine/TerminalModule.hpp"
// -----------------------------------------------------------------------------------------------------------

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -25,9 +25,11 @@
* the License, or (at your option) any later version.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "ModuleWidgets.hpp"
#include "Widgets.hpp"
#include "engine/TerminalModule.hpp"
#include <algorithm>

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -25,9 +25,11 @@
* the License, or (at your option) any later version.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "ModuleWidgets.hpp"
#include "Widgets.hpp"
#include "engine/TerminalModule.hpp"
#include <algorithm>

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -25,9 +25,11 @@
* the License, or (at your option) any later version.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "ModuleWidgets.hpp"
#include "Widgets.hpp"
#include "engine/TerminalModule.hpp"
#include <algorithm>

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -25,7 +25,9 @@
* the License, or (at your option) any later version.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "engine/TerminalModule.hpp"
#include "ModuleWidgets.hpp"
#include <algorithm>

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -25,9 +25,11 @@
* the License, or (at your option) any later version.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "ModuleWidgets.hpp"
#include "Widgets.hpp"
#include "engine/TerminalModule.hpp"
// -----------------------------------------------------------------------------------------------------------

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -15,8 +15,10 @@
* For a full copy of the GNU General Public License see the LICENSE file.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "ModuleWidgets.hpp"
#include "engine/TerminalModule.hpp"
// -----------------------------------------------------------------------------------------------------------

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -15,8 +15,10 @@
* For a full copy of the GNU General Public License see the LICENSE file.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "ModuleWidgets.hpp"
#include "engine/TerminalModule.hpp"
// --------------------------------------------------------------------------------------------------------------------

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -25,6 +25,7 @@
* the License, or (at your option) any later version.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#include "Expander.hpp"
@ -98,6 +99,7 @@ namespace ildaeil {
// --------------------------------------------------------------------------------------------------------------------
using namespace CARLA_BACKEND_NAMESPACE;
using namespace DISTRHO_NAMESPACE;
static uint32_t host_get_buffer_size(NativeHostHandle);
static double host_get_sample_rate(NativeHostHandle);
@ -768,8 +770,6 @@ struct IldaeilModule : Module {
0, 0, nullptr, e.sampleRate);
fCarlaPluginDescriptor->activate(fCarlaPluginHandle);
}
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(IldaeilModule)
};
// -----------------------------------------------------------------------------------------------------------
@ -2252,8 +2252,6 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Runner {
ImGui::End();
}
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(IldaeilWidget)
};
// --------------------------------------------------------------------------------------------------------------------
@ -2435,8 +2433,6 @@ struct IldaeilModuleWidget : ModuleWidgetWithSideScrews<26> {
ModuleWidgetWithSideScrews<26>::step();
}
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(IldaeilModuleWidget)
};
#else
static void host_ui_parameter_changed(NativeHostHandle, uint32_t, float) {}

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -15,12 +15,15 @@
* For a full copy of the GNU General Public License see the LICENSE file.
*/
#include "plugin.hpp"
#include "plugincontext.hpp"
#ifndef HEADLESS
# include "EmbedWidget.hpp"
# include "extra/ExternalWindow.hpp"
#endif
USE_NAMESPACE_DISTRHO;
// --------------------------------------------------------------------------------------------------------------------
struct CardinalEmbedModule : Module {

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -15,7 +15,7 @@
* For a full copy of the GNU General Public License see the LICENSE file.
*/
#include "plugincontext.hpp"
#include "plugin.hpp"
#include "ImGuiWidget.hpp"
#include "sassy/sassy.hpp"
#include "sassy/sassy_scope.cpp"

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -15,7 +15,7 @@
* For a full copy of the GNU General Public License see the LICENSE file.
*/
#include "plugincontext.hpp"
#include "plugin.hpp"
#ifndef HEADLESS
# include "ImGuiTextEditor.hpp"
@ -412,8 +412,6 @@ struct TextEditorModuleWidget : ModuleWidget {
menu->addChild(new ui::MenuSeparator);
menu->addChild(createMenuItem("Select all", RACK_MOD_CTRL_NAME "+A", [=]{ textEditorWidget->selectAll(); }));
}
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TextEditorModuleWidget)
};
#else
struct TextEditorModuleWidget : ModuleWidget {

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -18,11 +18,8 @@
#pragma once
#include "rack.hpp"
#include "engine/TerminalModule.hpp"
#ifdef NDEBUG
# undef DEBUG
#endif
// #include "engine/TerminalModule.hpp"
// #include "plugincontext.hpp"
using namespace rack;

1
plugins/Computerscare Submodule

@ -0,0 +1 @@
Subproject commit 5baab047242088e45c99c9999b6e2d9082981ef1

View file

@ -572,6 +572,15 @@ PLUGIN_FILES += BidooDark/plugin.cpp
BIDOO_CUSTOM = ChannelDisplay InstantiateExpanderItem LadderFilter PitchShifter $(DRWAV)
BIDOO_CUSTOM_PER_FILE = channel channel filterType
# --------------------------------------------------------------
# Biset
PLUGIN_FILES += $(filter-out Biset/src/plugin.cpp,$(wildcard Biset/src/*.cpp))
PLUGIN_FILES += $(wildcard Biset/src/*/*.cpp)
# modules/types which are present in other plugins
BISET_CUSTOM = Blank ButtonTrigger Clock Tree TreeDisplay
# --------------------------------------------------------------
# BogaudioModules
@ -645,6 +654,14 @@ PLUGIN_FILES += $(filter-out cf/src/plugin.cpp,$(wildcard cf/src/*.cpp))
# modules/types which are present in other plugins
CF_CUSTOM = $(DRWAV)
# --------------------------------------------------------------
# Computerscare
PLUGIN_FILES += $(filter-out Computerscare/src/Computerscare.cpp Computerscare/src/test.cpp,$(wildcard Computerscare/src/*.cpp))
# modules/types which are present in other plugins
COMPUTERSCARE_CUSTOM = Quantizer PanelBorder
# --------------------------------------------------------------
# CVfunk
@ -1003,6 +1020,23 @@ PLUGIN_FILES += $(filter-out Sapphire/src/plugin.cpp,$(wildcard Sapphire/src/*.c
PLUGIN_FILES += $(filter-out sonusmodular/src/sonusmodular.cpp,$(wildcard sonusmodular/src/*.cpp))
# --------------------------------------------------------------
# Starling Via
PLUGIN_FILES += $(wildcard StarlingVia/src/*.cpp)
PLUGIN_FILES += $(wildcard StarlingVia/Via/io/src/*.cpp)
PLUGIN_FILES += $(wildcard StarlingVia/Via/ui/src/*.cpp)
PLUGIN_FILES += $(wildcard StarlingVia/Via/modules/*/*.cpp)
PLUGIN_BINARIES += StarlingVia/res/original.gateseq
PLUGIN_BINARIES += StarlingVia/res/original.meta
PLUGIN_BINARIES += StarlingVia/res/original.osc3
PLUGIN_BINARIES += StarlingVia/res/original.scanner
PLUGIN_BINARIES += StarlingVia/res/original.sync
PLUGIN_BINARIES += StarlingVia/res/original.sync3
# modules/types which are present in other plugins
STARLINGVIA_CUSTOM = Scanner Scale Wavetable
# --------------------------------------------------------------
# stocaudio
@ -1284,6 +1318,7 @@ BUILD_DIR = ../build/plugins
endif
BASE_FLAGS += -DBUILDING_PLUGIN_MODULES
BASE_FLAGS += -DDONT_SET_USING_DISTRHO_NAMESPACE
BASE_FLAGS += -I$(abspath $(ROOT)/include/osdialog-stub)
ifeq ($(BSD)$(WASM),true)
@ -1402,11 +1437,11 @@ RESOURCE_FILES += Befaco/res/SpringReverbIR.f32
RESOURCE_FILES += cf/playeroscs
RESOURCE_FILES += DHE-Modules/svg
RESOURCE_FILES += DrumKit/res/samples
RESOURCE_FILES += Meander/res
RESOURCE_FILES += MindMeldModular/res/ShapeMaster/CommunityPresets
RESOURCE_FILES += MindMeldModular/res/ShapeMaster/CommunityShapes
RESOURCE_FILES += MindMeldModular/res/ShapeMaster/MindMeldPresets
RESOURCE_FILES += MindMeldModular/res/ShapeMaster/MindMeldShapes
RESOURCE_FILES += Meander/res
RESOURCE_FILES += Mog/res
RESOURCE_FILES += nonlinearcircuits/res
RESOURCE_FILES += ParableInstruments/res/Neil.png
@ -2168,6 +2203,13 @@ $(BUILD_DIR)/Bidoo%.cpp.o: Bidoo%.cpp
-Wno-sign-compare \
-Wno-unused-function
$(BUILD_DIR)/Biset/src/%.cpp.o: Biset/src/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(BISET_CUSTOM),$(call custom_module_names,$(m),Biset)) \
-DpluginInstance=pluginInstance__Biset
$(BUILD_DIR)/BogaudioModules/src/follower_base.cpp.o: BogaudioModules/src/follower_base.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"
@ -2207,6 +2249,13 @@ $(BUILD_DIR)/cf/src/%.cpp.o: cf/src/%.cpp
-DpluginInstance=pluginInstance__cf \
-Wno-misleading-indentation
$(BUILD_DIR)/Computerscare/src/%.cpp.o: Computerscare/src/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(COMPUTERSCARE_CUSTOM),$(call custom_module_names,$(m),Computerscare)) \
-DpluginInstance=pluginInstance__Computerscare
$(BUILD_DIR)/CVfunk/src/%.cpp.o: CVfunk/src/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"
@ -2630,6 +2679,21 @@ $(BUILD_DIR)/sonusmodular/%.cpp.o: sonusmodular/%.cpp
$(foreach m,$(SONUSMODULAR_CUSTOM),$(call custom_module_names,$(m),sonusmodular)) \
-DpluginInstance=pluginInstance__sonusmodular
$(BUILD_DIR)/StarlingVia/%.cpp.o: StarlingVia/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \
$(foreach m,$(STARLINGVIA_CUSTOM),$(call custom_module_names,$(m),StarlingVia)) \
-DpluginInstance=pluginInstance__StarlingVia \
-DBUILD_VIRTUAL \
-IStarlingVia/dep/starling-dsp \
-IStarlingVia/Via/modules/inc \
-IStarlingVia/Via/synthesis/inc \
-IStarlingVia/Via/io/inc \
-IStarlingVia/Via/ui/inc \
-IStarlingVia/src/dep/starling-dsp \
-IStarlingVia/src/dep/starling-rack-ui
$(BUILD_DIR)/stoermelder-packone/%.cpp.o: stoermelder-packone/%.cpp
-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
@echo "Compiling $<"

@ -1 +1 @@
Subproject commit 18f4fa89ca08e9943e38548440d3e02e1ee2e170
Subproject commit 8136f0c941b41c57af70a5ebb5839f0086518b2b

@ -1 +1 @@
Subproject commit 4bf2ad39eeaddcbfcc5cd345aef8c0c4cc722b73
Subproject commit d26e157140ef6283906a33675733ea35e4dd26ac

1
plugins/StarlingVia Submodule

@ -0,0 +1 @@
Subproject commit a6b75fddc2df624ba64dab70c2e35b8e48ad8c1d

@ -1 +1 @@
Subproject commit 88f1bd64cff6e96a1a48566a1692de86b9a7de2a
Subproject commit d6933abe016eeb97c9fb0b0f955af756401403c1

View file

@ -146,6 +146,35 @@ extern Model* modelChord;
// Bidoo
#include "Bidoo/src/plugin.hpp"
// Biset
/* NOTE too much noise in original include, do this a different way
// #include "Biset/src/plugin.hpp"
*/
#define modelBlank modelBisetBlank
#define modelTree modelBisetTree
extern Model* modelTracker;
extern Model* modelTrackerSynth;
extern Model* modelTrackerDrum;
extern Model* modelTrackerClock;
extern Model* modelTrackerPhase;
extern Model* modelTrackerQuant;
extern Model* modelTrackerState;
extern Model* modelTrackerControl;
extern Model* modelRegex;
extern Model* modelRegexCondensed;
extern Model* modelRegexExp;
extern Model* modelTree;
extern Model* modelTreeSeed;
extern Model* modelGbu;
extern Model* modelPkm;
extern Model* modelIgc;
extern Model* modelOmega3;
extern Model* modelOmega6;
extern Model* modelSegfault;
extern Model* modelBlank;
#undef modelBlank
#undef modelTree
// BogaudioModules - integrate theme/skin support
#include <mutex>
#include <string>
@ -311,6 +340,9 @@ extern Model* modelTestVCF;
#include "ChowDSP/src/plugin.cpp"
#undef init
// Computerscare
#include "Computerscare/src/Computerscare.hpp"
// dBiz
#define DarkDefaultItem dBizDarkDefaultItem
#define OrangeLight dBizOrangeLight
@ -779,6 +811,16 @@ void addThemeMenuItems(Menu*, ModuleTheme*) {}
// sonusmodular
#include "sonusmodular/src/sonusmodular.hpp"
// Starling Via
#define modelScanner modelStarlingViaScanner
#define Scale starlingViaScale
#define Wavetable starlingViaWavetable
#include "StarlingVia/src/starling.hpp"
#undef modelScanner
#undef Scale
#undef Wavetable
// stocaudio
#include "stocaudio/src/plugin.hpp"
@ -862,10 +904,12 @@ Plugin* pluginInstance__Axioma;
Plugin* pluginInstance__Bacon;
Plugin* pluginInstance__Befaco;
Plugin* pluginInstance__Bidoo;
Plugin* pluginInstance__Biset;
Plugin* pluginInstance__BogaudioModules;
Plugin* pluginInstance__CatroModulo;
Plugin* pluginInstance__cf;
Plugin* pluginInstance__ChowDSP;
Plugin* pluginInstance__Computerscare;
Plugin* pluginInstance__CVfunk;
Plugin* pluginInstance__dBiz;
Plugin* pluginInstance__DHE;
@ -910,6 +954,7 @@ Plugin* pluginInstance__RebelTech;
Plugin* pluginInstance__repelzen;
Plugin* pluginInstance__sapphire;
Plugin* pluginInstance__sonusmodular;
extern Plugin* pluginInstance__StarlingVia;
Plugin* pluginInstance__stocaudio;
extern Plugin* pluginInstance__stoermelder_p1;
Plugin* pluginInstance__surgext;
@ -1598,6 +1643,46 @@ static void initStatic__Bidoo()
}
}
static void initStatic__Biset()
{
Plugin* const p = new Plugin;
pluginInstance__Biset = p;
const StaticPluginLoader spl(p, "Biset");
if (spl.ok())
{
#define modelBlank modelBisetBlank
#define modelTree modelBisetTree
p->addModel(modelTracker);
p->addModel(modelTrackerSynth);
p->addModel(modelTrackerDrum);
p->addModel(modelTrackerClock);
p->addModel(modelTrackerPhase);
p->addModel(modelTrackerQuant);
p->addModel(modelTrackerState);
p->addModel(modelTrackerControl);
p->addModel(modelRegex);
p->addModel(modelRegexCondensed);
p->addModel(modelRegexExp);
p->addModel(modelTree);
p->addModel(modelTreeSeed);
p->addModel(modelGbu);
p->addModel(modelPkm);
p->addModel(modelIgc);
p->addModel(modelOmega3);
p->addModel(modelOmega6);
p->addModel(modelSegfault);
p->addModel(modelBlank);
#undef modelBlank
#undef modelTree
}
}
static void initStatic__BogaudioModules()
{
Plugin* const p = new Plugin;
@ -1833,6 +1918,34 @@ static void initStatic__ChowDSP()
}
}
static void initStatic__Computerscare()
{
Plugin* const p = new Plugin;
pluginInstance__Computerscare = p;
const StaticPluginLoader spl(p, "Computerscare");
if (spl.ok())
{
p->addModel(modelComputerscarePatchSequencer);
p->addModel(modelComputerscareDebug);
p->addModel(modelComputerscareLaundrySoup);
p->addModel(modelComputerscareILoveCookies);
p->addModel(modelComputerscareOhPeas);
p->addModel(modelComputerscareHorseADoodleDoo);
p->addModel(modelComputerscareKnolyPobs);
p->addModel(modelComputerscareBolyPuttons);
p->addModel(modelComputerscareRolyPouter);
p->addModel(modelComputerscareSolyPequencer);
p->addModel(modelComputerscareTolyPools);
p->addModel(modelComputerscareMolyPatrix);
p->addModel(modelComputerscareGolyPenerator);
p->addModel(modelComputerscareFolyPace);
p->addModel(modelComputerscareStolyFickPigure);
p->addModel(modelComputerscareBlank);
p->addModel(modelComputerscareBlankExpander);
}
}
static void initStatic__CVfunk()
{
Plugin* const p = new Plugin;
@ -2956,6 +3069,29 @@ static void initStatic__sonusmodular()
}
}
static void initStatic__StarlingVia()
{
Plugin* const p = new Plugin;
pluginInstance__StarlingVia = p;
const StaticPluginLoader spl(p, "StarlingVia");
if (spl.ok())
{
#define modelScanner modelStarlingViaScanner
p->addModel(modelMeta);
p->addModel(modelGateseq);
p->addModel(modelScanner);
p->addModel(modelSync);
p->addModel(modelAtsr);
p->addModel(modelOsc3);
p->addModel(modelSync3);
p->addModel(modelSync3XL);
p->addModel(modelSync3XLLevels);
#undef modelScanner
}
}
static void initStatic__stocaudio()
{
Plugin* const p = new Plugin;
@ -3249,10 +3385,12 @@ void initStaticPlugins()
initStatic__Bacon();
initStatic__Befaco();
initStatic__Bidoo();
initStatic__Biset();
initStatic__BogaudioModules();
initStatic__CatroModulo();
initStatic__cf();
initStatic__ChowDSP();
initStatic__Computerscare();
initStatic__CVfunk();
initStatic__dBiz();
initStatic__DHE();
@ -3297,6 +3435,7 @@ void initStaticPlugins()
initStatic__repelzen();
initStatic__Sapphire();
initStatic__sonusmodular();
initStatic__StarlingVia();
initStatic__stocaudio();
initStatic__stoermelder_p1();
initStatic__surgext();

View file

@ -17,7 +17,7 @@
#include "CardinalCommon.hpp"
#include "AsyncDialog.hpp"
#include "PluginContext.hpp"
#include "CardinalPluginContext.hpp"
#include "DistrhoPluginUtils.hpp"
#include <asset.hpp>
@ -99,9 +99,7 @@ void destroyStaticPlugins();
}
}
const std::string CARDINAL_VERSION = "24.03";
START_NAMESPACE_DISTRHO
const std::string CARDINAL_VERSION = "24.04";
// -----------------------------------------------------------------------------------------------------------
@ -126,6 +124,53 @@ void handleHostParameterDrag(const CardinalPluginContext* pcontext, uint index,
// --------------------------------------------------------------------------------------------------------------------
CardinalPluginContext::CardinalPluginContext(Plugin* const p)
: bufferSize(p != nullptr ? p->getBufferSize() : 0),
processCounter(0),
sampleRate(p != nullptr ? p->getSampleRate() : 0.0),
#if CARDINAL_VARIANT_MAIN
variant(kCardinalVariantMain),
#elif CARDINAL_VARIANT_MINI
variant(kCardinalVariantMini),
#elif CARDINAL_VARIANT_FX
variant(kCardinalVariantFX),
#elif CARDINAL_VARIANT_NATIVE
variant(kCardinalVariantNative),
#elif CARDINAL_VARIANT_SYNTH
variant(kCardinalVariantSynth),
#else
#error cardinal variant not set
#endif
bypassed(false),
playing(false),
reset(false),
bbtValid(false),
bar(1),
beat(1),
beatsPerBar(4),
beatType(4),
frame(0),
barStartTick(0.0),
beatsPerMinute(120.0),
tick(0.0),
tickClock(0.0),
ticksPerBeat(0.0),
ticksPerClock(0.0),
ticksPerFrame(0.0),
nativeWindowId(0),
dataIns(nullptr),
dataOuts(nullptr),
midiEvents(nullptr),
midiEventCount(0),
plugin(p)
#ifndef HEADLESS
, tlw(nullptr)
, ui(nullptr)
#endif
{
std::memset(parameters, 0, sizeof(parameters));
}
#ifndef HEADLESS
bool CardinalPluginContext::addIdleCallback(IdleCallback* const cb) const
{
@ -224,6 +269,86 @@ void CardinalPluginContext::writeMidiMessage(const rack::midi::Message& message,
// -----------------------------------------------------------------------------------------------------------
namespace rack {
namespace midi {
struct InputQueue::Internal {
CardinalPluginContext* const pcontext = static_cast<CardinalPluginContext*>(APP);
const CardinalDISTRHO::MidiEvent* midiEvents = nullptr;
uint32_t midiEventsLeft = 0;
uint32_t lastProcessCounter = 0;
int64_t lastBlockFrame = 0;
};
InputQueue::InputQueue() {
internal = new Internal;
}
InputQueue::~InputQueue() {
delete internal;
}
bool InputQueue::tryPop(Message* const messageOut, int64_t maxFrame)
{
const uint32_t processCounter = internal->pcontext->processCounter;
const bool processCounterChanged = internal->lastProcessCounter != processCounter;
if (processCounterChanged)
{
internal->lastBlockFrame = internal->pcontext->engine->getBlockFrame();
internal->lastProcessCounter = processCounter;
internal->midiEvents = internal->pcontext->midiEvents;
internal->midiEventsLeft = internal->pcontext->midiEventCount;
}
if (internal->midiEventsLeft == 0 || maxFrame < internal->lastBlockFrame)
return false;
const uint32_t frame = maxFrame - internal->lastBlockFrame;
if (frame > internal->midiEvents->frame)
return false;
const CardinalDISTRHO::MidiEvent& midiEvent(*internal->midiEvents);
const uint8_t* data;
if (midiEvent.size > CardinalDISTRHO::MidiEvent::kDataSize)
{
data = midiEvent.dataExt;
messageOut->bytes.resize(midiEvent.size);
}
else
{
data = midiEvent.data;
}
messageOut->frame = frame;
std::memcpy(messageOut->bytes.data(), data, midiEvent.size);
++internal->midiEvents;
--internal->midiEventsLeft;
return true;
}
json_t* InputQueue::toJson() const
{
return nullptr;
}
void InputQueue::fromJson(json_t* rootJ)
{
}
}
}
// -----------------------------------------------------------------------------------------------------------
START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------------------------------------------
#ifdef HAVE_LIBLO
static void osc_error_handler(int num, const char* msg, const char* path)
{

View file

@ -12,6 +12,8 @@
extern const std::string CARDINAL_VERSION;
struct CardinalPluginContext;
// -----------------------------------------------------------------------------------------------------------
namespace rack {
@ -84,7 +86,6 @@ START_NAMESPACE_DISTRHO
class CardinalBasePlugin;
class CardinalBaseUI;
struct CardinalPluginContext;
struct Initializer
{

View file

@ -32,7 +32,7 @@
#include "CardinalCommon.hpp"
#include "DistrhoPluginUtils.hpp"
#include "PluginContext.hpp"
#include "CardinalPluginContext.hpp"
#include "extra/Base64.hpp"
#include "extra/ScopedDenormalDisable.hpp"
#include "extra/ScopedSafeLocale.hpp"
@ -406,7 +406,7 @@ protected:
uint32_t getVersion() const override
{
return d_version(0, 24, 3);
return d_version(0, 24, 4);
}
int64_t getUniqueId() const override

View file

@ -36,29 +36,14 @@
#ifndef HEADLESS
# include "DistrhoUI.hpp"
#else
# include "Base.hpp"
START_NAMESPACE_DGL
class TopLevelWidget;
template <class BaseWidget> class NanoBaseWidget;
typedef NanoBaseWidget<TopLevelWidget> NanoTopLevelWidget;
END_NAMESPACE_DGL
#endif
#include "plugincontext.hpp"
START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------------------------------------------
static constexpr const uint kModuleParameterCount = 24;
enum CardinalVariant {
kCardinalVariantMain,
kCardinalVariantMini,
kCardinalVariantFX,
kCardinalVariantNative,
kCardinalVariantSynth,
};
enum CardinalParameters {
kCardinalParameterCountAtModules = kModuleParameterCount,
kCardinalParameterBypass = kCardinalParameterCountAtModules,
@ -126,82 +111,6 @@ static_assert(kCardinalParameterCountAtWindow == kModuleParameterCount + kWindow
static_assert(DISTRHO_PLUGIN_NUM_INPUTS == kCardinalParameterCountAtMiniBuffers - kCardinalParameterStartMiniBuffers, "valid parameter indexes");
#endif
class UI;
// -----------------------------------------------------------------------------------------------------------
struct CardinalPluginContext : rack::Context {
uint32_t bufferSize, processCounter;
double sampleRate;
float parameters[kModuleParameterCount];
CardinalVariant variant;
bool bypassed, playing, reset, bbtValid;
int32_t bar, beat, beatsPerBar, beatType;
uint64_t frame;
double barStartTick, beatsPerMinute;
double tick, tickClock, ticksPerBeat, ticksPerClock, ticksPerFrame;
uintptr_t nativeWindowId;
const float* const* dataIns;
float** dataOuts;
const MidiEvent* midiEvents;
uint32_t midiEventCount;
Plugin* const plugin;
NanoTopLevelWidget* tlw;
UI* ui;
CardinalPluginContext(Plugin* const p)
: bufferSize(p != nullptr ? p->getBufferSize() : 0),
processCounter(0),
sampleRate(p != nullptr ? p->getSampleRate() : 0.0),
#if CARDINAL_VARIANT_MAIN
variant(kCardinalVariantMain),
#elif CARDINAL_VARIANT_MINI
variant(kCardinalVariantMini),
#elif CARDINAL_VARIANT_FX
variant(kCardinalVariantFX),
#elif CARDINAL_VARIANT_NATIVE
variant(kCardinalVariantNative),
#elif CARDINAL_VARIANT_SYNTH
variant(kCardinalVariantSynth),
#else
#error cardinal variant not set
#endif
bypassed(false),
playing(false),
reset(false),
bbtValid(false),
bar(1),
beat(1),
beatsPerBar(4),
beatType(4),
frame(0),
barStartTick(0.0),
beatsPerMinute(120.0),
tick(0.0),
tickClock(0.0),
ticksPerBeat(0.0),
ticksPerClock(0.0),
ticksPerFrame(0.0),
nativeWindowId(0),
dataIns(nullptr),
dataOuts(nullptr),
midiEvents(nullptr),
midiEventCount(0),
plugin(p),
tlw(nullptr),
ui(nullptr)
{
std::memset(parameters, 0, sizeof(parameters));
}
void writeMidiMessage(const rack::midi::Message& message, uint8_t channel);
#ifndef HEADLESS
bool addIdleCallback(IdleCallback* cb) const;
void removeIdleCallback(IdleCallback* cb) const;
#endif
};
// -----------------------------------------------------------------------------------------------------------
#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -24,7 +24,7 @@
#endif
#include "CardinalRemote.hpp"
#include "PluginContext.hpp"
#include "CardinalPluginContext.hpp"
#include "extra/Base64.hpp"
#include "extra/ScopedSafeLocale.hpp"

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -18,7 +18,7 @@
#pragma once
#include "NanoVG.hpp"
#include "PluginContext.hpp"
#include "CardinalPluginContext.hpp"
#include "WindowParameters.hpp"
#include <widget/Widget.hpp>

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -30,7 +30,7 @@
#include <engine/Engine.hpp>
#include <ui/common.hpp>
#include "PluginContext.hpp"
#include "CardinalPluginContext.hpp"
#include "extra/ScopedValueSetter.hpp"
#define CARDINAL_TEMPLATE_NAME "init/main.vcv"

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -49,7 +49,7 @@
#include "Application.hpp"
#include "AsyncDialog.hpp"
#include "CardinalCommon.hpp"
#include "PluginContext.hpp"
#include "CardinalPluginContext.hpp"
#include "WindowParameters.hpp"
#include "extra/Base64.hpp"
@ -1081,7 +1081,7 @@ protected:
int key;
switch (ev.key)
{
case '\t': key = GLFW_KEY_TAB; break;
case kKeyTab: key = GLFW_KEY_TAB; break;
case kKeyBackspace: key = GLFW_KEY_BACKSPACE; break;
case kKeyEnter: key = GLFW_KEY_ENTER; break;
case kKeyEscape: key = GLFW_KEY_ESCAPE; break;

View file

@ -316,6 +316,7 @@ SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/chopin
SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/debussy
SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/goldberg
SYMLINKED_DIRS_RESOURCES += cf/playeroscs
SYMLINKED_DIRS_RESOURCES += DHE-Modules/svg
SYMLINKED_DIRS_RESOURCES += DrumKit/res/samples
SYMLINKED_DIRS_RESOURCES += GrandeModular/presets
SYMLINKED_DIRS_RESOURCES += LyraeModules/presets

View file

@ -62,6 +62,7 @@ enum DarkMode {
kModeAudibleInstruments,
kModeBidoo,
kModeCf,
kModeComputerscare,
kModeDHE,
kModeDrumKit,
kModeESeries,
@ -214,6 +215,29 @@ static const struct {
{ kModeCf, "/cf/res/SUB.svg", {}, -1 },
{ kModeCf, "/cf/res/trSEQ.svg", {}, -1 },
{ kModeCf, "/cf/res/VARIABLE.svg", {}, -1 },
// BSD-3 Clause
{ kModeComputerscare, "/Computerscare/res/computerscare-clk-text.svg", {}, -1},
{ kModeComputerscare, "/Computerscare/res/vertical-x-1.svg", {}, -1},
{ kModeComputerscare, "/Computerscare/res/vertical-x-2.svg", {}, -1},
{ kModeComputerscare, "/Computerscare/res/vertical-x-3.svg", {}, -1},
{ kModeComputerscare, "/Computerscare/res/computerscare-logo-normal.svg", {}, -1},
{ kModeComputerscare, "/Computerscare/res/computerscare-logo-sad.svg", {}, -1},
{ kModeComputerscare, "/Computerscare/res/ComputerscareDebugPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareOhPeasPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareFolyPacePanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareKnolyPobsPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareTolyPoolsPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareMolyPatrixPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareRolyPouterPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareBolyPuttonsPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareCustomBlankPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareLaundrySoupPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareILoveCookiesPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareGolyPeneratorPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareSolyPequencerPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscarePatchSequencerPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareHorseADoodleDooPanel.svg", {}, -1 },
{ kModeComputerscare, "/Computerscare/res/ComputerscareCustomBlankExpanderPanel.svg", {}, -1 },
// MIT
{ kModeDHE, "/DHE-Modules/svg/blossom.svg", {}, -1 },
{ kModeDHE, "/DHE-Modules/svg/booster-stage.svg", {}, -1 },
@ -362,6 +386,7 @@ enum LightMode {
kModeAutinn,
kModeBefaco,
kModeCardinal,
kModeComputerscareLight,
kModeExtratone,
kModeFehlerFabrik,
kModeForsitan,
@ -450,6 +475,8 @@ static const struct {
{ kModeCardinal, "/Cardinal/res/HostParamsMap.svg" },
{ kModeCardinal, "/Cardinal/res/HostTime.svg" },
{ kModeCardinal, "/Cardinal/res/Ildaeil.svg" },
// BSD-3 Clause
{ kModeComputerscareLight, "/Computerscare/res/ComputerscareStolyFickPigurePanel.svg" },
// GPLv3+
{ kModeExtratone, "/Extratone/res/Darwinism.svg" },
// { kModeExtratone, "/Extratone/res/HalluciMemory.svg" },
@ -664,6 +691,15 @@ bool invertPaintForDarkMode(const DarkMode mode, NSVGshape* const shape, NSVGpai
}
}
break;
// Special case for Computerscare
case kModeComputerscare:
switch (paint.color)
{
// Just make vertical-x-* visible
case 0xffa6c924:
return false;
}
break;
// Special case for DHE, mark things darker instead of inverting
case kModeDHE:
paint.color = darkerColor(paint.color);

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -16,7 +16,7 @@
*/
#include "Application.hpp"
#include "PluginContext.hpp"
#include "CardinalPluginContext.hpp"
#include <GLFW/glfw3.h>

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -53,7 +53,7 @@
#include "../CardinalCommon.hpp"
#include "../CardinalRemote.hpp"
#include "../PluginContext.hpp"
#include "../CardinalPluginContext.hpp"
#include "DistrhoPlugin.hpp"
#include "DistrhoStandaloneUtils.hpp"
@ -605,10 +605,8 @@ static void setAllFramebufferWidgetsDirty(widget::Widget* const widget)
for (widget::Widget* child : widget->children)
{
if (widget::FramebufferWidget* const fbw = dynamic_cast<widget::FramebufferWidget*>(child))
{
fbw->setDirty();
break;
}
setAllFramebufferWidgetsDirty(child);
}
}

View file

@ -1,6 +1,6 @@
/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2021-2024 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
@ -46,7 +46,7 @@
#include "Application.hpp"
#include "extra/String.hpp"
#include "../CardinalCommon.hpp"
#include "../PluginContext.hpp"
#include "../CardinalPluginContext.hpp"
#include "../WindowParameters.hpp"
#ifndef DGL_NO_SHARED_RESOURCES

View file

@ -11,7 +11,7 @@
<key>CFBundleIdentifier</key>
<string>studio.kx.distrho.cardinal.jack</string>
<key>CFBundleShortVersionString</key>
<string>23.03</string>
<string>23.04</string>
<key>LSMinimumSystemVersion</key>
<string>10.15</string>
<key>NSHumanReadableCopyright</key>

View file

@ -11,7 +11,7 @@
<key>CFBundleIdentifier</key>
<string>studio.kx.distrho.cardinal.native</string>
<key>CFBundleShortVersionString</key>
<string>24.03</string>
<string>24.04</string>
<key>LSMinimumSystemVersion</key>
<string>10.15</string>
<key>NSHumanReadableCopyright</key>