mini-plugin host as plugin

Overview

DISTRHO Ildaeil

DISTRHO Ildaeil is mini-plugin host working as a plugin, allowing one-to-one plugin format reusage.
Load a VST2 plugin inside a LV2 host, or an LV2 plugin on a VST3 host, etc.

The name comes from the korean 일대일, which means "one to one".

THIS IS CURRENTLY A WORK IN PROGRESS.

Details

Ildaeil basically works as a mini-wrapper around Carla, leveraging it for all its host support.
Everything should be working except plugin parameters (none are exposed to the host).
Also, only LV2 hosting is enabled at the moment.

When open, Ildaeil will show a list of LV2 plugins to pick from.
Simply select one from the table and press "Load plugin".

If the plugin provides an embedable UI, Ildaeil show will that by default, otherwise it shows a generic parameter list.
Toggling between generic vs custom/embed view is possible.
In the case of a plugin providing a custom UI that is not embedable, Ildaeil will show the generic view by default. You can press "Show Custom GUI" to open the plugin UI in an external window.

screenshot

Goals

The current formats Ildaeil can work as are:

  • JACK/Standalone
  • LV2
  • VST2
  • VST3

And it can load the following plugin formats:

  • LV2

Later on, in theory, should be able to load the following plugin formats:

  • LADSPA
  • DSSI
  • VST2
  • VST3
  • AU (macOS only)

Additionally the following files could eventually be loaded:

  • Audio files (synced to host transport)
  • MIDI files (aligned to real/wall-clock time, synced to host transport)
  • SF2/3 files (through internal FluidSynth)
  • SFZ files (through internal SFZero)
Comments
  • FR: provide build option to re-use Carla bridge binaries in plugin bundles

    FR: provide build option to re-use Carla bridge binaries in plugin bundles

    From #lad on libera.chat:

    <strogon14> And are all these copies of the carla-bridge-* binaries in the plugin bundles really distinct files or would it be possible to symlink them from a Carly installation?
    <falktx> strogon14: link against system carla: no. use bridge binaries from system carla yes
    <falktx> I mean it would be possible, but breaks the whole point of how it works as a plugin
    <strogon14> falktx: can you elaborate? If I were to package Ildaeil as a distribution package, all these duplicate files seem superfluous.
    <falktx> for this to work as plugin, it should/needs to be self-contained
    <falktx> so building its own internal carla static lib is kinda required
    <falktx> the external files, being well, external, do not matter at all. I just build them for convenience but they can be replaced by carla ones sure
    <falktx> issue then is that ildaeil depends on carla to be installed, as dependency.
    -*- falktx is thinking carla-backend should become its own lib/project at some point
    <strogon14> I don't see the dependency on Carla as a problem in the context of distribution packages. For me the main advantage of Ildaeil is the simplified UI for loading plugins.
    <falktx> then all fine. just patch the root Makefile a bit to not build bridges by default
    <falktx> then some other that tries to copy these files, easy to spot
    <falktx> though I should make this a build option..
    
    opened by SpotlightKid 5
  • Geonkick not showing in list

    Geonkick not showing in list

    Did anyone get Geonkick LV2 working? It's not showing in the list here, which is strange, cause lots of other synths show/work.

    • https://github.com/free-sm/geonkick
    • https://kx.studio/Repositories:Plugins#geonkick

    I can get Geonkick working fine as a standalone, but Ildaeil doesn't seem to find it..

    So I guess what I'm asking is if this is a problem with Ildaeil or Geonkick..

    I'm using the Ildaeil VST2 version in Bitwig 4.1.6 on Linux Mint 20.3

    image

    ❯ env|grep -i lv2 
    LV2_PATH=/home/alf/.lv2:/usr/lib/lv2:/usr/local/lib/lv2
    
    ❯ locate geonkick
    /usr/bin/geonkick
    /usr/lib/lv2/geonkick.lv2
    /usr/lib/lv2/geonkick.lv2/geonkick.ttl
    /usr/lib/lv2/geonkick.lv2/libgeonkick_lv2.so
    /usr/lib/lv2/geonkick.lv2/manifest.ttl
    /usr/share/applications/geonkick.desktop
    /usr/share/doc/geonkick
    /usr/share/doc/geonkick/README.md.gz
    /usr/share/doc/geonkick/changelog.Debian.gz
    /usr/share/doc/geonkick/copyright
    /usr/share/icons/hicolor/128x128/apps/geonkick.png
    /usr/share/icons/hicolor/16x16/apps/geonkick.png
    /usr/share/icons/hicolor/22x22/apps/geonkick.png
    /usr/share/icons/hicolor/24x24/apps/geonkick.png
    /usr/share/icons/hicolor/32x32/apps/geonkick.png
    /usr/share/icons/hicolor/48x48/apps/geonkick.png
    /usr/share/icons/hicolor/64x64/apps/geonkick.png
    /usr/share/icons/hicolor/scalable/apps/geonkick.svg
    /usr/share/mime/application/x-geonkick-preset.xml
    /usr/share/mime/packages/geonkick.xml
    /var/lib/dpkg/info/geonkick.list
    /var/lib/dpkg/info/geonkick.md5sums
    

    image

    opened by fractalf 5
  • Create a `make install`

    Create a `make install`

    Usually, we install from source using make install. Right now, when I compile this project (see the nix derivation at the end), I get the files listed at the end, but I'd love to install them into $PREFIX/lib/{vst,vst3}... with a simple make install. Of course I could manually move them there, but for some of them I'm not even sure what I should do with them (like Ildaeil-FX/IldaeilPlugin.cpp.o, the *.d files or the *_JACK.cpp.o files)

    build/Ildaeil-FX
    build/Ildaeil-FX/DistrhoPluginMain_VST2.cpp.o
    build/Ildaeil-FX/DistrhoUIMain_VST3.cpp.d
    build/Ildaeil-FX/DistrhoUIMain_JACK.cpp.d
    build/Ildaeil-FX/IldaeilPlugin.cpp.o
    build/Ildaeil-FX/DistrhoPluginMain_VST3.cpp.o
    build/Ildaeil-FX/DistrhoUIMain_VST2.cpp.d
    build/Ildaeil-FX/DistrhoPluginMain_JACK.cpp.o
    build/Ildaeil-FX/DistrhoUIMain_LV2.cpp.o
    build/Ildaeil-FX/IldaeilUI.cpp.o
    build/Ildaeil-FX/DistrhoPluginMain_LV2.cpp.d
    build/Ildaeil-FX/DistrhoPluginMain_JACK.cpp.d
    build/Ildaeil-FX/DistrhoPluginMain_VST3.cpp.d
    build/Ildaeil-FX/DistrhoUIMain_VST2.cpp.o
    build/Ildaeil-FX/DistrhoUIMain_JACK.cpp.o
    build/Ildaeil-FX/IldaeilPlugin.cpp.d
    build/Ildaeil-FX/DistrhoPluginMain_VST2.cpp.d
    build/Ildaeil-FX/DistrhoUIMain_VST3.cpp.o
    build/Ildaeil-FX/DistrhoPluginMain_LV2.cpp.o
    build/Ildaeil-FX/IldaeilUI.cpp.d
    build/Ildaeil-FX/DistrhoUIMain_LV2.cpp.d
    build/Common
    build/Common/PluginHostWindow.cpp.o
    build/Common/PluginHostWindow.cpp.d
    build/Ildaeil-Synth
    build/Ildaeil-Synth/IldaeilPlugin.cpp.o
    build/Ildaeil-Synth/DistrhoUIMain_VST3.cpp.o
    build/Ildaeil-Synth/DistrhoPluginMain_VST2.cpp.o
    build/Ildaeil-Synth/DistrhoUIMain_JACK.cpp.o
    build/Ildaeil-Synth/DistrhoUIMain_LV2.cpp.d
    build/Ildaeil-Synth/DistrhoUIMain_VST2.cpp.o
    build/Ildaeil-Synth/DistrhoPluginMain_VST3.cpp.o
    build/Ildaeil-Synth/IldaeilUI.cpp.d
    build/Ildaeil-Synth/DistrhoPluginMain_LV2.cpp.d
    build/Ildaeil-Synth/DistrhoPluginMain_JACK.cpp.o
    build/Ildaeil-Synth/IldaeilPlugin.cpp.d
    build/Ildaeil-Synth/IldaeilUI.cpp.o
    build/Ildaeil-Synth/DistrhoPluginMain_LV2.cpp.o
    build/Ildaeil-Synth/DistrhoPluginMain_JACK.cpp.d
    build/Ildaeil-Synth/DistrhoUIMain_VST2.cpp.d
    build/Ildaeil-Synth/DistrhoPluginMain_VST3.cpp.d
    build/Ildaeil-Synth/DistrhoUIMain_JACK.cpp.d
    build/Ildaeil-Synth/DistrhoUIMain_LV2.cpp.o
    build/Ildaeil-Synth/DistrhoUIMain_VST3.cpp.d
    build/Ildaeil-Synth/DistrhoPluginMain_VST2.cpp.d
    build/Ildaeil-MIDI
    build/Ildaeil-MIDI/DistrhoUIMain_VST2.cpp.o
    build/Ildaeil-MIDI/DistrhoPluginMain_LV2.cpp.o
    build/Ildaeil-MIDI/IldaeilPlugin.cpp.d
    build/Ildaeil-MIDI/DistrhoUIMain_JACK.cpp.o
    build/Ildaeil-MIDI/DistrhoUIMain_VST3.cpp.o
    build/Ildaeil-MIDI/DistrhoPluginMain_VST2.cpp.o
    build/Ildaeil-MIDI/DistrhoPluginMain_JACK.cpp.o
    build/Ildaeil-MIDI/DistrhoUIMain_LV2.cpp.o
    build/Ildaeil-MIDI/IldaeilUI.cpp.d
    build/Ildaeil-MIDI/DistrhoPluginMain_VST3.cpp.o
    build/Ildaeil-MIDI/DistrhoUIMain_VST3.cpp.d
    build/Ildaeil-MIDI/IldaeilPlugin.cpp.o
    build/Ildaeil-MIDI/DistrhoUIMain_JACK.cpp.d
    build/Ildaeil-MIDI/DistrhoUIMain_VST2.cpp.d
    build/Ildaeil-MIDI/DistrhoPluginMain_LV2.cpp.d
    build/Ildaeil-MIDI/DistrhoUIMain_LV2.cpp.d
    build/Ildaeil-MIDI/IldaeilUI.cpp.o
    build/Ildaeil-MIDI/DistrhoPluginMain_VST3.cpp.d
    build/Ildaeil-MIDI/DistrhoPluginMain_JACK.cpp.d
    build/Ildaeil-MIDI/DistrhoPluginMain_VST2.cpp.d
    

    default.nix:

    { pkgs ? import <nixpkgs> {} }:
    pkgs.callPackage ./derivation.nix {}
    

    derivation.nix:

    { lib
    , stdenv
    , fetchFromGitHub
    , cmake
    , pkg-config
    # Not sure which one I should keep (at least libGL for sure)
    , liblo
    , freetype, libX11, libXrandr, libXinerama, libXext, libXcursor, libGL
    , gtk2, gtk3
    , libjack2, alsa-lib, alsa-tools
    }:
    
    stdenv.mkDerivation rec {
      pname = "Ildaeil";
      version = "unstable-b1b71590";
    
      src = fetchFromGitHub {
        owner = "DISTRHO";
        repo = pname;
        rev = "b1b71590af50a8dcffb83eaeee832115fbe5baab";
        sha256 = "sha256-YSdGucOhHVL8E49f0GgayvgP9aqV5B68zrOHmBa6GT0=";
        fetchSubmodules = true;
      };
    
      nativeBuildInputs = [
        # cmake
        pkg-config
      ];
      buildInputs = [
        liblo
        freetype
        libX11 libXrandr libXinerama libXext libXcursor libGL
        gtk2 gtk3
        libjack2 alsa-lib alsa-tools
      ];
    
      buildPhase = ''
        patchShebangs dpf/utils/generate-ttl.sh
        make
      '';
    
      installPhase = ''
        mkdir -p $out/lib/{vst,vst3,lv2,}
        # To write
      '';
    }
    

    EDIT New version with attempt to install (need to test):

    { lib
    , stdenv
    , fetchFromGitHub
    , cmake
    , pkg-config
    # Not sure which one I should keep (at least libGL for sure)
    , liblo
    , freetype, libX11, libXrandr, libXinerama, libXext, libXcursor, libGL
    , gtk2, gtk3
    , libjack2, alsa-lib, alsa-tools
    }:
    
    stdenv.mkDerivation rec {
      pname = "Ildaeil";
      version = "unstable-b1b71590";
    
      src = fetchFromGitHub {
        owner = "DISTRHO";
        repo = pname;
        rev = "b1b71590af50a8dcffb83eaeee832115fbe5baab";
        sha256 = "sha256-YSdGucOhHVL8E49f0GgayvgP9aqV5B68zrOHmBa6GT0=";
        fetchSubmodules = true;
      };
    
      nativeBuildInputs = [
        # cmake
        pkg-config
      ];
      buildInputs = [
        liblo
        freetype
        libX11 libXrandr libXinerama libXext libXcursor libGL
        gtk2 gtk3
        libjack2 alsa-lib alsa-tools
      ];
    
      buildPhase = ''
        patchShebangs dpf/utils/generate-ttl.sh
        make
      '';
    
      installPhase = ''
        mkdir -p $out/lib/{vst,vst3,lv2,}
        cd build
        # Copy LV2 files (dirty copy/paste... but lazy to write cleaner code)
        for file in $(find . | grep "_LV2" | grep -v ".d$")
        do
          dest="$out/lib/lv2/$file"
          echo "Copying $file into $dest."
          mkdir -p $(dirname "$dest")
          cp "$file" "$dest"
        done
        # Copy VST2 files (dirty copy/paste... but lazy to write cleaner code)
        for file in $(find . | grep "_VST2" | grep -v ".d$")
        do
          dest="$out/lib/vst/$file"
          echo "Copying $file into $dest."
          mkdir -p $(dirname "$dest")
          cp "$file" "$dest"
        done
        # Copy VST3 files (dirty copy/paste... but lazy to write cleaner code)
        for file in $(find . | grep "_VST3" | grep -v ".d$")
        do
          dest="$out/lib/vst3/$file"
          echo "Copying $file into $dest."
          mkdir -p $(dirname "$dest")
          cp "$file" "$dest"
        done
        # TODO: what should I do with files like Ildaeil-MIDI/IldaeilUI.cpp.o, Common/PluginHostWindow.cpp.o, Ildaeil-Synth/DistrhoUIMain_JACK.cpp.o...?
      '';
    }
    
    opened by tobiasBora 3
  • Plugins are not found

    Plugins are not found

    I tried to install Ildaeil, but when I run it (inside Bespoke), I get an error "There are no LV2 audio plugins on this sytem".

    image

    But I do have many lv2 plugins, and they are detected in Carla (ok, in carla I need to configure the paths), Ardour, lv2ls…:

    $ lv2ls 
    http://arcticanaudio.com/plugins/thefunction
    http://arcticanaudio.com/plugins/thepilgrim
    http://au.tomatl.org/essp
    http://calf.sourceforge.net/plugins/Analyzer
    http://calf.sourceforge.net/plugins/BassEnhancer
    http://calf.sourceforge.net/plugins/CompensationDelay
    http://calf.sourceforge.net/plugins/Compressor
    http://calf.sourceforge.net/plugins/Crusher
    [...]
    

    In which path is Ildaeil searching for the plugins? Is it looking for the environment variable $LV2_PATH?

    $ echo $LV2_PATH
    ~/.nix-profile/lib/lv2/:~/.lv2:/nix/var/nix/profiles/default/lib/lv2:/var/run/current-system/sw/lib/lv2
    

    EDIT

    It seems plugins are found if they are in ~/.lv2. However, it would be better to also look for the $LV2_PATH which seems to be more standard.

    opened by tobiasBora 2
  • Provide a source distribution with packaged dependencies

    Provide a source distribution with packaged dependencies

    Currently the source archives attached as assets to the v1.0 tag are the standard Github-generated ones, whoch do not include the Git sub-modules.

    It would make packaging Ildaeil for distributions much easier, if a source distribution with all sub-module sources included would be provided.

    opened by SpotlightKid 1
  • Why SFZero and not sfizz?

    Why SFZero and not sfizz?

    SFZero seems to be an old project with no updates for half a decade, while sfizz is constantly updated and improved.

    sfizz is already used internally by a plug-ins called DROPS to play back samples, so it is very possible to use it's engine in another plug-in.

    Why choose SFZero over sfizz?

    opened by unfa 1
  • Plugins aren't listed alphabetically .

    Plugins aren't listed alphabetically .

    example : I have added BOops.lv2 to my ~/.lv2 folder and when I launch a new instance of ildaeil the plugin is put to the bottom of the plugin list.

    It looks like the URI is being used to determine the order of the plugin list, should it be the actual plugin name that does this instead ?

    ildaeil_alphabetical_order

    opened by mikobuntu 2
Releases(v1.2)
Owner
DISTRHO
DISTRHO
Repo for the DSA Mini-project Directory Manager

Directory Manager Repo for the DSA Mini-project Directory Manager Installation and Setup To setup the program on your desktop, do the following. git c

Pramod Rao Budramane 5 Oct 16, 2021
Unofficial Firmware for the Prusa Mini

Llama Mini Unofficial Firmware for the Prusa Mini and Mini+ One of Prusa's llamas escaped from HQ ( ?? ??‍♂️ ) and decided to make his own version of

Matthew Lloyd 70 Jan 1, 2023
ESP32 + Arducam Mini 2MP Plus Edge Impulse Example

Minimal example code for running an Edge Impulse image classification network with the ESP32, ArduCAM, and PlatformIO

David Schwarz 6 Apr 23, 2022
A mini assembler for x86_64, written for fun and learning.

minias A mini assembler for x86_64, written for fun and learning. Goals: A simple, tiny, fast implementation (in that order). Assemble the output of c

null 193 Dec 9, 2022
A mini x86-64 assembler for fun

A mini x86-64 assembler for fun

null 193 Dec 9, 2022
Lo-Fi SAMD21 based mini chip tune synthesizer - Seeed Studio - Seeeduino XIAO arduino project

samd21_mini_synth Lo-Fi SAMD21 based mini chip tune synthesizer Seeed Studio - Seeeduino XIAO arduino project link to the video Description This time

Marcel 8 Dec 12, 2022
Wortuhr mit ESP8266 WeMos D1 mini und NeoPixel WS2812B LEDs mit mp3 Sounds, Animationen, Transitions, Events und Spiele

Wortuhr_ESP8266 Wortuhr mit ESP8266 WeMos D1 mini und NeoPixel WS2812B LEDs mit mp3 Sounds, Animationen, Transitions, Events und Spiele, Webzugriff So

null 25 Dec 22, 2022
Dummy-Robot my super mini robot arm robot items

Dummy-Robot 我的超迷你机械臂机器人项目。 资料待整理 已添加3D模型设计源文件。 已添加夹爪硬件设计文件和LED灯环PCB 已添加无线空间定位控制器PCB文件 已添加无线示教器Peak软硬件工程(作为submodule) 已添加REF的硬件设计文件 已添加DummyStudio上位机 已

稚晖 8.9k Dec 30, 2022
ESP8266 (Wemos D1 Mini) NeoPixel controller for RepRapFirmware (BLV printers)

Overview This project is designed to handle NeoPixel control on an ESP8266 (Wemos D1 mini) and offload it from RepRapFirmware. Features WiFi-enabled W

Perry 3 Oct 23, 2022
A "mini" implementation of vim :3

minivim info A "mini" implementation of vim :3 It uses VT100 escape characters (I will implement ncurses in the future probably). P.S. I know they are

izenynn 7 Jun 9, 2022
Remote Arduino Uno-based TFT graphical display for VSR Mini Mega Alternator Regulator

VSMMAR_Remote_Display Remote Arduino Uno-based TFT graphical display for VSR Mini Mega Alternator Regulator This project is an optional accessory for

null 1 Nov 6, 2021
A mini tilemap editor

minitile A mini tilemap editor. Features Small: a compact editor great for prototyping maps Simple-to-use Export functionality: design your maps and e

Laurentino Luna 7 Feb 22, 2022
A STM32F428I-DISC1 based sonar which implements the HC-SR04 ultrasonic sensor and a mini-servo

STM32 Sonar Youtube This is a Sonar based on the STM32 microcontroller. It uses the following parts: STM32F428I-DISC1 Devboard HC-SR04 ultrasonic sens

Robert Sorić 2 Nov 9, 2022
My new zigbee project. Wireless temperature and humidity mini sensor with electronic ink display 2.13 inches, low power consumption, compact size, enclosure with magnets.

My new zigbee project. Wireless temperature and humidity mini sensor with electronic ink display 2.13 inches, low power consumption, compact size, enclosure with magnets. The device use SHTC3 sensors, chip CC2530, battery CR2477.

Andrew Lamchenko 20 Nov 20, 2022
Just a basic mini library for parsing simple files that only have variables written and with Lua extension.

C++ Parser Lua file config Just a basic mini library for parsing simple files that only have variables written and with Lua extension. Note: At the mo

Marcos Oliveira 3 Dec 26, 2021
Simple mini-shell coded in C Language

Mini Shell Simple mini-shell coded in C Language, i had a lot of informations and experiences on Linux processes and some low level stuff while coding

Sc1r3Cr0w 4 Jun 16, 2022
A polite conversation is a mini C++ project inspired by the game "The Turing Test".

A polite conversation A polite conversation is mini C++ project inspired by the game "The Turing Test". Installation You need clang and GNU readline l

null 2 Jan 5, 2022
ESP32 software USB host through general IO pins. We can connect up to 4 USB-LS HID (keyboard mouse joystick) devices simultaneously.

esp32_usb_soft_host esp32 USB-LS pure software host thru general IO pins. Up to 4 HID devices simultaneously. board ~$3 :https://www.aliexpress.com/pr

Samsonov Dima 313 Jan 1, 2023
PoC for CVE-2021-28476 a guest-to-host "Hyper-V Remote Code Execution Vulnerability" in vmswitch.sys.

CVE-2021-28476: a guest-to-host "Microsoft Hyper-V Remote Code Execution Vulnerability" in vmswitch.sys. This is a proof of concept for CVE-2021-28476

Axel Souchet 208 Nov 26, 2022