From d4981111d6de37bb7cf4e8689d9de1fd35ba0eba Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Fri, 30 Jul 2021 08:42:56 -0400 Subject: [PATCH 01/19] - Ensure sol3 uses same safety rules in debug & release builds. - Fix lua node validation script. Fixes #439 --- libs/lua/sol/config.hpp | 9 +++++++-- src/engine/nodes/LuaNode.cpp | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/libs/lua/sol/config.hpp b/libs/lua/sol/config.hpp index c0e0fdcd1..880c3a078 100644 --- a/libs/lua/sol/config.hpp +++ b/libs/lua/sol/config.hpp @@ -51,8 +51,13 @@ the build system, or the command line options of your compiler. #include -#define SOL_USING_CXX_LUA 0 -#define SOL_EXCEPTIONS_SAFE_PROPAGATION 1 +#define SOL_IN_DEBUG_DETECTED 0 +#define SOL_SAFE_USERTYPE 0 +#define SOL_SAFE_REFERENCES 0 +#define SOL_SAFE_FUNCTION_CALLS 0 + +#define SOL_USING_CXX_LUA 0 +#define SOL_EXCEPTIONS_SAFE_PROPAGATION 0 // end of sol/config.hpp diff --git a/src/engine/nodes/LuaNode.cpp b/src/engine/nodes/LuaNode.cpp index 3b79a135e..c3643948b 100644 --- a/src/engine/nodes/LuaNode.cpp +++ b/src/engine/nodes/LuaNode.cpp @@ -314,8 +314,8 @@ struct LuaNode::Context local AudioBuffer = require ('kv.AudioBuffer') local MidiPipe = require ('el.MidiPipe') - local a = AudioBuffer (__ln_validate_nchans, __ln_validate_nframes) - local m = MidiPipe (__ln_validate_nmidi) + local a = AudioBuffer.new (__ln_validate_nchans, __ln_validate_nframes) + local m = MidiPipe.new (__ln_validate_nmidi) for _ = 1,4 do for i = 0,m:size() - 1 do From 4f05254401b39eb9489be38b1ec0be48e79497cf Mon Sep 17 00:00:00 2001 From: Michael Forrest Date: Tue, 19 Oct 2021 11:56:05 +0100 Subject: [PATCH 02/19] Add a note about Apple Silicon Since all new Macs will require this step (unless the source is updated for the new homebrew installation dir `/opt/homebrew/` instead of `/usr/local/`. --- docs/building.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/building.md b/docs/building.md index 1f62b5f65..28d2e88cb 100644 --- a/docs/building.md +++ b/docs/building.md @@ -72,6 +72,13 @@ This produces `build/Applications/Element.app`. open build/Applications/Element.app ``` +__Apple Silicon__ + +Replace the `./waf configure` command above with this: +``` +./waf configure CPPFLAGS="-I/opt/homebrew/include" +``` + __Test__ ``` ./waf check From ceb86515584a301865c409a3d29da42137ded5a3 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Tue, 26 Oct 2021 07:22:34 -0400 Subject: [PATCH 03/19] Update building.md. Closes #443 --- docs/building.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/building.md b/docs/building.md index 28d2e88cb..550828772 100644 --- a/docs/building.md +++ b/docs/building.md @@ -11,7 +11,7 @@ __Dependencies__ The following packages are needed... ``` -sudo apt-get install python git build-essential pkg-config libboost-signals-dev libfreetype6-dev libx11-dev libxext-dev libxrandr-dev libxcomposite-dev libxinerama-dev libxcursor-dev libasound2-dev lv2-dev liblilv-dev libsuil-dev ladspa-sdk libcurl4-openssl-dev +sudo apt-get install python git build-essential pkg-config libboost-dev libfreetype6-dev libx11-dev libxext-dev libxrandr-dev libxcomposite-dev libxinerama-dev libxcursor-dev libasound2-dev lv2-dev liblilv-dev libsuil-dev ladspa-sdk libcurl4-openssl-dev ``` __Optional__ From 8502c5de352ebf0906c55ecf430dab13afd34405 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Sat, 29 Jan 2022 16:00:37 -0500 Subject: [PATCH 04/19] Enable midi clock in single graph version --- src/engine/AudioEngine.cpp | 4 ---- src/gui/ContentComponent.cpp | 6 ------ src/gui/PreferencesComponent.cpp | 11 ----------- 3 files changed, 21 deletions(-) diff --git a/src/engine/AudioEngine.cpp b/src/engine/AudioEngine.cpp index aa31ac2d5..54287b453 100644 --- a/src/engine/AudioEngine.cpp +++ b/src/engine/AudioEngine.cpp @@ -507,7 +507,6 @@ class AudioEngine::Private : public AudioIODeviceCallback, ScopedLock lockMidiOut (engine.world.getMidiEngine().getMidiOutputLock()); if (auto* const midiOut = engine.world.getMidiEngine().getDefaultMidiOutput()) { - #if defined (EL_PRO) if (sendMidiClockToInput.get() != 1 && generateMidiClock.get() == 1) { if (wasPlaying != transport.isPlaying()) @@ -526,7 +525,6 @@ class AudioEngine::Private : public AudioIODeviceCallback, midiClockMaster.setTempo (transport.getTempo()); midiClockMaster.render (incomingMidi, numSamples); } - #endif const double delayMs = midiOutLatency.get(); if (! incomingMidi.isEmpty()) @@ -552,7 +550,6 @@ class AudioEngine::Private : public AudioIODeviceCallback, if (shouldProcess) { - #if defined (EL_PRO) if (generateMidiClock.get() == 1 && sendMidiClockToInput.get() == 1) { if (wasPlaying != transport.isPlaying()) @@ -570,7 +567,6 @@ class AudioEngine::Private : public AudioIODeviceCallback, midiClockMaster.setTempo (static_cast (transport.getTempo())); midiClockMaster.render (midi, numSamples); } - #endif if (currentGraph.get() != graphs.getCurrentGraphIndex()) graphs.setCurrentGraph (currentGraph.get()); diff --git a/src/gui/ContentComponent.cpp b/src/gui/ContentComponent.cpp index 99ed73601..17898b038 100644 --- a/src/gui/ContentComponent.cpp +++ b/src/gui/ContentComponent.cpp @@ -176,12 +176,7 @@ class ContentComponent::Toolbar : public Component, } else { - #if defined (EL_PRO) showExt = props->getValue ("clockSource") == "midiClock"; - #else - showExt = false; - ignoreUnused (props); - #endif } if (session) @@ -193,7 +188,6 @@ class ContentComponent::Toolbar : public Component, } mapButton.setEnabled (true); - resized(); } diff --git a/src/gui/PreferencesComponent.cpp b/src/gui/PreferencesComponent.cpp index 3434ba660..f9b917344 100644 --- a/src/gui/PreferencesComponent.cpp +++ b/src/gui/PreferencesComponent.cpp @@ -368,9 +368,7 @@ namespace Element { clockSourceLabel.setFont (Font (12.0, Font::bold)); addAndMakeVisible (clockSourceBox); clockSourceBox.addItem ("Internal", ClockSourceInternal); - #if defined (EL_PRO) clockSourceBox.addItem ("MIDI Clock", ClockSourceMidiClock); - #endif clockSource.referTo (clockSourceBox.getSelectedIdAsValue()); addAndMakeVisible (checkForUpdatesLabel); @@ -479,16 +477,11 @@ namespace Element { defaultSessionClearButton.addListener (this); #endif - #if defined (EL_PRO) const int source = String("internal") == settings.getUserSettings()->getValue("clockSource") ? ClockSourceInternal : ClockSourceMidiClock; clockSourceBox.setSelectedId (source, dontSendNotification); clockSource.setValue (source); clockSource.addListener (this); - #else - clockSource.setValue ((int) ClockSourceInternal); - clockSourceBox.setEnabled (false); - #endif } virtual ~GeneralSettingsPage() noexcept @@ -724,7 +717,6 @@ namespace Element { e->applySettings (world.getSettings()); }; - #if defined (EL_PRO) addAndMakeVisible (generateClockLabel); generateClockLabel.setFont (Font (12.0, Font::bold)); generateClockLabel.setText ("Generate MIDI Clock", dontSendNotification); @@ -742,7 +734,6 @@ namespace Element { sendClockToInput.setClickingTogglesState (true); sendClockToInput.setToggleState (settings.sendMidiClockToInput(), dontSendNotification); sendClockToInput.addListener (this); - #endif addAndMakeVisible(midiInputHeader); midiInputHeader.setText ("Active MIDI Inputs", dontSendNotification); @@ -785,10 +776,8 @@ namespace Element { midiOutputLabel.setBounds (r2.removeFromLeft (getWidth() / 2)); midiOutput.setBounds (r2.withSizeKeepingCentre (r2.getWidth(), settingHeight)); layoutSetting (r, midiOutLatencyLabel, midiOutLatency, getWidth() / 4); - #if defined (EL_PRO) layoutSetting (r, generateClockLabel, generateClock); layoutSetting (r, sendClockToInputLabel, sendClockToInput); - #endif r.removeFromTop (roundToInt ((double) spacingBetweenSections * 1.5)); midiInputHeader.setBounds (r.removeFromTop (24)); From d0c60c47b241154a0797c84f8bd8ce736dfdf7e9 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Mon, 31 Jan 2022 14:41:36 -0500 Subject: [PATCH 05/19] Migrate location of stored node midi programs. --- src/DataPath.cpp | 16 +++++++++++----- src/DataPath.h | 6 +++++- src/controllers/AppController.cpp | 10 ++++++++++ src/engine/NodeObject.cpp | 2 +- src/gui/NavigationConcertinaPanel.h | 25 +++++++++++++++++++------ 5 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/DataPath.cpp b/src/DataPath.cpp index 328522f2d..50160db35 100644 --- a/src/DataPath.cpp +++ b/src/DataPath.cpp @@ -25,7 +25,11 @@ namespace Element { StringArray getSubDirs() { - return StringArray ({ "Controllers", "Graphs", "Presets", "Templates", "Scripts", "Sessions" }); + auto dirs = StringArray ({ "Controllers", "Graphs", "Presets", "Scripts" }); + #if defined(EL_PRO) + dirs.add ("Sessions"); + #endif + return dirs; } void initializeUserLibrary (const File& path) @@ -74,11 +78,13 @@ namespace Element #endif } - const File DataPath::defaultLocation() - { - return defaultUserDataPath(); - } + const File DataPath::defaultLocation() { return defaultUserDataPath(); } + const File DataPath::defaultGlobalMidiProgramsDir() + { + return defaultUserDataPath().getChildFile ("Cache/MIDI/Programs"); + } + const File DataPath::defaultScriptsDir() { return defaultUserDataPath().getChildFile ("Scripts"); } const File DataPath::defaultSessionDir() { return defaultUserDataPath().getChildFile ("Sessions"); } const File DataPath::defaultGraphDir() { return defaultUserDataPath().getChildFile ("Graphs"); } diff --git a/src/DataPath.h b/src/DataPath.h index 4078a6d0e..f07cea96f 100644 --- a/src/DataPath.h +++ b/src/DataPath.h @@ -1,6 +1,6 @@ /* This file is part of Element - Copyright (C) 2014-2019 Kushview, LLC. All rights reserved. + Copyright (C) 2014-2022 Kushview, LLC. All rights reserved. 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 @@ -44,6 +44,9 @@ class DataPath /** Returns the default user data path */ static const File defaultLocation(); + /** Returns the default Node MIDI Presets directory */ + static const File defaultGlobalMidiProgramsDir(); + /** Returns the default User data path */ static const File defaultUserDataPath(); @@ -62,6 +65,7 @@ class DataPath /** Returns the default Workspaces directory */ static const File workspacesDir(); + /** Returns the installation directory. May return an invalid file, especially when in debug mode. Use this sparingly. */ diff --git a/src/controllers/AppController.cpp b/src/controllers/AppController.cpp index 9da2cac35..77ffd9130 100644 --- a/src/controllers/AppController.cpp +++ b/src/controllers/AppController.cpp @@ -81,6 +81,16 @@ AppController::~AppController() { } void AppController::activate() { + // migrate global node midi programs. + auto progsdir = DataPath::defaultGlobalMidiProgramsDir(); + auto olddir = DataPath::applicationDataDir().getChildFile ("NodeMidiPrograms"); + if (! progsdir.exists() && olddir.exists()) + { + progsdir.getParentDirectory().createDirectory(); + olddir.copyDirectoryTo (progsdir); + } + + // restore recents const auto recentList = DataPath::applicationDataDir().getChildFile ("RecentFiles.txt"); if (recentList.existsAsFile()) { diff --git a/src/engine/NodeObject.cpp b/src/engine/NodeObject.cpp index a90240a65..0cd67e62b 100644 --- a/src/engine/NodeObject.cpp +++ b/src/engine/NodeObject.cpp @@ -422,7 +422,7 @@ File NodeObject::getMidiProgramFile (int program) const std::stringstream stream; stream << uids.toStdString() << "_" << std::setfill('0') << std::setw(3) << program << ".eln"; String fileName = stream.str(); - const File file (DataPath::applicationDataDir().getChildFile("NodeMidiPrograms").getChildFile(fileName)); + const File file (DataPath::defaultGlobalMidiProgramsDir().getChildFile (fileName)); if (! file.getParentDirectory().exists()) file.getParentDirectory().createDirectory(); return file; diff --git a/src/gui/NavigationConcertinaPanel.h b/src/gui/NavigationConcertinaPanel.h index 73da6dbdd..d115e0031 100644 --- a/src/gui/NavigationConcertinaPanel.h +++ b/src/gui/NavigationConcertinaPanel.h @@ -231,7 +231,7 @@ class DataPathTreeComponent : public Component, renameWindow ("Rename", "Enter a new file name.", AlertWindow::NoIcon) { thread.startThread(); - list.reset (new DirectoryContentsList (0, thread)); + list.reset (new DirectoryContentsList (&filter, thread)); list->setDirectory (DataPath::defaultLocation(), true, true); tree.reset (new FileTreeComponent (*list)); @@ -246,15 +246,15 @@ class DataPathTreeComponent : public Component, setSize (300, 800); } - + ~DataPathTreeComponent() { tree->removeListener (this); - renameWindow.setVisible (false); - tree.reset(); - list.reset(); + renameWindow.setVisible (false); + tree.reset(); + list.reset(); } - + void resized() override { tree->setBounds (getLocalBounds().reduced(2)); @@ -304,6 +304,19 @@ class DataPathTreeComponent : public Component, virtual void browserRootChanged (const File& newFile) override { ignoreUnused (newFile); } private: + class Filter : public FileFilter { + public: + Filter() : FileFilter ("UserDataPath") {} + + bool isFileSuitable (const File& file) const override { return true; } + bool isDirectorySuitable (const File& file) const override + { + if (file.getFileName().toLowerCase() == "cache") + return false; + return true; + } + } filter; + std::unique_ptr tree; std::unique_ptr list; TimeSliceThread thread; From 07413556b15f4415ff91c07c879b17e6a5985cde Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Mon, 31 Jan 2022 15:24:09 -0500 Subject: [PATCH 06/19] UI: add ability to change tempo by keyboard entry. --- src/gui/TempoAndMeterBar.h | 60 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/src/gui/TempoAndMeterBar.h b/src/gui/TempoAndMeterBar.h index 6e82757db..24ef442d2 100644 --- a/src/gui/TempoAndMeterBar.h +++ b/src/gui/TempoAndMeterBar.h @@ -219,8 +219,42 @@ class TempoAndMeterBar : public Component, class TempoLabel : public Component { public: - TempoLabel() { tempoValue.setValue (120.0); } - ~TempoLabel() { } + TempoLabel() + { + tempoValue.setValue (120.0); + addChildComponent (tempoInput); + + tempoInput.onEscapeKey = [this]() { + tempoInput.setVisible (false); + }; + + tempoInput.onFocusLost = + tempoInput.onReturnKey =[this]() { + auto txt = tempoInput.getText().trim(); + if (txt.isEmpty() || !tempoInput.isShowing()) + return; + + const auto charptr = txt.getCharPointer(); + auto ptr = charptr; + auto newTempo = CharacterFunctions::readDoubleValue (ptr); + + if (ptr - charptr == txt.getNumBytesAsUTF8()) + { + if (newTempo < 20.0) newTempo = 20.0; + if (newTempo > 999.0) newTempo = 999.0; + tempoValue.setValue (newTempo); + } + + tempoInput.setVisible (false); + resized(); + repaint(); + }; + } + + ~TempoLabel() + { + removeChildComponent (&tempoInput); + } void paint (Graphics& g) override { @@ -249,10 +283,27 @@ class TempoAndMeterBar : public Component, g.drawRect (0, 0, getWidth(), getHeight()); } + void resized() override + { + if (tempoInput.isVisible()) + tempoInput.setBounds (getLocalBounds()); + } + void mouseDown (const MouseEvent& ev) override { if (! isEnabled()) return; + + if (ev.getNumberOfClicks() == 2) + { + tempoInput.setText (tempoValue.getValue().toString(), dontSendNotification); + tempoInput.setVisible (true); + tempoInput.selectAll(); + tempoInput.grabKeyboardFocus(); + resized(); + return; + } + lastY = ev.getDistanceFromDragStartY(); } @@ -284,8 +335,13 @@ class TempoAndMeterBar : public Component, Value tempoValue; float engineTempo = 0.f; int lastY = 0; + + private: + TextEditor tempoInput; } tempoLabel; + + class TapTempoButton : public Button { public: From 5d308f4679c0af42a0e8af8f2759a0d41384253d Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Mon, 31 Jan 2022 16:58:02 -0500 Subject: [PATCH 07/19] Enable all internal plugs in single graph edition --- src/engine/InternalFormat.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/engine/InternalFormat.cpp b/src/engine/InternalFormat.cpp index 51e5afa75..52195f988 100644 --- a/src/engine/InternalFormat.cpp +++ b/src/engine/InternalFormat.cpp @@ -62,22 +62,18 @@ InternalFormat::InternalFormat (AudioEngine& e, MidiEngine& me) IOP p (IOP::audioOutputNode); p.fillInPluginDescription (audioOutDesc); } - { IOP p (IOP::audioInputNode); p.fillInPluginDescription (audioInDesc); } - { IOP p (IOP::midiOutputNode); p.fillInPluginDescription (midiOutDesc); } - { IOP p (IOP::midiInputNode); p.fillInPluginDescription (midiInDesc); } - #if defined (EL_PRO) || defined (EL_SOLO) { PlaceholderProcessor p; p.fillInPluginDescription (placeholderDesc); @@ -88,7 +84,6 @@ InternalFormat::InternalFormat (AudioEngine& e, MidiEngine& me) MidiDeviceProcessor out (false, midi); out.fillInPluginDescription (midiOutputDeviceDesc); } - #endif } AudioPluginInstance* InternalFormat::instantiatePlugin (const PluginDescription& desc, double, int) @@ -109,8 +104,6 @@ AudioPluginInstance* InternalFormat::instantiatePlugin (const PluginDescription& { return new IOP (IOP::midiOutputNode); } - - #if defined (EL_PRO) || defined (EL_SOLO) else if (desc.fileOrIdentifier == "element.midiInputDevice") { return new MidiDeviceProcessor (true, midi); @@ -123,7 +116,6 @@ AudioPluginInstance* InternalFormat::instantiatePlugin (const PluginDescription& { return new PlaceholderProcessor(); } - #endif // EL_FREE return nullptr; } @@ -339,8 +331,6 @@ AudioPluginInstance* ElementAudioPluginFormat::instantiatePlugin (const PluginDe base = new FreqSplitterProcessor(); else if (desc.fileOrIdentifier == EL_INTERNAL_ID_COMPRESSOR) base = new CompressorProcessor(); - - #if defined (EL_PRO) else if (desc.fileOrIdentifier == EL_INTERNAL_ID_GRAPH) base = new SubGraphProcessor(); else if (desc.fileOrIdentifier == EL_INTERNAL_ID_AUDIO_MIXER) @@ -349,16 +339,12 @@ AudioPluginInstance* ElementAudioPluginFormat::instantiatePlugin (const PluginDe base = new ChannelizeProcessor(); else if (desc.fileOrIdentifier == EL_INTERNAL_ID_MIDI_CHANNEL_MAP) base = new MidiChannelMapProcessor(); - #endif // EL_PRO - - #if defined (EL_PRO) || defined (EL_SOLO) else if (desc.fileOrIdentifier == EL_INTERNAL_ID_AUDIO_FILE_PLAYER) base = new AudioFilePlayerNode(); else if (desc.fileOrIdentifier == EL_INTERNAL_ID_MEDIA_PLAYER) base = new MediaPlayerProcessor(); else if (desc.fileOrIdentifier == EL_INTERNAL_ID_PLACEHOLDER) base = new PlaceholderProcessor(); - #endif // EL_PRO || EL_SOLO return base != nullptr ? base.release() : nullptr; } From cfa4fcaea074eb9445300beae5a195683eef40bc Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Wed, 2 Feb 2022 13:04:41 -0500 Subject: [PATCH 08/19] Fix MSVC warning --- src/gui/nodes/MidiIONodeEditor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/nodes/MidiIONodeEditor.h b/src/gui/nodes/MidiIONodeEditor.h index 7e94a2c25..24d666ac3 100644 --- a/src/gui/nodes/MidiIONodeEditor.h +++ b/src/gui/nodes/MidiIONodeEditor.h @@ -98,7 +98,7 @@ class MidiIONodeEditor : public NodeEditorComponent, bool showIns = true; bool showOuts = true; Viewport view; - friend class Content; + friend struct Content; struct Content : public Component, public Button::Listener From 4b1494f9d1437a12669705eebaecaccd52551d5a Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Wed, 2 Feb 2022 14:31:14 -0500 Subject: [PATCH 09/19] Fix problem where nullptr was passed to generic plugin editor. Resolves crash when internal nodes don't have a gui and not listed in the node editor factory. fixes #455 --- src/gui/NodeEditorFactory.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/NodeEditorFactory.cpp b/src/gui/NodeEditorFactory.cpp index e02f2ea0c..b889051b8 100644 --- a/src/gui/NodeEditorFactory.cpp +++ b/src/gui/NodeEditorFactory.cpp @@ -187,8 +187,10 @@ std::unique_ptr NodeEditorFactory::createAudioProcessorEdi NodeObjectPtr object = node.getGraphNode(); AudioProcessor* const proc = (object != nullptr) ? object->getAudioProcessor() : nullptr; - editor.reset (proc != nullptr && proc->hasEditor() - ? proc->createEditorIfNeeded() + if (proc == nullptr) + return nullptr; + + editor.reset (proc->hasEditor() ? proc->createEditorIfNeeded() : new GenericAudioProcessorEditor (proc)); return editor; From c6f76759564b0dc03546687e25ff37135e59119e Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Wed, 2 Feb 2022 16:36:29 -0500 Subject: [PATCH 10/19] Update git modules --- .gitmodules | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6c176c256..dc1a65131 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,16 +1,12 @@ [submodule "libs/kv"] path = libs/kv url = https://github.com/kushview/kv-modules - branch = develop [submodule "libs/JUCE"] path = libs/JUCE url = https://github.com/kushview/JUCE - branch = master [submodule "libs/jlv2"] path = libs/jlv2 url = https://github.com/lvtk/jlv2 - branch = master [submodule "libs/lua-kv"] path = libs/lua-kv url = https://github.com/kushview/lua-kv - branch = master From 701472f0ebeb081ff2cb13587cdafa99f384b9bb Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Wed, 2 Feb 2022 16:44:25 -0500 Subject: [PATCH 11/19] Flip jack ports. fixes #456 --- libs/kv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/kv b/libs/kv index e7a5e484d..af4f9d321 160000 --- a/libs/kv +++ b/libs/kv @@ -1 +1 @@ -Subproject commit e7a5e484d039cebd1c52930e6261b36a7a41d009 +Subproject commit af4f9d321165a97b028f0877bafa925379c0eabf From b7d259948307c927374e6d24cae6897dc2b1a741 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Wed, 2 Feb 2022 17:18:00 -0500 Subject: [PATCH 12/19] Add font notes in building.md --- docs/building.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/building.md b/docs/building.md index 550828772..3355a72ed 100644 --- a/docs/building.md +++ b/docs/building.md @@ -11,7 +11,7 @@ __Dependencies__ The following packages are needed... ``` -sudo apt-get install python git build-essential pkg-config libboost-dev libfreetype6-dev libx11-dev libxext-dev libxrandr-dev libxcomposite-dev libxinerama-dev libxcursor-dev libasound2-dev lv2-dev liblilv-dev libsuil-dev ladspa-sdk libcurl4-openssl-dev +sudo apt-get install python git build-essential pkg-config libboost-dev libfreetype6-dev libx11-dev libxext-dev libxrandr-dev libxcomposite-dev libxinerama-dev libxcursor-dev libasound2-dev lv2-dev liblilv-dev libsuil-dev ladspa-sdk libcurl4-openssl-dev fonts-roboto ``` __Optional__ @@ -47,7 +47,7 @@ sudo ldconfig Install these packages, then run the `waf` commands described above. ``` -sudo pacman -S git lilv suil lv2 ladspa boost +sudo pacman -S git lilv suil lv2 ladspa boost ttf-mswin10 ``` ## Mac OSX From cc9d3a80cc9c99eecf2013a49c1e87579859893f Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Wed, 2 Feb 2022 18:05:40 -0500 Subject: [PATCH 13/19] Don't trigger port reset async when restoring state. fixes #465 --- src/engine/NodeObject.cpp | 66 ++++++++++++++++------------ src/engine/NodeObject.h | 3 +- src/engine/nodes/AudioRouterNode.cpp | 2 +- src/engine/nodes/LuaNode.cpp | 2 +- src/engine/nodes/ScriptNode.cpp | 2 +- 5 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/engine/NodeObject.cpp b/src/engine/NodeObject.cpp index 0cd67e62b..330d956a7 100644 --- a/src/engine/NodeObject.cpp +++ b/src/engine/NodeObject.cpp @@ -780,44 +780,49 @@ struct ChannelConnectionMap void NodeObject::PortResetter::handleAsyncUpdate() { auto* const graph = node.getParentGraph(); - jassert (graph != nullptr); - // Cache existing connections by channel. OwnedArray sources, destinations; - for (int i = graph->getNumConnections(); --i >= 0;) + if (graph != nullptr) { - const auto* const c = graph->getConnection (i); - if (c->destNode == node.nodeId) + // Cache existing connections by channel. + for (int i = graph->getNumConnections(); --i >= 0;) { - auto* m = sources.add (new ChannelConnectionMap()); - m->type = node.getPortType (c->destPort); - m->channel = node.getChannelPort (c->destPort); - m->otherNodeId = c->sourceNode; - m->otherNodePort = c->sourcePort; - } - else if (c->sourceNode == node.nodeId) - { - auto* d = destinations.add (new ChannelConnectionMap()); - d->type = node.getPortType (c->sourcePort); - d->channel = node.getChannelPort (c->sourcePort); - d->otherNodeId = c->destNode; - d->otherNodePort = c->destPort; + const auto* const c = graph->getConnection (i); + if (c->destNode == node.nodeId) + { + auto* m = sources.add (new ChannelConnectionMap()); + m->type = node.getPortType (c->destPort); + m->channel = node.getChannelPort (c->destPort); + m->otherNodeId = c->sourceNode; + m->otherNodePort = c->sourcePort; + } + else if (c->sourceNode == node.nodeId) + { + auto* d = destinations.add (new ChannelConnectionMap()); + d->type = node.getPortType (c->sourcePort); + d->channel = node.getChannelPort (c->sourcePort); + d->otherNodeId = c->destNode; + d->otherNodePort = c->destPort; + } } } node.resetPorts(); - // Re-apply connections by channel - for (const auto* ccs : sources) { - graph->addConnection (ccs->otherNodeId, ccs->otherNodePort, node.nodeId, - node.getPortForChannel (ccs->type, ccs->channel, true)); - } + if (graph != nullptr) + { + // Re-apply connections by channel + for (const auto* ccs : sources) { + graph->addConnection (ccs->otherNodeId, ccs->otherNodePort, node.nodeId, + node.getPortForChannel (ccs->type, ccs->channel, true)); + } - for (const auto* dss : destinations) { - graph->addConnection (node.nodeId, node.getPortForChannel (dss->type, dss->channel, false), - dss->otherNodeId, dss->otherNodePort); + for (const auto* dss : destinations) { + graph->addConnection (node.nodeId, node.getPortForChannel (dss->type, dss->channel, false), + dss->otherNodeId, dss->otherNodePort); + } + graph->removeIllegalConnections(); } - graph->removeIllegalConnections(); // notify others node.portsChanged(); @@ -829,6 +834,13 @@ void NodeObject::triggerPortReset() portResetter.triggerAsyncUpdate(); } +void NodeObject::triggerPortReset (bool async) +{ + triggerPortReset(); + if (! async) + portResetter.handleUpdateNowIfNeeded(); +} + //========================================================================= int NodeObject::getLatencySamples() const { diff --git a/src/engine/NodeObject.h b/src/engine/NodeObject.h index 15fd98d95..b07c1ba74 100644 --- a/src/engine/NodeObject.h +++ b/src/engine/NodeObject.h @@ -395,7 +395,8 @@ class NodeObject : public ReferenceCountedObject //========================================================================== void triggerPortReset(); - + void triggerPortReset (bool async); + kv::PortList ports; ValueTree metadata; diff --git a/src/engine/nodes/AudioRouterNode.cpp b/src/engine/nodes/AudioRouterNode.cpp index c03280e39..03d83a282 100644 --- a/src/engine/nodes/AudioRouterNode.cpp +++ b/src/engine/nodes/AudioRouterNode.cpp @@ -352,7 +352,7 @@ void AudioRouterNode::setState (const void* data, int sizeInBytes) rebuildPorts = true; sendChangeMessage(); - triggerPortReset(); + triggerPortReset (false); } } } diff --git a/src/engine/nodes/LuaNode.cpp b/src/engine/nodes/LuaNode.cpp index c3643948b..f9b7412c6 100644 --- a/src/engine/nodes/LuaNode.cpp +++ b/src/engine/nodes/LuaNode.cpp @@ -754,7 +754,7 @@ Result LuaNode::loadScript (const String& newScript) script = draftScript = newScript; if (prepared) newContext->prepare (sampleRate, blockSize); - triggerPortReset(); + triggerPortReset (false); ScopedLock sl (lock); if (context != nullptr) newContext->copyParameterValues (*context); diff --git a/src/engine/nodes/ScriptNode.cpp b/src/engine/nodes/ScriptNode.cpp index 576b7259b..72ef47455 100644 --- a/src/engine/nodes/ScriptNode.cpp +++ b/src/engine/nodes/ScriptNode.cpp @@ -97,7 +97,7 @@ Result ScriptNode::loadScript (const String& newCode) { if (prepared) newScript->prepare (sampleRate, blockSize); - triggerPortReset(); + triggerPortReset (false); ScopedLock sl (lock); if (script != nullptr) newScript->copyParameterValues (*script); From d3374a1ec3462a8be19c7b83243a649772799339 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Wed, 2 Feb 2022 18:42:11 -0500 Subject: [PATCH 14/19] Brighten scrollbars. Fixes #468 --- src/gui/LookAndFeel.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/LookAndFeel.cpp b/src/gui/LookAndFeel.cpp index d760fd4bc..ba9f0bfa2 100644 --- a/src/gui/LookAndFeel.cpp +++ b/src/gui/LookAndFeel.cpp @@ -113,6 +113,9 @@ LookAndFeel::LookAndFeel() // rotary setColour (Slider::rotarySliderFillColourId, Colors::toggleBlue.darker(0.3)); + // Scrollbar + setColour (ScrollBar::thumbColourId, Colour::greyLevel (0.25f)); + // code editor. TODO setColour (CodeEditorComponent::backgroundColourId, findColour (Style::widgetBackgroundColorId).darker (0.6)); setColour (CodeEditorComponent::highlightColourId, Colour(0xff1b5381)); From e9705e90640f213d6f247ea177e27becb63fa5b5 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Wed, 2 Feb 2022 19:43:04 -0500 Subject: [PATCH 15/19] Do node autoconnect when dropping from windows explorer. fixes #460 --- src/gui/ContentComponentSolo.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/gui/ContentComponentSolo.cpp b/src/gui/ContentComponentSolo.cpp index e4c02ddf9..1e1d5e127 100644 --- a/src/gui/ContentComponentSolo.cpp +++ b/src/gui/ContentComponentSolo.cpp @@ -707,10 +707,36 @@ void ContentComponentSolo::filesDropped (const StringArray &files, int x, int y) else if ((file.hasFileExtension ("dll") || file.hasFileExtension ("vst") || file.hasFileExtension ("vst3")) && (getMainViewName() == "GraphEditor" || getMainViewName() == "PatchBay" || getMainViewName() == "PluginManager")) { + auto s = getSession(); + auto graph = s->getActiveGraph(); PluginDescription desc; - desc.pluginFormatName = file.hasFileExtension ("vst3") ? "VST3" : "VST"; + desc.pluginFormatName = file.hasFileExtension("vst3") ? "VST3" : "VST"; desc.fileOrIdentifier = file.getFullPathName(); - this->post (new LoadPluginMessage (desc, false)); +#if 0 + this->post(new LoadPluginMessage(desc, false)); +#endif + auto message = std::make_unique(graph, desc); + auto& builder(message->builder); + + if (ModifierKeys::getCurrentModifiersRealtime().isAltDown()) + { + const auto audioInputNode = graph.getIONode(PortType::Audio, true); + const auto midiInputNode = graph.getIONode(PortType::Midi, true); + builder.addChannel(audioInputNode, PortType::Audio, 0, 0, false); + builder.addChannel(audioInputNode, PortType::Audio, 1, 1, false); + builder.addChannel(midiInputNode, PortType::Midi, 0, 0, false); + } + + if (ModifierKeys::getCurrentModifiersRealtime().isCommandDown()) + { + const auto audioOutputNode = graph.getIONode(PortType::Audio, false); + const auto midiOutNode = graph.getIONode(PortType::Midi, false); + builder.addChannel(audioOutputNode, PortType::Audio, 0, 0, true); + builder.addChannel(audioOutputNode, PortType::Audio, 1, 1, true); + builder.addChannel(midiOutNode, PortType::Midi, 0, 0, true); + } + + this->post(message.release()); } } } From 88e82af8aa5bfa79a36c5b96b2c8cf07025f87ce Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Wed, 2 Feb 2022 20:45:36 -0500 Subject: [PATCH 16/19] Update UI when element plugin changes latency. closes #258 --- src/gui/ContentComponent.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/gui/ContentComponent.cpp b/src/gui/ContentComponent.cpp index 17898b038..602210c80 100644 --- a/src/gui/ContentComponent.cpp +++ b/src/gui/ContentComponent.cpp @@ -356,6 +356,9 @@ class ContentComponent::StatusBar : public Component, { sampleRate.addListener (this); streamingStatus.addListener (this); + if (isPluginVersion()) + latencySamplesChangedConnection = world.getAudioEngine()->sampleLatencyChanged.connect( + std::bind (&StatusBar::updateLabels, this)); addAndMakeVisible (sampleRateLabel); addAndMakeVisible (streamingStatusLabel); @@ -380,6 +383,7 @@ class ContentComponent::StatusBar : public Component, ~StatusBar() { + latencySamplesChangedConnection.disconnect(); sampleRate.removeListener (this); streamingStatus.removeListener (this); } @@ -422,6 +426,8 @@ class ContentComponent::StatusBar : public Component, if (auto* pe = findParentComponentOfClass()) { + // workaround - + engine->updateExternalLatencySamples(); const int latencySamples = pe->getLatencySamples(); text << latencySamples << " samples"; } @@ -481,6 +487,8 @@ class ContentComponent::StatusBar : public Component, ValueTree node; Value sampleRate, streamingStatus, status; + SignalConnection latencySamplesChangedConnection; + friend class Timer; void timerCallback() override { updateLabels(); From 1cc16380caa2ab79461246ba758b9de1f46db2a5 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Thu, 3 Feb 2022 18:42:01 -0500 Subject: [PATCH 17/19] Update to kushview/JUCE:element --- libs/JUCE | 2 +- libs/jlv2 | 2 +- src/engine/GraphPort.cpp | 2 +- src/engine/GraphProcessor.cpp | 4 ++-- src/engine/nodes/AudioFilePlayerNode.cpp | 2 +- src/engine/nodes/AudioRouterNode.h | 2 +- src/engine/nodes/CompressorProcessor.cpp | 2 +- src/engine/nodes/EQFilterProcessor.cpp | 2 +- src/engine/nodes/FreqSplitterProcessor.h | 2 +- src/engine/nodes/LuaNode.cpp | 2 +- src/engine/nodes/MidiChannelSplitterNode.h | 2 +- src/engine/nodes/MidiDeviceProcessor.h | 2 +- src/engine/nodes/MidiMonitorNode.h | 2 +- src/engine/nodes/MidiProgramMapNode.h | 2 +- src/engine/nodes/MidiRouterNode.h | 2 +- src/engine/nodes/OSCReceiverNode.h | 2 +- src/engine/nodes/OSCSenderNode.h | 2 +- src/engine/nodes/ScriptNode.cpp | 2 +- src/engine/nodes/SubGraphProcessor.cpp | 2 +- 19 files changed, 20 insertions(+), 20 deletions(-) diff --git a/libs/JUCE b/libs/JUCE index faf5ed402..314386787 160000 --- a/libs/JUCE +++ b/libs/JUCE @@ -1 +1 @@ -Subproject commit faf5ed40234c038c67c15220400f3ffacd4b323c +Subproject commit 3143867873c9523b08f150da1d79f9bd8fd08b50 diff --git a/libs/jlv2 b/libs/jlv2 index 978c106fc..a32903bf3 160000 --- a/libs/jlv2 +++ b/libs/jlv2 @@ -1 +1 @@ -Subproject commit 978c106fcc0e504e07ee23b2bd19e8b46c365974 +Subproject commit a32903bf3e45c998b472f4cee589dd25bf7aa978 diff --git a/src/engine/GraphPort.cpp b/src/engine/GraphPort.cpp index a60da6bcd..04dba1a1f 100644 --- a/src/engine/GraphPort.cpp +++ b/src/engine/GraphPort.cpp @@ -55,7 +55,7 @@ { d.name = getName(); d.fileOrIdentifier = portType.getURI(); - d.uid = d.fileOrIdentifier.hashCode(); + d.uniqueId = d.fileOrIdentifier.hashCode(); d.category = "Ports"; d.pluginFormatName = "Internal"; d.manufacturerName = "Element Project"; diff --git a/src/engine/GraphProcessor.cpp b/src/engine/GraphProcessor.cpp index 79c4b5270..48d2064d2 100644 --- a/src/engine/GraphProcessor.cpp +++ b/src/engine/GraphProcessor.cpp @@ -1525,7 +1525,7 @@ void GraphProcessor::setStateInformation (const void* /*data*/, int /*sizeInByte void GraphProcessor::fillInPluginDescription (PluginDescription& d) const { d.name = getName(); - d.uid = d.name.hashCode(); + d.uniqueId = d.name.hashCode(); d.category = "Graphs"; d.pluginFormatName = "Internal"; d.manufacturerName = "Kushview, LLC"; @@ -1575,7 +1575,7 @@ const String GraphProcessor::AudioGraphIOProcessor::getName() const void GraphProcessor::AudioGraphIOProcessor::fillInPluginDescription (PluginDescription& d) const { d.name = getName(); - d.uid = d.name.hashCode(); + d.uniqueId = d.name.hashCode(); d.category = "I/O Devices"; d.pluginFormatName = "Internal"; d.manufacturerName = "Element"; diff --git a/src/engine/nodes/AudioFilePlayerNode.cpp b/src/engine/nodes/AudioFilePlayerNode.cpp index 0c0f6d595..51797339c 100644 --- a/src/engine/nodes/AudioFilePlayerNode.cpp +++ b/src/engine/nodes/AudioFilePlayerNode.cpp @@ -378,7 +378,7 @@ void AudioFilePlayerNode::fillInPluginDescription (PluginDescription& desc) cons desc.manufacturerName = "Element"; desc.pluginFormatName = "Element"; desc.version = "1.0.0"; - desc.uid = EL_INTERNAL_UID_AUDIO_FILE_PLAYER; + desc.uniqueId = EL_INTERNAL_UID_AUDIO_FILE_PLAYER; } void AudioFilePlayerNode::clearPlayer() diff --git a/src/engine/nodes/AudioRouterNode.h b/src/engine/nodes/AudioRouterNode.h index 2d079c360..79ca49870 100644 --- a/src/engine/nodes/AudioRouterNode.h +++ b/src/engine/nodes/AudioRouterNode.h @@ -79,7 +79,7 @@ class AudioRouterNode : public NodeObject, desc.manufacturerName = "Element"; desc.pluginFormatName = "Element"; desc.version = "1.0.0"; - desc.uid = EL_INTERNAL_UID_AUDIO_ROUTER; + desc.uniqueId = EL_INTERNAL_UID_AUDIO_ROUTER; } protected: diff --git a/src/engine/nodes/CompressorProcessor.cpp b/src/engine/nodes/CompressorProcessor.cpp index 1637bc7af..dc8ba0079 100644 --- a/src/engine/nodes/CompressorProcessor.cpp +++ b/src/engine/nodes/CompressorProcessor.cpp @@ -64,7 +64,7 @@ void CompressorProcessor::fillInPluginDescription (PluginDescription& desc) cons desc.manufacturerName = "Element"; desc.pluginFormatName = "Element"; desc.version = "1.0.0"; - desc.uid = EL_INTERNAL_UID_COMPRESSOR; + desc.uniqueId = EL_INTERNAL_UID_COMPRESSOR; } void CompressorProcessor::updateParams() diff --git a/src/engine/nodes/EQFilterProcessor.cpp b/src/engine/nodes/EQFilterProcessor.cpp index 7d1837d64..61f68d98a 100644 --- a/src/engine/nodes/EQFilterProcessor.cpp +++ b/src/engine/nodes/EQFilterProcessor.cpp @@ -56,7 +56,7 @@ void EQFilterProcessor::fillInPluginDescription (PluginDescription &desc) const desc.manufacturerName = "Element"; desc.pluginFormatName = "Element"; desc.version = "1.0.0"; - desc.uid = EL_INTERNAL_UID_EQ_FILTER; + desc.uniqueId = EL_INTERNAL_UID_EQ_FILTER; } void EQFilterProcessor::updateParams() diff --git a/src/engine/nodes/FreqSplitterProcessor.h b/src/engine/nodes/FreqSplitterProcessor.h index aedba9216..97c83ef4f 100644 --- a/src/engine/nodes/FreqSplitterProcessor.h +++ b/src/engine/nodes/FreqSplitterProcessor.h @@ -60,7 +60,7 @@ namespace Element { desc.manufacturerName = "Element"; desc.pluginFormatName = "Element"; desc.version = "1.0.0"; - desc.uid = EL_INTERNAL_UID_FREQ_SPLITTER; + desc.uniqueId = EL_INTERNAL_UID_FREQ_SPLITTER; } void prepareToPlay (double sampleRate, int maximumExpectedSamplesPerBlock) override diff --git a/src/engine/nodes/LuaNode.cpp b/src/engine/nodes/LuaNode.cpp index f9b7412c6..ac5bc1671 100644 --- a/src/engine/nodes/LuaNode.cpp +++ b/src/engine/nodes/LuaNode.cpp @@ -774,7 +774,7 @@ void LuaNode::getPluginDescription (PluginDescription& desc) const { desc.name = "Lua"; desc.fileOrIdentifier = EL_INTERNAL_ID_LUA; - desc.uid = EL_INTERNAL_UID_LUA; + desc.uniqueId = EL_INTERNAL_UID_LUA; desc.descriptiveName = "A user scriptable Element node"; desc.numInputChannels = 0; desc.numOutputChannels = 0; diff --git a/src/engine/nodes/MidiChannelSplitterNode.h b/src/engine/nodes/MidiChannelSplitterNode.h index 66a57517b..4530a1069 100644 --- a/src/engine/nodes/MidiChannelSplitterNode.h +++ b/src/engine/nodes/MidiChannelSplitterNode.h @@ -92,7 +92,7 @@ class MidiChannelSplitterNode : public MidiFilterNode desc.manufacturerName = "Element"; desc.pluginFormatName = EL_INTERNAL_FORMAT_NAME; desc.version = "1.0.0"; - desc.uid = EL_INTERNAL_UID_MIDI_CHANNEL_SPLITTER; + desc.uniqueId = EL_INTERNAL_UID_MIDI_CHANNEL_SPLITTER; } protected: diff --git a/src/engine/nodes/MidiDeviceProcessor.h b/src/engine/nodes/MidiDeviceProcessor.h index 4863c52b0..eb6114d77 100644 --- a/src/engine/nodes/MidiDeviceProcessor.h +++ b/src/engine/nodes/MidiDeviceProcessor.h @@ -37,7 +37,7 @@ class MidiDeviceProcessor : public BaseProcessor, desc.name = "MIDI I/O Device"; desc.fileOrIdentifier = inputDevice ? EL_INTERNAL_ID_MIDI_INPUT_DEVICE : EL_INTERNAL_ID_MIDI_OUTPUT_DEVICE; - desc.uid = inputDevice ? EL_INTERNAL_UID_MIDI_INPUT_DEVICE + desc.uniqueId = inputDevice ? EL_INTERNAL_UID_MIDI_INPUT_DEVICE : EL_INTERNAL_UID_MIDI_OUTPUT_DEVICE; desc.descriptiveName = "MIDI device node"; desc.numInputChannels = 0; diff --git a/src/engine/nodes/MidiMonitorNode.h b/src/engine/nodes/MidiMonitorNode.h index 11d852dda..b3822729c 100644 --- a/src/engine/nodes/MidiMonitorNode.h +++ b/src/engine/nodes/MidiMonitorNode.h @@ -38,7 +38,7 @@ class MidiMonitorNode : public MidiFilterNode, { desc.name = "MIDI Monitor"; desc.fileOrIdentifier = EL_INTERNAL_ID_MIDI_MONITOR; - desc.uid = EL_INTERNAL_UID_MIDI_MONITOR; + desc.uniqueId = EL_INTERNAL_UID_MIDI_MONITOR; desc.descriptiveName = "MIDI Monitor"; desc.numInputChannels = 0; desc.numOutputChannels = 0; diff --git a/src/engine/nodes/MidiProgramMapNode.h b/src/engine/nodes/MidiProgramMapNode.h index 4edc29c5b..e1a57f6f5 100644 --- a/src/engine/nodes/MidiProgramMapNode.h +++ b/src/engine/nodes/MidiProgramMapNode.h @@ -53,7 +53,7 @@ class MidiProgramMapNode : public MidiFilterNode, desc.manufacturerName = "Element"; desc.pluginFormatName = "Element"; desc.version = "1.0.0"; - desc.uid = EL_INTERNAL_UID_MIDI_PROGRAM_MAP; + desc.uniqueId = EL_INTERNAL_UID_MIDI_PROGRAM_MAP; } void clear(); diff --git a/src/engine/nodes/MidiRouterNode.h b/src/engine/nodes/MidiRouterNode.h index c4d50aae2..bb5d50ebe 100644 --- a/src/engine/nodes/MidiRouterNode.h +++ b/src/engine/nodes/MidiRouterNode.h @@ -59,7 +59,7 @@ class MidiRouterNode : public NodeObject, void getPluginDescription (PluginDescription& desc) const override { desc.fileOrIdentifier = EL_INTERNAL_ID_MIDI_ROUTER; - desc.uid = EL_INTERNAL_UID_MIDI_ROUTER; + desc.uniqueId = EL_INTERNAL_UID_MIDI_ROUTER; desc.name = "MIDI Router"; desc.descriptiveName = "A MIDI Patch Grid"; desc.numInputChannels = 0; diff --git a/src/engine/nodes/OSCReceiverNode.h b/src/engine/nodes/OSCReceiverNode.h index 944f047f5..b89c10b8e 100644 --- a/src/engine/nodes/OSCReceiverNode.h +++ b/src/engine/nodes/OSCReceiverNode.h @@ -38,7 +38,7 @@ class OSCReceiverNode : public MidiFilterNode, { desc.name = "OSC Receiver"; desc.fileOrIdentifier = EL_INTERNAL_ID_OSC_RECEIVER; - desc.uid = EL_INTERNAL_UID_OSC_RECEIVER; + desc.uniqueId = EL_INTERNAL_UID_OSC_RECEIVER; desc.descriptiveName = "OSC Receiver"; desc.numInputChannels = 0; desc.numOutputChannels = 0; diff --git a/src/engine/nodes/OSCSenderNode.h b/src/engine/nodes/OSCSenderNode.h index 031bf6b20..ae4f76d38 100644 --- a/src/engine/nodes/OSCSenderNode.h +++ b/src/engine/nodes/OSCSenderNode.h @@ -39,7 +39,7 @@ class OSCSenderNode : public MidiFilterNode, { desc.name = "OSC Sender"; desc.fileOrIdentifier = EL_INTERNAL_ID_OSC_SENDER; - desc.uid = EL_INTERNAL_UID_OSC_SENDER; + desc.uniqueId = EL_INTERNAL_UID_OSC_SENDER; desc.descriptiveName = "OSC Sender"; desc.numInputChannels = 0; desc.numOutputChannels = 0; diff --git a/src/engine/nodes/ScriptNode.cpp b/src/engine/nodes/ScriptNode.cpp index 72ef47455..d5c2aee0f 100644 --- a/src/engine/nodes/ScriptNode.cpp +++ b/src/engine/nodes/ScriptNode.cpp @@ -118,7 +118,7 @@ void ScriptNode::getPluginDescription (PluginDescription& desc) const { desc.name = "Script"; desc.fileOrIdentifier = EL_INTERNAL_ID_SCRIPT; - desc.uid = EL_INTERNAL_UID_SCRIPT; + desc.uniqueId = EL_INTERNAL_UID_SCRIPT; desc.descriptiveName = "A user scriptable Element node"; desc.numInputChannels = 0; desc.numOutputChannels = 0; diff --git a/src/engine/nodes/SubGraphProcessor.cpp b/src/engine/nodes/SubGraphProcessor.cpp index bdba800b9..ab57ea34d 100644 --- a/src/engine/nodes/SubGraphProcessor.cpp +++ b/src/engine/nodes/SubGraphProcessor.cpp @@ -53,7 +53,7 @@ void SubGraphProcessor::fillInPluginDescription (PluginDescription& d) const d.manufacturerName = "Element"; d.version = ProjectInfo::versionString; d.fileOrIdentifier = "element.graph"; - d.uid = (d.name + d.fileOrIdentifier).getHexValue32(); + d.uniqueId = (d.name + d.fileOrIdentifier).getHexValue32(); d.isInstrument = false; d.numInputChannels = getTotalNumInputChannels(); d.numOutputChannels = getTotalNumOutputChannels(); From 58353df87c434a37bb3a8aa109ded63fb45d89e3 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Sat, 19 Feb 2022 12:23:20 -0500 Subject: [PATCH 18/19] Update FUNDING.yml --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 8bd253bb8..c26ed6fb4 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1 @@ -custom: https://kushview.net/product/element-single-download/ +custom: https://kushview.net/element/download/form/ From c318e388bd9aedcc5f2cc5dbbc5395b65b59e810 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Sun, 20 Feb 2022 01:01:22 -0500 Subject: [PATCH 19/19] Pull latest kv mods --- libs/kv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/kv b/libs/kv index af4f9d321..dddb98068 160000 --- a/libs/kv +++ b/libs/kv @@ -1 +1 @@ -Subproject commit af4f9d321165a97b028f0877bafa925379c0eabf +Subproject commit dddb98068c82ab220b2cef6476701f783a623018