Giter VIP home page Giter VIP logo

carla's Introduction

Hi there 👋 Welcome to my profile page! 🤓

Here is a list of projects I have worked on, either for a job or for fun and research, sometimes as a challenge too.

A possibly updated version of this content is also available online at falktx.berlin.

If you are interested on hiring me for something similar to what you see here, please get in touch!
You can reach me at [email protected], expect negotiable rates around 60eur/h, half of that if doing it as an open-source project. Other details about my work can be found in my CV.

If you are just browsing through and like what you see here, please know I have a Patreon page you can subscribe to. :)

Audio plugins

DISTRHO Plugin Framework, or DPF for short, is a minimalistic C++ framework for audio plugins.
I started it many years ago after being disappointed with the available options for making desktop audio plugins. Pretty much all the existing options did not support Linux (most still don't) or did so in a subpar way.

The idea behind DPF was (and still is) to have something that is stupid simple and works well, intentionally not supporting more esoteric features. This applies to graphics as well, for which DPF does not implement its own draw operations but instead uses Cairo, OpenGL or Vulkan through a pugl backend.

By having OpenGL as a possible graphics drawing API, many existing "mini toolkits" can be easily ported over to work with DPF.
I added NanoVG as one of such "mini toolkits", directly integrated in the DPF project.
Also added others like oui-blendish and Dear ImGui to the separate DPF-Widgets project.

So far I have implemented LADSPA, DSSI, LV2, VST2, VST3 and CLAP plugin formats, with an extra standalone type that can use JACK if available otherwise falls back to the default audio driver in the system (via RtAudio and SDL).

DPF Plugins

Bellow follows a list of plugins using DPF that I either created or ported to it, that I am currently maintaining.

For most of these projects I worked on the build setup, plugin format and OS-related low-level things, sometimes GUI implementation too.
Very rarely I actually deal with the DSP implementation details, as that is not my area of expertise.
Everything else is fine though. ;)

Please note that I keep my own DPF-based plugins under the DISTRHO organization, just to help reduce clutter on my main GitHub account.
Also, unfinished and very minor/simple ports are not listed here on this page.

AIDA-X is an Amp Model Player based on RTNeural. It loads previously-trained AI models meant to simulate guitar amplifiers.

It started as an LV2 plugin from AidaDSP, I ported it to DPF so that we could have it running as CLAP/VST2/VST3 + Standalone, with the GUI based on their existing designs (all drawing manually recreated in NanoVG).
I also added some peak meters and post-amp IR convolution (based on work done for other projects).

A wasm/browser version is available to try online at aida.kx.studio.

AIDA-X \

Cardinal is a modular synthesizer plugin, based on VCV Rack but with a focus on being a fully self-contained plugin version.

Created first and foremost as a way to have Rack as a conventional open-source audio plugin, following good practices for an audio plugin (a proper audio plugin should be self-contained as much as possible, as to not interfere with the DAW/Host; loading external modules clearly goes against this idea, which is how Rack operates).
Also as a way to have a Rack version with support for more than just the basic 3 desktop operating systems, plus LV2 format.

I created a few custom modules and also ported AIDA-X, Carla, glBars, Ildaeil and PitchTrackingSeries to it.

A wasm/browser version is available to try online at cardinal.kx.studio/live.

Cardinal \

An experiment with Faust Demo Library content as DPF plugins, started as a way to study and test faust and faustpp before picking the right approach to handle the master_me audio plugin.

With some makefile magic any faust file placed in the dsp/ directory is automagically added as part of the build, which generates CLAP, LADSPA, LV2, VST2 and VST3 automatically.

I come back to this project from time to time whenever some new faust-based project is needed.
So Fadeli works nicely as a reference point and testing ground to build upon.

This is a simple OpenGL bars visualization audio plugin (as seen in XMMS and XBMC/Kodi).
Adapted from the jack_glbars project by Nedko Arnaudov.

I created this project as a way to test raw OpenGL calls for a plugin GUI, something that is not static but reacts to audio.

glBars \

Ildaeil is mini-plugin host working as a plugin, allowing one-to-one plugin format reusage.
The idea is to load it as a plugin inside the DAW and then the other "real" plugin inside Ildaeil.
This allows, for example, a VST3 host to load LV2 plugins.

Ildaeil is mostly "glue code" to combine all aspects of Carla and DPF.
Dear ImGui is used for handling UI things.
Most of the complexity in Ildaeil comes from embedding hosted plugin GUIs while still displaying Ildaeil's own OpenGL-based GUI.

Ildaeil \

Max-Gen examples (MaBitcrush, MaFreeverb, MaGigaverb, MaPitchshift)

An experiment with MAX gen~ based audio plugins and DPF.
Based on https://github.com/Cycling74/gen-plugin-export.

Initially done as a way to have gen~ based LV2 plugins on the MOD Audio platform, then grew into max-gen-skeleton for automated plugin builds.
The same base code has been used for the SHIRO-Plugins collection and a few commercial plugins pushed into the MOD plugin store (K-Devices and SHIRO)

An automatic audio mastering plugin for live-streaming, podcasting and internet radio stations.
In 2022 it was funded by the Prototype Fund, an open source software funding initiative by the german ministry of education and research.

The project was started by Klaus Scheuermann and a few other contributors, and I joined at the final implementation stage for turning their faust setup into a proper audio plugin.
My work consisted of setting up the build infrastructure, plugin format handling (via DPF of course) and coding a custom GUI for it. Still help on its maintenance from time to time.

master_me easy view \

master_me expert view \

Mini-Series (3BandEQ, 3BandSplitter, PingPongPan)

A collection of small but useful plugins, based on the good old LOSER-Dev Plugins.
One of my very first DPF-based plugin projects, simple in nature on purpose, as they were mostly the testing ground for all the basics of an audio plugin framework.
Graphics done by António Saraiva.

This collection currently includes:

  • 3 Band EQ
  • 3 Band Splitter
  • Ping Pong Pan

Might add more plugins to it later on, but for now they have served its purpose.

3BandEQ \

PingPongPan \

An open-source reverb, originally created as VST2, which I have ported to DPF as a way to get its GUI running on Linux and with an LV2 version too. It also serves as a way to test text rendering.

MVerb \

A simple single-oscillator synth based on the Roland TB-303. The original nekobee was abandoned and coded in DSSI plugin format which most audio hosts do not support.

I ported it to DPF as a way to get a small synth example.
Graphics done by António Saraiva.

Nekobi \

Note: This project is meant to be a plugin series, but for now there is only 1 plugin - Audio To CV Pitch - for converting audio input into CV output (in 1V/Oct range).

This plugin was started by Bram Giesen, using aubio library for the pitch detection heavy work.

I worked on the final tweaks and polishing.

This is an audio plugin that makes use of the the projectM awesome music visualizer.

I started the project as a way to have more complex OpenGL setups working with DPF, but also because it's cool.

ProM \

Small utility plugins for getting sound out of plugin hosts into JACK.
These plugins do not have any GUI or configuration whatsoever.

I created these plugins as a way to more reliably test my work-in-progress OBS audio plugin support, as (at the time I started the project) OBS did/does not have a way to monitor the audio output without starting a live stream.

It includes a "soft" zinc variant, that buffers audio and thus has latency, but works with hosts that dynamically change the amount of samples on each plugin process run.
A "hard" zinc variant directly syncs the plugin host audio thread with the plugin-created JACK client, thus having no extra latency. It requires that the plugin host is already using JACK and uses it to drive its audio engine.

JUCE porting

My DISTRHO-Ports project contains a few plugins I have (im)ported and been maintaining since a few years. They either did not have a Linux version initially or lacked LV2 plugin support (which for many years was not officially part of JUCE).

Most of my work for these have been on the build setup, a few times requiring doing code fixes as well.

I started an LV2 wrapper back in 2011, which I maintained to keep up with JUCE related changes. This unofficial wrapper still exists in DISTRHO/JUCE juce6 branch, which has been super-seeded by an official JUCE LV2 one in JUCE7. None of my code ended up in the new official wrapper.

You can find my set of JUCE7 patches here. These include:

  • Forcing GPLv3 mode
  • Disabling splash screen analytics
  • Bringing back old VST2 interface file (GPLv3+ licensed) from JUCE5
  • Enabling VST2 by default now that it does not need VST2 SDK anymore
  • Tweaks for improved Linux behaviour
  • Older macOS and mingw/win32 compatibility

From scratch

Besides using DPF and JUCE for plugins, I have also created some from scratch, using the format-specific APIs directly.
Typically I would go with DPF for plugins, but while keeping DPF intentionally simple there will be a few things it cannot do (like multi MIDI IO).

An LV2 audio plugin to bridge audio from the host (or a JACK client) into an ALSA device and vice-versa.
Created as an attempt to get the MOD Dwarf unit working as USB audio interface, but very likely useful in other scenarios too.

The project is considered still in progress, as it needs more tweaks to become more reliable and resilient against unexpected audio timings (the Dwarf USB2 driver is far from optimal).

Simple synth-like plugins that make use of soundfonts loaded through fluidsynth library, with each plugin hardcoded to a soundfont.

Created as a way to get some simple sound generators for LV2 plugin hosts that do not yet support LV2 file parameters.

Very simple VST2 plugin that receives MIDI from the host and outputs it in a JACK-MIDI port. A FX variant is also available, exposes a few parameters that generate MIDI CC events when changed.

Created out of personal necessity.

A DPF-based IR convolution plugin created for MOD Audio, based on my work-in-progress One-Knob Plugin Series' IR-based reverb project, which in turn uses my custom fork of HiFi-LoFi's FFTConvolver engine.

This MOD-specific plugin started from the need of a proprietary and commercially-compatible IR convolution engine for audio plugins.

A mono cabinet-focused and a stereo reverb-focused loader are available.

A plugin made for modular hosts that support multi-threaded processing, allowing to split a single audio processing chain into 2 and thus forcing parallelization of the audio path. The implementation of the plugin is quite simple, just some buffer copying and thread-sync via semaphores.

Created out of curiosity, to see if such setup would even work. Turns out it is quite useful, specially on multi-threaded systems where single-CPU-core performance is very limited. See https://forum.mod.audio/t/introducing-portal/9329 for a user discussion about it.

Desktop applications

A modular, feature-full audio plugin host, so we can load all the audio plugins mentioned above on this page. Has a split backend vs frontend design, which allows the backend to be used in other projects (such as Cardinal, Ildaeil, LMMS and Zrythm).

Backend is written in C and C++, frontend has some C++ but still mostly in Python + Qt.
The backend has no required external dependencies, I wrote a lot of custom low-level code (dealing with shared memory, semaphores, IPC, threading, etc) so it could be this way.
A few libraries are included in Carla codebase (like RtAudio, RtMidi and serd+sord+sratom+lilv combo) not just for easy building but also for patching their sources.

Carla integrates directly in JACK with its multi-client engine (1 plugin = 1 client) or all plugins as a single client, or abstracted from JACK with its own internal patchbay graph.
Native audio and MIDI is provided through the use of JUCE, RtAudio+RtMidi or SDL.

Carla natively supports LADSPA, DSSI, LV2, VST2, VST3 and CLAP plugin formats.
Plugin bridging is possible too, using a custom implementation.

Extra file support includes SF2/3 using fluidsynth, SFZ using an internal SFZero fork and JSFX.

Still experimental, under Linux Carla can load JACK standalone applications within itself by faking a JACK server. This uses a similar setup as plugin bridges do, but with some extra LD_PRELOAD "magic" to force applications to see a custom libjack.so from Carla instead of the real one. Applications end up talking to Carla but have no knowledge of such. Only parts of the JACK API are implemented in this mode, but enough to already get most applications to work.

Carla \

This project has been abandoned, but still serves as reference and has been the starting point for other tools based on it.

This is one of the very first projects I started, as a way to learn GUI programming and have something useful for managing JACK and Linux audio. All code was initially written in Python with Qt as the GUI, with a few tools later converted to C++ for having proper realtime performance.

Over time Cadence small parts have moved into other projects:

  • patchbay canvas code was integrated in Carla, where it received many updates
  • Carla's canvas was branched off into RaySession, which uses the same code as base but with its own style (external project, not my own)
  • pyjacklib became its own project (external project I am helping maintain)
  • qjackcapture from the jack render tool (another external project)
  • bigmeter and xycontrollers were added as internal plugins in Carla
  • wineasio settings panel

The only big remaining part to still be split off is the jack2/jackdbus settings tool and then Cadence can really die as a project.

Cadence \

I created a tool to serve as welcome screen for Linux-based Live USBs, meant to run in full screen and setup audio related things. The intention was to show a setup screen at the start, which will then start a systemd service that handles the audio (JACK with internal clients). Then external application windows are embed into it, as if they are part of the it.

This tool is written in C++ and Qt, with some KDE things because they are just so handy. Since it is booting from a self-contained system (the live USB), dependencies on KDE frameworks is not an issue. We can enjoy some text editing, terminal emulator, file explorer, pdf viewer and other complex widgets with just a few lines of code. :)

For the usecase I wrote this for the external application was actually a local webserver, so a Qt web browser widget is used.

It is likely that this live USB setup can be adapted for other applications, perhaps not even audio related.

MOD Live-USB \

A simple control panel to start a few services in a sequential manner (mod-host first, then mod-ui, then browsepy) and show their output logs each in their respective tab.

Written in Python and Qt.

MOD Panel \

Full-stack

A docker-compose setup for hosting an audio plugin building service targeting MOD devices, including pushing plugin builds into MOD units connected to the local network.

The official instance runs at builder.mod.audio and is intentionally kept as HTTP only, due to it needing to send requests into the local network (for connecting to MOD units over websockets).

A central, public-facing webserver actively listens for requests using socket.io and dispatches the actual build process to another (purely server-side) docker instance. The output of the build process is sent back to the main webserver, for keeping the page active (users might assume nothing is happening otherwise) and also as way to debug build failures.

Not projects I created, but have been developing and maintaining since 2016, including the addition of completely new features and porting to work on other operating systems.

The host is written in C, works with JACK and loads LV2 audio plugins. A TCP socket is used to communicate with mod-ui, the webserver written in python using tornado. This webserver also serves as frontend via HTML/JS/CSS tech.

An online version of the webserver can be played with at modbox.kx.studio, intentionally has no audio as this is meant to show case the frontend side of it. Use try.mod.audio for a version that does audio, running server-side and transmitted using WebRTC. (click "Enable streaming" on the top to start audio stream)

The mod-ui project is meant to be used on desktop systems, as part of my work for MOD Audio UG we never did a variant for mobile/touch devices.

Self hosting

Except for email and proprietary platforms, pretty much all my all social / online service usage is self-hosted. This includes stuff like data backups, video streaming (as creator/uploader) and website hosting.

I like Debian and Apache for hosting/serving web content, and know these fairly well at this point. When setting up self-hosted services I typically go with a systemd service (if the service is simple and self-contained), or rely on docker and/or docker-compose to keep them contained.

Here are a few interesting things I am hosting, that are not just static websites:

  • cardinal.kx.studio/live - Web-assembly build of Cardinal, using brotli-compressed assets and wasm-simd when supported on client side
  • Gitea - Nice and fast git hosting, can be compiled into a single monolithic binary (golang based)
  • Jitsi - For quick and easy calls with friends (specially handy now that the Jitsi main instance requires a user account)
  • Mastodon - ActivityPub based social media platform, complex setup with many services (come follow me!)
  • NextCloud - PHP based, easy to manage and update (enjoy the photos!)
  • PeerTube - Video hosting and streaming, complex setup that only officially supports nginx, but I got it to work with Apache anyway :)

Open-Source contributions

Here comes a list of projects I have contributed to, linking directly to either the list of commits from me or a pull-request if everything is contained within it. I am not a maintainer for any of these projects.

Implemented LV2 UI show interface, so the plugins could be used in plugins hosts that do not support UIs of type Gtk2.

Help in maintenance, specially in regards to compatibility with DPF changes.

Many fixes for better LV2 handling, crashes and event timing. Project seems abandoned now, and a new one appeared as continuation of it - github.com/psemiletov/drumrox.

Help in bug-fixing and testing, with the occasional feature request/proposal. DPF relies on this mini library/toolkit for all event handling, so makes sense to keep good relations with upstream.

Tweaks to code and build system for cross-platform support. Sadly still crashes under 64bit systems, but we can at least build it now.

Build system and plugin meta-data fixes, implemented high-dpi support.

Project setup for usage with DPF, general fixes.

Fixes to codebase to work as an audio plugin and implement plugin support through DPF.

Other work

Because there are other interesting things to show that do not really fit in other categories.

I have been packaging audio applications and plugins compatible with Debian-based systems for a long while, via the KXStudio project. As a way to make these packages as generic as possible (as in, to work on as many systems as possible with minimal dependencies) I also build pretty much all needed dependencies/libraries statically.

Complex GitHub CI actions specialized for building DPF-based audio plugins that use CMake or Makefile as their build system.

Serves as a demonstration for other CI actions I have setup in other projects, which look alike these ones.

Implementation of JACK as an FFmpeg output device, which I ended up not using in the end. Might still be useful as a base for someone else to (continue to) work on.

I have been maintaining the JACK2 project since 2017, bringing back macOS and Windows releases and making sure it can still run on top of modern systems.

As part of my work for MOD Audio, I have patched the Linux kernel build. Includes importing fixes from vendor specific kernel, doing some fixes of my own and where everything else fails add some "temporary" hacks to get things working.

Custom LV2 extensions for MOD Audio and KXStudio, extending both meta-data and C APIs. Includes the ttl definitions, making it suitable for parser and plugin validation tools.

Work-in-progress pull request for OBS, integrating parts of Carla Plugin Host directly in it. This allows to load LADSPA, LV2, VST2, VST3, CLAP and JSFX all in a nice single package, not to mention running in a separate process so plugins cannot crash OBS.

A collection of bash scripts for building a set of open-source libraries statically, for Linux, macOS, Windows and Web-assembly. Involves quite some patching as some libraries were not intended to be used statically, but we want static builds for audio plugins that typically need to be self-contained.

Also builds a set of LV2 plugins for macOS and Windows, packaged in an easy and convenient installer package.

Created out of the need to have the same set of libraries for many projects, which is tedious to maintain in several projects separately. Ended up being used for many of my projects, like Cardinal and Carla, and also JACK2 official builds.

carla's People

Contributors

alex-tee avatar atsampson avatar bencrossman avatar bleuzen avatar diovudau avatar evthefuture avatar falktx avatar fundamental avatar inthemorning avatar johnnynator avatar jpcima avatar luzpaz avatar marado avatar mxmilkiib avatar nekopsykose avatar nick87720z avatar nikage avatar pdesaulniers avatar redtide avatar rhetr avatar schnitzeltony avatar sebageek avatar simonvanderveldt avatar stefansm avatar terencode avatar trebmuh avatar valpackett avatar vimproved avatar xeonacid avatar yurivict avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

carla's Issues

equinox vst plugin: GUI does not show up randomly

Toggling equinox's GUI on/off/on in carla does not render a GUI everytime/fails randomly.
I tried up to 10s wait between GUI off-->GUI on (to be sure the dssi/vst/wine things get enough time to react).

Following gdb output has been made with carla git commit ebc1164 debug build. It shows two successful GUI starts, the third try was failing. The failing GUI start is visible at line 27 ff, there is some difference visible at line 33 ff.

carla_show_gui(0, true)
CarlaEngine::getPlugin(0) [count:1]
CarlaPluginGui::CarlaPluginGui(0x1c1c8a0, 0x3646788)
CarlaPluginGui::getContainerWinId()
VstPlugin::dispatcher(14:effEditOpen, 0, 0, 0x240020e, 0,000000)
VstPlugin::dispatcher(13:effEditGetRect, 0, 0, 0x7fffffffbf38, 0,000000)
CarlaPluginGui::setSize(546, 227)
CarlaPluginGui::setSizeSafeSlot(546, 227)
carla_show_gui(0, false)
CarlaEngine::getPlugin(0) [count:1]
VstPlugin::dispatcher(15:effEditClose, 0, 0, (nil), 0,000000)
CarlaPluginGui::closeEvent(0x7fffffffbe60)
CarlaPluginGui::~CarlaPluginGui()
carla_show_gui(0, true)
CarlaEngine::getPlugin(0) [count:1]
CarlaPluginGui::CarlaPluginGui(0x1c1c8a0, 0x3646788)
CarlaPluginGui::getContainerWinId()
VstPlugin::dispatcher(14:effEditOpen, 0, 0, 0x2400221, 0,000000)
VstPlugin::dispatcher(13:effEditGetRect, 0, 0, 0x7fffffffbf38, 0,000000)
CarlaPluginGui::setSize(546, 227)
CarlaPluginGui::setSizeSafeSlot(546, 227)
carla_show_gui(0, false)
CarlaEngine::getPlugin(0) [count:1]
VstPlugin::dispatcher(15:effEditClose, 0, 0, (nil), 0,000000)
CarlaPluginGui::closeEvent(0x7fffffffbe60)
CarlaPluginGui::~CarlaPluginGui()
carla_show_gui(0, true)
CarlaEngine::getPlugin(0) [count:1]
CarlaPluginGui::CarlaPluginGui(0x1c1c8a0, 0x3646788)
CarlaPluginGui::getContainerWinId()
VstPlugin::dispatcher(14:effEditOpen, 0, 0, 0x2400234, 0,000000)
VstPlugin::dispatcher(13:effEditGetRect, 0, 0, 0x7fffffffbf38, 0,000000)
carla_vst_audioMasterCallback(0x36620c0, 37:audioMasterCanDo, 0, 0, 0x7fffc53ce75b, 0,000000)
carla_vst_hostCanDo("sizeWindow")
carla_vst_audioMasterCallback(0x36620c0, 15:audioMasterSizeWindow, 1, 1, (nil), 0,000000)
CarlaPluginGui::setSize(1, 1)
CarlaPluginGui::setSize(1, 1)
CarlaPluginGui::setSizeSafeSlot(1, 1)
CarlaPluginGui::setSizeSafeSlot(1, 1)
carla_show_gui(0, false)
CarlaEngine::getPlugin(0) [count:1]
VstPlugin::dispatcher(15:effEditClose, 0, 0, (nil), 0,000000)
CarlaPluginGui::closeEvent(0x7fffffffbe60)
CarlaPluginGui::~CarlaPluginGui()

Hope this helps catching the issue.

request: more options for knob control

I'd like a modifier key that switches the scroll-wheel on knobs and parameters between being very subtle or giving a bigger change. Right now, it is very subtle, moves very slowly. There could be a preference setting for default being slow small change vs larger quicker change. Then the modifier key could be used to get the alternate behavior.

There should also be a preference to let the cursor click-and-drag be linear even for the circular knobs.

Bypass all plugings

Hi, In Ardour you can disable/bypass all plugins. Would be nice if I could do that with Carla too without really disabling (get no sound through) the plugin.

carla doesn't save

I tried opening a claudia/ladish project I was working on last night and when carla opened it was completely empty. I thought it was an error on my part so I loaded up carla with some plugins, saved it, saved claudia, closed carla and reopened it, and carla was still empty. I'm having this problem with both 12.04 machines I have.

[NSM] Carla hangs when closing in NSM (after you've edit something)

[NSM] Carla hangs when closing in NSM (after you've edit something)

Got SIGTERM -> Closing now
QProcess: Destroyed while process is still running.

Carla assertion failure: "standalone.engine != nullptr" in file CarlaStandalone.cpp, line 358
PatchCanvas::disconnectPorts(0) - unable to find connection ports
PatchCanvas::removePort(32) - Unable to find port to remove
PatchCanvas::disconnectPorts(1) - unable to find connection ports
PatchCanvas::removePort(31) - Unable to find port to remove
PatchCanvas::disconnectPorts(2) - unable to find connection ports
PatchCanvas::removePort(30) - Unable to find port to remove
PatchCanvas::removeGroup(4) - unable to find group to remove

Wish: mirroring of multiple instances of a plugin

I'd love to be able to have multiple instances of a plugin that are mirrored, i.e. to have any setting change to one also be matched in all the others.

This is not high priority, just a nice wish. It would be useful with my microtonal keyboard, but I could also appreciate keeping separate signal chains for certain parts of audio. There's various ways this could be used. For example, have multiple instances of a synth where some instances are fed to one signal chain and others are separate, where someone has two controllers, one for each synth. This way, they know one controller has one signal chain, the other has a different one. But they might want to match the base sound from the two synths.

Ok, that's a stretch maybe. I'm not sure how else this would be used, but it would be nice for the microtonal keyboard because it would enable all synths that can handle a +/- 1 pitch-bend to be effectively multi-channel.

So just a long-term dream idea. Maybe others will think of ways they'd use it too.

crash when adding multiple plugins of the same and then removing one

(16:00) ( nilsge) also: I've added three hexter. wanted to see one gui. That does not work right. I don't
see the gui anymore and also carla becomes really slow for a minute before doing nothing
with the gui then
(16:00) ( nilsge) CarlaPlugin::waitForOscGuiShow()
(16:00) ( nilsge) hexter_gtk starting (pid 7847)...
(16:00) ( nilsge) tried to delete one of the hexters. Segfault
(16:01) ( falktx) some plugins don't work nicely with variable buffer size
(16:02) ( nilsge) the plugin itself works. It is only a problem if I add two or more

wish: "replace" effect

If there were an option to replace one plugin with another, then it could automatically keep all the connections in JACK. This could be screwy if not all the same connections are available, but in many cases this would be very nice

carla session file format changed?

after the last update, my old session files are not properly used; only a subset of the plugins appears.

here an example that does not work anymore:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE CARLA-PROJECT>
<CARLA-PROJECT VERSION='0.5.0'>
 <!-- Pink Noise (full frequency range) -->
 <Plugin>
  <Info>
   <Type>LADSPA</Type>
   <Name>Pink Noise (full frequency range)</Name>
   <Label>pink_full_frequency</Label>
   <Binary>/usr/lib/ladspa/cmt.so</Binary>
   <UniqueID>1844</UniqueID>
  </Info>

  <Data>
No   <DryWet>1.000000</DryWet>
   <Volume>1.000000</Volume>
   <Balance-Left>-1.000000</Balance-Left>
   <Balance-Right>1.000000</Balance-Right>
  </Data>
 </Plugin>

 <!-- Calf Filter -->
 <Plugin>
  <Info>
   <Type>LV2</Type>
   <Name>Calf Filter</Name>
   <URI>http://calf.sourceforge.net/plugins/Filter</URI>
  </Info>

  <Data>
   <Active>Yes</Active>
   <DryWet>0.286000</DryWet>
   <Volume>1.000000</Volume>
   <Balance-Left>-1.000000</Balance-Left>
   <Balance-Right>1.000000</Balance-Right>

   <Parameter>
    <index>0</index>
    <name>Frequency</name>
    <symbol>freq</symbol>
    <value>44.382702</value>
   </Parameter>

   <Parameter>
    <index>1</index>
    <name>Resonance</name>
    <symbol>res</symbol>
    <value>32.000000</value>
   </Parameter>

   <Parameter>
    <index>2</index>
    <name>Mode</name>
    <symbol>mode</symbol>
    <value>11.000000</value>
   </Parameter>

   <Parameter>
    <index>3</index>
    <name>Inertia</name>
    <symbol>inertia</symbol>
    <value>20.000000</value>
   </Parameter>
  </Data>
 </Plugin>

 <!-- Calf Filter -->
 <Plugin>
  <Info>
   <Type>LV2</Type>
   <Name>Calf Filter (2)</Name>
   <URI>http://calf.sourceforge.net/plugins/Filter</URI>
  </Info>

  <Data>
   <Active>Yes</Active>
   <DryWet>0.424000</DryWet>
   <Volume>1.000000</Volume>
   <Balance-Left>-1.000000</Balance-Left>
   <Balance-Right>1.000000</Balance-Right>

   <Parameter>
    <index>0</index>
    <name>Frequency</name>
    <symbol>freq</symbol>
    <value>67.898399</value>
   </Parameter>

   <Parameter>
    <index>1</index>
    <name>Resonance</name>
    <symbol>res</symbol>
    <value>32.000000</value>
   </Parameter>

   <Parameter>
    <index>2</index>
    <name>Mode</name>
    <symbol>mode</symbol>
    <value>11.000000</value>
   </Parameter>

   <Parameter>
    <index>3</index>
    <name>Inertia</name>
    <symbol>inertia</symbol>
    <value>20.000000</value>
   </Parameter>
  </Data>
 </Plugin>

 <!-- Calf Filter -->
 <Plugin>
  <Info>
   <Type>LV2</Type>
   <Name>Calf Filter (3)</Name>
   <URI>http://calf.sourceforge.net/plugins/Filter</URI>
  </Info>

  <Data>
   <Active>Yes</Active>
   <DryWet>0.495000</DryWet>
   <Volume>1.000000</Volume>
   <Balance-Left>-1.000000</Balance-Left>
   <Balance-Right>1.000000</Balance-Right>

   <Parameter>
    <index>0</index>
    <name>Frequency</name>
    <symbol>freq</symbol>
    <value>85.939201</value>
   </Parameter>

   <Parameter>
    <index>1</index>
    <name>Resonance</name>
    <symbol>res</symbol>
    <value>32.000000</value>
   </Parameter>

   <Parameter>
    <index>2</index>
    <name>Mode</name>
    <symbol>mode</symbol>
    <value>11.000000</value>
   </Parameter>

   <Parameter>
    <index>3</index>
    <name>Inertia</name>
    <symbol>inertia</symbol>
    <value>13.148800</value>
   </Parameter>
  </Data>
 </Plugin>

 <!-- Calf Filter -->
 <Plugin>
  <Info>
   <Type>LV2</Type>
   <Name>Calf Filter (4)</Name>
   <URI>http://calf.sourceforge.net/plugins/Filter</URI>
  </Info>

  <Data>
   <Active>Yes</Active>
   <DryWet>1.000000</DryWet>
   <Volume>1.000000</Volume>
   <Balance-Left>-1.000000</Balance-Left>
   <Balance-Right>1.000000</Balance-Right>

   <Parameter>
    <index>0</index>
    <name>Frequency</name>
    <symbol>freq</symbol>
    <value>20000.000000</value>
   </Parameter>

   <Parameter>
    <index>1</index>
    <name>Resonance</name>
    <symbol>res</symbol>
    <value>1.765200</value>
   </Parameter>

   <Parameter>
    <index>2</index>
    <name>Mode</name>
    <symbol>mode</symbol>
    <value>0.000000</value>
   </Parameter>

   <Parameter>
    <index>3</index>
    <name>Inertia</name>
    <symbol>inertia</symbol>
    <value>20.000000</value>
   </Parameter>
  </Data>
 </Plugin>

 <!-- Calf Equalizer 5 Band -->
 <Plugin>
  <Info>
   <Type>LV2</Type>
   <Name>Calf Equalizer 5 Band</Name>
   <URI>http://calf.sourceforge.net/plugins/eq5</URI>
  </Info>

  <Data>
   <Active>Yes</Active>
   <DryWet>1.000000</DryWet>
   <Volume>1.000000</Volume>
   <Balance-Left>-1.000000</Balance-Left>
   <Balance-Right>1.000000</Balance-Right>

   <Parameter>
    <index>0</index>
    <name>Bypass</name>
    <symbol>bypass</symbol>
    <value>0.000000</value>
   </Parameter>

   <Parameter>
    <index>1</index>
    <name>Input Gain</name>
    <symbol>level_in</symbol>
    <value>1.000000</value>
   </Parameter>

   <Parameter>
    <index>2</index>
    <name>Output Gain</name>
    <symbol>level_out</symbol>
    <value>1.000000</value>
   </Parameter>

   <Parameter>
    <index>11</index>
    <name>LS Active</name>
    <symbol>ls_active</symbol>
    <value>1.000000</value>
   </Parameter>

   <Parameter>
    <index>12</index>
    <name>Level L</name>
    <symbol>ls_level</symbol>
    <value>1.647180</value>
   </Parameter>

   <Parameter>
    <index>13</index>
    <name>Freq L</name>
    <symbol>ls_freq</symbol>
    <value>108.879997</value>
   </Parameter>

   <Parameter>
    <index>14</index>
    <name>HS Active</name>
    <symbol>hs_active</symbol>
    <value>1.000000</value>
   </Parameter>

   <Parameter>
    <index>15</index>
    <name>Level H</name>
    <symbol>hs_level</symbol>
    <value>3.204280</value>
   </Parameter>

   <Parameter>
    <index>16</index>
    <name>Freq H</name>
    <symbol>hs_freq</symbol>
    <value>5179.589844</value>
   </Parameter>

   <Parameter>
    <index>17</index>
    <name>F1 Active</name>
    <symbol>p1_active</symbol>
    <value>1.000000</value>
   </Parameter>

   <Parameter>
    <index>18</index>
    <name>Level 1</name>
    <symbol>p1_level</symbol>
    <value>0.716978</value>
   </Parameter>

   <Parameter>
    <index>19</index>
    <name>Freq 1</name>
    <symbol>p1_freq</symbol>
    <value>338.829010</value>
   </Parameter>

   <Parameter>
    <index>20</index>
    <name>Q 1</name>
    <symbol>p1_q</symbol>
    <value>2.290870</value>
   </Parameter>

   <Parameter>
    <index>21</index>
    <name>F2 Active</name>
    <symbol>p2_active</symbol>
    <value>1.000000</value>
   </Parameter>

   <Parameter>
    <index>22</index>
    <name>Level 2</name>
    <symbol>p2_level</symbol>
    <value>0.384219</value>
   </Parameter>

   <Parameter>
    <index>23</index>
    <name>Freq 2</name>
    <symbol>p2_freq</symbol>
    <value>1294.900024</value>
   </Parameter>

   <Parameter>
    <index>24</index>
    <name>Q 2</name>
    <symbol>p2_q</symbol>
    <value>2.570400</value>
   </Parameter>

   <Parameter>
    <index>25</index>
    <name>F3 Active</name>
    <symbol>p3_active</symbol>
    <value>1.000000</value>
   </Parameter>

   <Parameter>
    <index>26</index>
    <name>Level 3</name>
    <symbol>p3_level</symbol>
    <value>1.961560</value>
   </Parameter>

   <Parameter>
    <index>27</index>
    <name>Freq 3</name>
    <symbol>p3_freq</symbol>
    <value>2844.840088</value>
   </Parameter>

   <Parameter>
    <index>28</index>
    <name>Q 3</name>
    <symbol>p3_q</symbol>
    <value>0.707946</value>
   </Parameter>
  </Data>
 </Plugin>
</CARLA-PROJECT>

wish: Work around jack clients that cannot rename clients

Can you offer a workaround to rename jack clients?
If it disconnects, fine with me, if it requires a re-start, fine with me. If it is only allowed on plugin insert: Fine with me also.

Everything is better than 16 similar named instances of the same plugin.

Cant install Carla

install -m 644 resources/scalable/carla-control.svg /usr/local/share/icons/hicolor/scalable/apps/

Install binaries

install -m 755
source/backend/.so
source/bridges/carla-bridge-

source/discovery/carla-discovery-*
/usr/local/lib/carla/
install: cannot stat `source/bridges/carla-bridge-': No such file or directory
make: *
* [install] Error 1

request: filter out repeated plugins with type preferences

For example, allow user to specify LV2 as preferred, then hide all duplicates where the same plugin is available in other forms, so only LV2 version would be shown in list, but where there is no LV2 then the next preferred type will be shown.

new GUI has font colors not respecting system setting

Here's a screenshot where the font color in Carla is staying the same as the dark scheme even though I've set otherwise the system colors. The title of the plugin is unreadable.

Uploading Carla-bad-font-color.png . . .

well, darn, it won't upload here, dunno what's wrong. Anyway, it's white text on offwhite background

It's not a problem if I turn off the PRO theme, but I like the PRO theme otherwise, so I'd like the bug fixed

Build fail on Arch

Attempting to build on Arch(x86) fails for me at the linuxsampler plugin:

g++ LinuxSamplerPlugin.cpp -Wall -Wextra -fPIC -O2 -ffast-math -mtune=generic -msse ->mfpmath=sse -DNDEBUG -std=gnu++0x -march=i686 -mtune=generic -O2 -pipe -fstack->protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -DVESTIGE_HEADER ->fvisibility=hidden -fPIC -I. -I.. -I../../includes -I../../libs -I../../utils -DWANT_NATIVE ->DWANT_LADSPA -DWANT_DSSI -DWANT_LV2 -DWANT_VST -DWANT_FLUIDSYNTH ->DWANT_LINUXSAMPLER -DWANT_OPENGL -DWANT_AUDIOFILE -DWANT_MIDIFILE ->DWANT_ZYNADDSUBFX -DWANT_ZYNADDSUBFX_UI -DQT_SHARED -I/usr/include/qt4 >-I/usr/include/qt4/QtGui -I/usr/include/qt4 -I/usr/include/qt4/QtXml -I/usr/include/qt4 ->I/usr/include/qt4/QtCore -c -o LinuxSamplerPlugin.cpp.o
In file included from /usr/include/linuxsampler/engines/Engine.h:27:0,
from ../../includes/linuxsampler/EngineFactory.h:24,
from LinuxSamplerPlugin.cpp:22:
/usr/include/linuxsampler/common/global.h:72:13: error: #if with no expression

if IS_CPP11

        ^

make[2]: *** [LinuxSamplerPlugin.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory /data/AUR/i686/carla-git/src/carla-build/source/backend/plugin' make[1]: *** [all] Error 2 make[1]: Leaving directory/data/AUR/i686/carla-git/src/carla-build/source/backend'
make: *** [backend] Error 2

I should add that I am running a patched version of linuxsampler-svn to reduce the channel count of the LV2 plugin to stereo. Is this the likely cause of this failure?

carla crashes on drowaudio-flanger VST plugin

Happens with commit 4f61f34.
Steps to reproduce:
start carla (regular build), add drowaudio-flanger VST plugin.

Sometimes the terminal renders this crash info (mostly it only tells segmentation fault):

robert@CENDRINE ~/install/CARLA-GIT/Carla $ python3 source/carla.py
*** glibc detected *** python3: free(): invalid pointer: 0x0000000004a159e0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7fa16580eb96]
/usr/lib/vst/drowaudio-flanger.so(+0x58a86)[0x7fa140381a86]
/usr/lib/vst/drowaudio-flanger.so(+0x61e5d)[0x7fa14038ae5d]
/usr/lib/vst/drowaudio-flanger.so(+0x5e8d3)[0x7fa1403878d3]
/usr/lib/vst/drowaudio-flanger.so(+0x5e9cd)[0x7fa1403879cd]
/usr/lib/vst/drowaudio-flanger.so(+0x61498)[0x7fa14038a498]
/home/robert/install/CARLA-GIT/Carla/source/backend/libcarla_standalone.so(+0xaa617)[0x7fa1518ba617]
/home/robert/install/CARLA-GIT/Carla/source/backend/libcarla_standalone.so(+0xa3eb3)[0x7fa1518b3eb3]
/home/robert/install/CARLA-GIT/Carla/source/backend/libcarla_standalone.so(+0x41f12)[0x7fa151851f12]
/home/robert/install/CARLA-GIT/Carla/source/backend/libcarla_standalone.so(carla_add_plugin+0x69)[0x7fa151845399]
/usr/lib/x86_64-linux-gnu/libffi.so.6(ffi_call_unix64+0x4c)[0x7fa15fe5ca14]
/usr/lib/x86_64-linux-gnu/libffi.so.6(ffi_call+0x1e5)[0x7fa15fe5c435]
/usr/lib/python3.2/lib-dynload/_ctypes.cpython-32mu.so(_ctypes_callproc+0x4d2)[0x7fa15efa32f2]
/usr/lib/python3.2/lib-dynload/_ctypes.cpython-32mu.so(+0xaaa2)[0x7fa15efa3aa2]
python3(PyObject_Call+0x37)[0x41ed77]
python3(PyEval_EvalFrameEx+0x465c)[0x45c17c]
python3(PyEval_EvalFrameEx+0x41b7)[0x45bcd7]
python3(PyEval_EvalFrameEx+0x41b7)[0x45bcd7]
python3(PyEval_EvalCodeEx+0x17d)[0x45fedd]
... lots of stuff ...

lv2 plugins do not load

an error window appears, no output on the terminal where carla was started. none of the lv2 plugins loads, calf or otherwise

zynaddsubfx plugin: no UI update on midi program change

zyn's UI does not update when a midi program change is sent by an attached midi controller (in my case: jack-keyboard).
To reflect its current sound program, the zyn part number selector has to be set forth and back manually.

Wish: Copy/Clone plugin

It would be nice if you could copy or clone an existing plugin. So you can mass click something and insert it multiple times. Copy settings but after that you can change any plugin individually.

[wish] Gui open at close, will open the GUI at open

Especially when you use plugins as standalone apps in Carla, it would be nice if you could close Carla with the plugin GUI open and that Carla opens the same session with that GUI open. Then you've direct access to the GUI like you would when you use a standalone app.

memory leaks

steps to reproduce:

start claudia, make new studio, start studio, add carla, in carla add a few copies of calf eq 12 band. watch top.

this uses (on my oldish macbook) 15% cpu (why? no audio connection is active!) and memory usage climbs by 0.1% every few seconds.

carla 0.5.0, kxstudio 12.04,

uname -a
Linux NMBU 3.2.0-35-lowlatency #34-Ubuntu SMP PREEMPT Tue Dec 18 18:12:15 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

Keybinding to connect two ports in the patchbay

If you don't like mousing around, or using a feeble touchpad, a keybinding is good to connect and disconnect two ports.

Example:
Press with the mouse on one port (it is highlighted, that means the patchbay has a currently active state to recall).
Go to another port, hold down a key (e.g. shift), single click again to connect. If there is already a connection, disconnect.

Alternative:instead of shift+click just use the middle mouse button.

This is also a request for the standalone Cadence patchbay

request: refresh by identifying only changes

instead of reloading all plugins, discover only new and changed

Also, would be really nice if there could be an indication or list of what's new so the user notices what is updated

Carla segfault with internal zynaddsubfx plugin - UI issue ?

Carla git commit 06753fc segfaults on following these steps:

  1. open Carla (debug build)
  2. add native zynaddsubfx plugin
  3. open zyn's GUI via Carla button
  4. change zyn's part number e.g from 1 to 2
  5. close zyn's GUI via Carla button
  6. open zyn's GUI again via Carla button --> Carla segfaults
    Packaged Carla version 1:0.5.0+git20130319-0~precise2 shows a crash/disappears from screen on step 6.
    Environment:
    kernel 3.2.0-38-lowlatency #40-Ubuntu SMP PREEMPT x86_64, linux mint 13 "maya" cinnamon on Intel Core I7 1.73GHz, upgraded by kxstudio-repos
    gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
    System patch level: dist-upgraded We 20 March 2013 06:15 CET,
    Carla setup:
    Main/Misc: Disable processing checks while scanning: DISABLED
    GUI refresh interval: 60ms
    Engine: Core: JACK/Single Client/800
    GUIs: OSC timeout 6000ms
    Advanced: All three options DISABLED

Backtrace:
CarlaEngine::getPlugin(0) [count:1]
CarlaEngine::osc_send_control_set_parameter_value(0, PARAMETER_ACTIVE, 1)
carla_show_gui(0, true)
CarlaEngine::getPlugin(0) [count:1]
Theme set to Cairo
Theme set to Cairo
carla_show_gui(0, false)
CarlaEngine::getPlugin(0) [count:1]
carla_show_gui(0, true)
CarlaEngine::getPlugin(0) [count:1]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffcc9f3700 (LWP 5035)]
0x00007ffff671959c in free () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) bt
#0 0x00007ffff671959c in free () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007fffde8298f5 in Fl_Group::init_sizes() ()

from /usr/lib/x86_64-linux-gnu/libntk.so.1
#2 0x00007fffde82986d in Fl_Group::Fl_Group(int, int, int, int, char const*) ()

from /usr/lib/x86_64-linux-gnu/libntk.so.1
#3 0x00007fffde866c9d in Fl_Window::Fl_Window(int, int, int, int, char const*) ()

from /usr/lib/x86_64-linux-gnu/libntk.so.1
#4 0x00007fffe150e058 in NioUI::NioUI (this=0x7fffc8e34900)

at zynaddsubfx/UI/NioUI.cpp:17

#5 0x00007fffe15583bd in MasterUI::MasterUI (this=0x7fffc8e345a0, master_=0x3f4c900,

exitprogram_=0x3f4c8d8) at zynaddsubfx/UI/MasterUI.cpp:2360

#6 0x00007fffe14a2fee in ZynAddSubFxPlugin::ZynThread::run (this=0x3f4c868)

at zynaddsubfx.cpp:434

#7 0x00007fffe1443db9 in CarlaThread::handleRoutine (this=0x3f4c868)

at ../../utils/CarlaThread.hpp:229

#8 0x00007fffe1443ddb in CarlaThread::_pthreadRoutine (this=0x3f4c868)

at ../../utils/CarlaThread.hpp:246

#9 0x00007ffff7bc4e9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#10 0x00007ffff6789cbd in clone () from /lib/x86_64-linux-gnu/libc.so.6
#11 0x0000000000000000 in ?? ()

(gdb)

FalkTX: I hope this helps. Feel free to ask for more info if you see me on #kxstudio.

support tempo-sync with JACK

Plugins that don't even necessarily do this themselves should still be made to work in Carla.

Carla could simply have a way to make a parameter be synced in some relative way to the JACK tempo. This is especially useful for things like echo / delay.

carla freezes when loading internal zynaddsubfx twice

Carla freezes when loading internal zynaddsubfx plugin twice.
This does not happen with debug builds of carla, only regular builds show the freeze.
Carla behaviour is normal with other plugins (tested: calf monosynth dssi, calf fluidsynth)
Tested and affected git commits:
b7f51a5
a4fc3b7

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.