Giter Site home page Giter Site logo

dssi-vst'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.

dssi-vst's People

Contributors

cannam avatar falktx avatar kramlie 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

dssi-vst's Issues

releases?

I know this software is somewhat in limbo, however, it would be nice to have a release again, if possible.
I'm currently maintaining the package for Arch and the only upstream tarball I have is still at http://www.breakfastquay.com/dssi-vst/ in version 0.9.2 (which is quite old).

@falkTX: Given the info in #8, it might be a better idea for me to drop the package though and promote carla to [community]! :)

Error while compiling

When I try to compile this on linux mint 18.2 I get the error:

wineg++ -m32 dssi-vst-scanner.cpp -O2 -ffast-math -fvisibility=hidden -fPIC -mtune=generic -msse -Wall -Ivestige  -I/usr/local/include -I/usr/include/alsa -O0 -c -o dssi-vst-scanner.wine.o
dssi-vst-scanner.cpp:25:21: fatal error: windows.h: No such file or directory
compilation terminated.
winegcc: g++ failed
Makefile:78: recipe for target 'dssi-vst-scanner.wine.o' failed
make: *** [dssi-vst-scanner.wine.o] Error 2

Any ideas about what might be causing this?
Thanks

dssi-vst status

Hi falkTX,
Thanks for all your audio linux work, and sorry to create an issue like this, but just wanted to contact you for info. I'm trying to create a usable DAW with Ubuntu realtime/JACK/Ardour3/Hydrogen/Claudia/TAL-Noizemaker/Calf, with some excellent results, but also plagued by instability with Ardour/ladish/claudia. I'm now investigating the options for running Windows VSTs but docs on the web are outdated and confusing. As far as I can tell your dssi-vst + carla solution is currently the primary choice for running Win VSTs, but some of your forum comments (again maybe outdated) suggest that it's not worth trying. If dssi-vst and carla are in a good state (I know you're committing code to carla at the moment) how do I actually use it? Or does carla handle use of the wrapper directly? A few lines of Howto would be greatly appreciated.
Once again, much kudos for all your contributions to the GPL audio world, it is outstanding.
Cheers,
Dan

Weird program names

Hi,

I got weird program names likes []3. Can you check that you don't read uninitialized memory?

Thanks.

Add "wine-staging-compat" to possible dependency on package

dssi-vst packages from the KXStudio repository (as well as the carla-bridge-wine32:i386 package) will not update if wine-staging is installed instead of normal wine. This leads to broken functionality, with the VSTs randomly crashing on startup. The solution to this is to add "wine-staging-compat" to the list of alternatives to the "wine" package. The "wine-staging-compat" does symlinks to ensure wine-staging is used by other packages, as well as the user as a normal wine build with no need for extra configuration.

Missing Dependency?

Trying to MAKE the program and I get error "/usr/bin/ls: cannot find -ljack"
As far as I can tell, I have all jack dev libraries installed (amd64 and i386)
What dependency could I be missing?

Voxengo SPAN

I tried running subj with vsthost, but I am not getting any spectrum in the gui. Otherwise gui seems to be working. Is there anything I have to do with wine configuration? I did connect output from my daw to input of vsthost_span. I succeeded to connect my daw to calf tools, so I know output is being sent.
Using Ubuntu 15.04, wine 1.6.2, dssi-vst from Ubuntu repo 0.9.2
Is vsthost supposed to work in such scenario?

Valgrind issues

Hi, I ran dssi-vst through renoise, and I got various issues:

==6942== Mismatched free() / delete / delete []
==6942==    at 0x4C2A86C: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6942==    by 0x1EC194EF: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0x1EC19628: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0xACE2BE: ??? (in /usr/bin/renoise)
==6942==    by 0xAB3CF3: ??? (in /usr/bin/renoise)
==6942==    by 0xACE6AA: ??? (in /usr/bin/renoise)
==6942==    by 0xAF750A: ??? (in /usr/bin/renoise)
==6942==    by 0xBAD1CC: ??? (in /usr/bin/renoise)
==6942==    by 0xAFD2A7: ??? (in /usr/bin/renoise)
==6942==    by 0x567630: ??? (in /usr/bin/renoise)
==6942==    by 0xAFB2C9: ??? (in /usr/bin/renoise)
==6942==    by 0xC30A4A: ??? (in /usr/bin/renoise)
==6942==  Address 0xeeb3fa0 is 0 bytes inside a block of size 288 alloc'd
==6942==    at 0x4C2B307: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6942==    by 0x1EC197E1: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0x1EC19F0D: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0xACF72B: ??? (in /usr/bin/renoise)
==6942==    by 0xACFF02: ??? (in /usr/bin/renoise)
==6942==    by 0xAB51E1: ??? (in /usr/bin/renoise)
==6942==    by 0xABCAC3: ??? (in /usr/bin/renoise)
==6942==    by 0xABEA18: ??? (in /usr/bin/renoise)
==6942==    by 0xAFAD10: ??? (in /usr/bin/renoise)
==6942==    by 0xAFB03E: ??? (in /usr/bin/renoise)
==6942==    by 0xC33EF6: ??? (in /usr/bin/renoise)
==6942==    by 0x467592: ??? (in /usr/bin/renoise)
==6942== 
==6942== Mismatched free() / delete / delete []
==6942==    at 0x4C2A86C: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6942==    by 0x1EC194F8: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0x1EC19628: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0xACE2BE: ??? (in /usr/bin/renoise)
==6942==    by 0xAB3CF3: ??? (in /usr/bin/renoise)
==6942==    by 0xACE6AA: ??? (in /usr/bin/renoise)
==6942==    by 0xAF750A: ??? (in /usr/bin/renoise)
==6942==    by 0xBAD1CC: ??? (in /usr/bin/renoise)
==6942==    by 0xAFD2A7: ??? (in /usr/bin/renoise)
==6942==    by 0x567630: ??? (in /usr/bin/renoise)
==6942==    by 0xAFB2C9: ??? (in /usr/bin/renoise)
==6942==    by 0xC30A4A: ??? (in /usr/bin/renoise)
==6942==  Address 0x8b75820 is 0 bytes inside a block of size 144 alloc'd
==6942==    at 0x4C2B307: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6942==    by 0x1EC1980E: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0x1EC19F0D: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0xACF72B: ??? (in /usr/bin/renoise)
==6942==    by 0xACFF02: ??? (in /usr/bin/renoise)
==6942==    by 0xAB51E1: ??? (in /usr/bin/renoise)
==6942==    by 0xABCAC3: ??? (in /usr/bin/renoise)
==6942==    by 0xABEA18: ??? (in /usr/bin/renoise)
==6942==    by 0xAFAD10: ??? (in /usr/bin/renoise)
==6942==    by 0xAFB03E: ??? (in /usr/bin/renoise)
==6942==    by 0xC33EF6: ??? (in /usr/bin/renoise)
==6942==    by 0x467592: ??? (in /usr/bin/renoise)
==6942== 
==6942== Mismatched free() / delete / delete []
==6942==    at 0x4C2A86C: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6942==    by 0x1EC19501: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0x1EC19628: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0xACE2BE: ??? (in /usr/bin/renoise)
==6942==    by 0xAB3CF3: ??? (in /usr/bin/renoise)
==6942==    by 0xACE6AA: ??? (in /usr/bin/renoise)
==6942==    by 0xAF750A: ??? (in /usr/bin/renoise)
==6942==    by 0xBAD1CC: ??? (in /usr/bin/renoise)
==6942==    by 0xAFD2A7: ??? (in /usr/bin/renoise)
==6942==    by 0x567630: ??? (in /usr/bin/renoise)
==6942==    by 0xAFB2C9: ??? (in /usr/bin/renoise)
==6942==    by 0xC30A4A: ??? (in /usr/bin/renoise)
==6942==  Address 0x8a64ea0 is 0 bytes after a block of size 0 alloc'd
==6942==    at 0x4C2B307: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6942==    by 0x1EC19865: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0x1EC19F0D: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0xACF72B: ??? (in /usr/bin/renoise)
==6942==    by 0xACFF02: ??? (in /usr/bin/renoise)
==6942==    by 0xAB51E1: ??? (in /usr/bin/renoise)
==6942==    by 0xABCAC3: ??? (in /usr/bin/renoise)
==6942==    by 0xABEA18: ??? (in /usr/bin/renoise)
==6942==    by 0xAFAD10: ??? (in /usr/bin/renoise)
==6942==    by 0xAFB03E: ??? (in /usr/bin/renoise)
==6942==    by 0xC33EF6: ??? (in /usr/bin/renoise)
==6942==    by 0x467592: ??? (in /usr/bin/renoise)
==6942== 
==6942== Mismatched free() / delete / delete []
==6942==    at 0x4C2A86C: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6942==    by 0x1EC1950A: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0x1EC19628: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0xACE2BE: ??? (in /usr/bin/renoise)
==6942==    by 0xAB3CF3: ??? (in /usr/bin/renoise)
==6942==    by 0xACE6AA: ??? (in /usr/bin/renoise)
==6942==    by 0xAF750A: ??? (in /usr/bin/renoise)
==6942==    by 0xBAD1CC: ??? (in /usr/bin/renoise)
==6942==    by 0xAFD2A7: ??? (in /usr/bin/renoise)
==6942==    by 0x567630: ??? (in /usr/bin/renoise)
==6942==    by 0xAFB2C9: ??? (in /usr/bin/renoise)
==6942==    by 0xC30A4A: ??? (in /usr/bin/renoise)
==6942==  Address 0x8b1a020 is 0 bytes inside a block of size 16 alloc'd
==6942==    at 0x4C2B307: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6942==    by 0x1EC198A0: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0x1EC19F0D: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0xACF72B: ??? (in /usr/bin/renoise)
==6942==    by 0xACFF02: ??? (in /usr/bin/renoise)
==6942==    by 0xAB51E1: ??? (in /usr/bin/renoise)
==6942==    by 0xABCAC3: ??? (in /usr/bin/renoise)
==6942==    by 0xABEA18: ??? (in /usr/bin/renoise)
==6942==    by 0xAFAD10: ??? (in /usr/bin/renoise)
==6942==    by 0xAFB03E: ??? (in /usr/bin/renoise)
==6942==    by 0xC33EF6: ??? (in /usr/bin/renoise)
==6942==    by 0x467592: ??? (in /usr/bin/renoise)
==6942== 
==6942== Mismatched free() / delete / delete []
==6942==    at 0x4C2A86C: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6942==    by 0x1EC19628: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0xACE2BE: ??? (in /usr/bin/renoise)
==6942==    by 0xAB3CF3: ??? (in /usr/bin/renoise)
==6942==    by 0xACE6AA: ??? (in /usr/bin/renoise)
==6942==    by 0xAF750A: ??? (in /usr/bin/renoise)
==6942==    by 0xBAD1CC: ??? (in /usr/bin/renoise)
==6942==    by 0xAFD2A7: ??? (in /usr/bin/renoise)
==6942==    by 0x567630: ??? (in /usr/bin/renoise)
==6942==    by 0xAFB2C9: ??? (in /usr/bin/renoise)
==6942==    by 0xC30A4A: ??? (in /usr/bin/renoise)
==6942==    by 0xC30A96: ??? (in /usr/bin/renoise)
==6942==  Address 0xed5dc70 is 0 bytes inside a block of size 8 alloc'd
==6942==    at 0x4C2B307: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6942==    by 0x1EC198DB: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0x1EC19F0D: ??? (in /usr/lib/dssi/dssi-vst.so)
==6942==    by 0xACF72B: ??? (in /usr/bin/renoise)
==6942==    by 0xACFF02: ??? (in /usr/bin/renoise)
==6942==    by 0xAB51E1: ??? (in /usr/bin/renoise)
==6942==    by 0xABCAC3: ??? (in /usr/bin/renoise)
==6942==    by 0xABEA18: ??? (in /usr/bin/renoise)
==6942==    by 0xAFAD10: ??? (in /usr/bin/renoise)
==6942==    by 0xAFB03E: ??? (in /usr/bin/renoise)
==6942==    by 0xC33EF6: ??? (in /usr/bin/renoise)
==6942==    by 0x467592: ??? (in /usr/bin/renoise)
==6942== 

Lauching programmatically a VST plugin with a preset

HI,
At first i would like to thanks you about your work on dssi-vst which works surprisingly well.

I'm trying to automate the launch of the IK Multimedia TRacKS 3 VST plugin with a particular preset (or "a particular configured state" in other words) in a deployment bash script.
Using dssi-vst and the command-line tool "jack-dssi-host" or "vsthost" i successfully run it but i can't figure how to make it loading a preset programmatically.

I've banged my head around and learned a lot about the DSSI API and it's integrated OSC server.
I tried to send some OSC "/configure", "/program" or "/command" using dssi_osc_send from the dssi-utils package without any success.
Also, about "/configure" requests I have no idea which key/value pairs are available if there are.

Can i do it this way ?

At the same time i tried "carla" with a simple project which includes this VST Plugin.
I discovered by inspecting the dot carxp project file a "chunk" xml tag with BASE64 encoded xml which seems to describe well the state of the plugin i would like it to be.

Is there a way to inject this "chunk" on the plugin by making an osc request ?

If not, is there any other way to do it programmatically ?

Thank's you in advance

Realtime issues in some of daw

i know i am pretty late with that issue

http://forum.renoise.com/index.php?/topic/29279-asking-before-rejecting-non-rt-ladspadssi-plugins

solution found adding

ldesc->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE;

after line

ldesc->Label = label;

in dssi-vst.cpp of dssi-vst sources.

This stuff forces all vst being RT. It seems nice solution since all vsts should be realtime. I tend to recompile dssi-vst all the time cause of it. Dunno if it might to be added here, just want to get your attention to that problem.

Crash in Carla

This plugin crash in Carla but not in Festige. Using dssi-vst from kstudio ppa.

DSSIVSTPluginInstance::DSSIVSTPluginInstance(TAL-Elek7ro-II-x86.dll) construction complete
client sized shm to 1024
sized shm to 1024, 0 inputs and 2 outputs
wine: Unhandled page fault on read access to 0x00000000 at address 0x10008e80 (thread 0009), starting debugger...
Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x10008e80).
Register dump:
 CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b
 EIP:10008e80 ESP:0033fc2c EBP:0033fda8 EFLAGS:00010206(  R- --  I   - -P- )
 EAX:003ca5b0 EBX:7ec34ff4 ECX:00000000 EDX:1008ebb4
 ESI:003f5780 EDI:0033fd44
Stack dump:
0x0033fc2c:  00000000 1000bcae 00000013 1000c88e
0x0033fc3c:  00000013 00000000 00000000 00000000
0x0033fc4c:  00000000 003c4be8 000001f4 1c67e600
0x0033fc5c:  1000b998 00000013 00000000 00000000
0x0033fc6c:  00000000 00000000 7d26c9d0 7ec29af7
0x0033fc7c:  003c4c08 00000013 00000000 00000000
000c: sel=0067 base=00000000 limit=00000000 16-bit r-x
Backtrace:
=>0 0x10008e80 in tal-elek7ro-ii-x86 (+0x8e80) (0x0033fda8)
  1 0x7ec2f14f main+0xae() in dssi-vst-server (0x0033fe28)
  2 0x7ec2f08c in dssi-vst-server (+0xf08b) (0x0033fe70)
  3 0x7b859ddc call_process_entry+0xb() in kernel32 (0x0033fe88)
  4 0x7b85b04f in kernel32 (+0x4b04e) (0x0033fec8)
  5 0x7bc71d90 call_thread_func_wrapper+0xb() in ntdll (0x0033fed8)
  6 0x7bc7486d call_thread_func+0x7c() in ntdll (0x0033ffa8)
  7 0x7bc71d6e RtlRaiseException+0x21() in ntdll (0x0033ffc8)
  8 0x7bc49f4e call_dll_entry_point+0x61d() in ntdll (0x0033ffe8)
0x10008e80: movl    0x0(%ecx),%edx
Modules:
Module  Address         Debug info  Name (67 modules)
PE  10000000-101c2000   Export          tal-elek7ro-ii-x86
ELF 7b800000-7ba29000   Dwarf           kernel32<elf>
  \-PE  7b810000-7ba29000   \               kernel32
ELF 7bc00000-7bcc3000   Dwarf           ntdll<elf>
  \-PE  7bc10000-7bcc3000   \               ntdll
ELF 7bf00000-7bf04000   Deferred        <wine-loader>
ELF 7dd69000-7dd9d000   Deferred        uxtheme<elf>
  \-PE  7dd70000-7dd9d000   \               uxtheme
ELF 7dd9d000-7de13000   Deferred        rpcrt4<elf>
  \-PE  7ddb0000-7de13000   \               rpcrt4
ELF 7de13000-7df1b000   Deferred        ole32<elf>
  \-PE  7de30000-7df1b000   \               ole32
ELF 7df1b000-7e014000   Deferred        comctl32<elf>
  \-PE  7df20000-7e014000   \               comctl32
ELF 7e014000-7e07e000   Deferred        shlwapi<elf>
  \-PE  7e020000-7e07e000   \               shlwapi
ELF 7e07e000-7e291000   Deferred        shell32<elf>
  \-PE  7e090000-7e291000   \               shell32
ELF 7e291000-7e297000   Deferred        libxfixes.so.3
ELF 7e297000-7e2a2000   Deferred        libxcursor.so.1
ELF 7e459000-7e483000   Deferred        libexpat.so.1
ELF 7e483000-7e4b7000   Deferred        libfontconfig.so.1
ELF 7e4b7000-7e4c7000   Deferred        libxi.so.6
ELF 7e4c7000-7e4cb000   Deferred        libxcomposite.so.1
ELF 7e4cb000-7e4d4000   Deferred        libxrandr.so.2
ELF 7e4d4000-7e4de000   Deferred        libxrender.so.1
ELF 7e4de000-7e4e4000   Deferred        libxxf86vm.so.1
ELF 7e4e4000-7e506000   Deferred        imm32<elf>
  \-PE  7e4f0000-7e506000   \               imm32
ELF 7e506000-7e527000   Deferred        libxcb.so.1
ELF 7e527000-7e541000   Deferred        libice.so.6
ELF 7e541000-7e675000   Deferred        libx11.so.6
ELF 7e675000-7e687000   Deferred        libxext.so.6
ELF 7e687000-7e71b000   Deferred        winex11<elf>
  \-PE  7e690000-7e71b000   \               winex11
ELF 7e71b000-7e7b5000   Deferred        libfreetype.so.6
ELF 7e7d9000-7e83b000   Deferred        advapi32<elf>
  \-PE  7e7f0000-7e83b000   \               advapi32
ELF 7e83b000-7e8f8000   Deferred        gdi32<elf>
  \-PE  7e850000-7e8f8000   \               gdi32
ELF 7e8f8000-7ea38000   Deferred        user32<elf>
  \-PE  7e910000-7ea38000   \               user32
ELF 7ea38000-7ea81000   Deferred        libdbus-1.so.3
ELF 7ea81000-7ea9f000   Deferred        libgcc_s.so.1
ELF 7eb84000-7ebd6000   Deferred        libjack.so.0
ELF 7ebd6000-7ebec000   Deferred        libz.so.1
ELF 7ebec000-7ebf0000   Deferred        libxinerama.so.1
ELF 7ebf0000-7ebf7000   Deferred        libxdmcp.so.6
ELF 7ebf7000-7ec10000   Deferred        version<elf>
  \-PE  7ec00000-7ec10000   \               version
ELF 7ec10000-7ec42000   Dwarf           dssi-vst-server<elf>
  \-PE  7ec20000-7ec42000   \               dssi-vst-server
ELF 7ef74000-7ef81000   Deferred        libnss_files.so.2
ELF 7ef81000-7ef8d000   Deferred        libnss_nis.so.2
ELF 7ef8d000-7efa7000   Deferred        libnsl.so.1
ELF 7efa7000-7efb0000   Deferred        libnss_compat.so.2
ELF 7efb0000-7efdc000   Deferred        libm.so.6
ELF 7efdd000-7efe1000   Deferred        libxau.so.6
ELF 7efe1000-7efe7000   Deferred        libuuid.so.1
ELF 7efe7000-7eff0000   Deferred        libsm.so.6
ELF 7eff0000-7eff9000   Deferred        librt.so.1
ELF f7474000-f7479000   Deferred        libdl.so.2
ELF f7479000-f7622000   Deferred        libc.so.6
ELF f7623000-f763e000   Deferred        libpthread.so.0
ELF f7662000-f77a4000   Dwarf           libwine.so.1
ELF f77a6000-f77c8000   Deferred        ld-linux.so.2
ELF f77c8000-f77c9000   Deferred        [vdso].so
Threads:
process  tid      prio (all id:s are in hex)
00000008 (D) Z:\usr\lib\dssi\dssi-vst\dssi-vst-server.exe
    00000024    0
    00000023    0
    00000009    0 <==
0000000e services.exe
    0000001f    0
    0000001e    0
    00000018    0
    00000017    0
    00000015    0
    00000010    0
    0000000f    0
00000012 winedevice.exe
    0000001c    0
    00000019    0
    00000014    0
    00000013    0
0000001a plugplay.exe
    00000020    0
    0000001d    0
    0000001b    0
00000021 explorer.exe
    00000022    0
Disconnect: can't disconnect named semaphore name = jack_sem.1000_default_dssi-vst err = Invalid argument
DSSI VST plugin GUI controller v0.986
Copyright (c) 2004-2010 Chris Cannam
created lo server (url is osc.udp://pscbox:10908/) - update path is /Carla/0/update
Warning: unhandled OSC message in GUI:
arg 0: type 'f': 48000.000000
(path is </dssi/sample-rate>)
dssi-vst_gui: program_handler
dssi-vst_gui: show_handler
CarlaPlugin::waitForOscGuiShow()
CarlaPlugin::updateOscData(0x7fbb60002920, "osc.udp://pscbox:10908/dssi")
CarlaPlugin::updateOscData() - source: host "127.0.0.1", port "10908"
CarlaPlugin::updateOscData() - target: host "pscbox", port "10908", path "/dssi"
CarlaPlugin::updateOscData() - done
CarlaPlugin::waitForOscGuiShow() - got response, asking UI to show itself now
DSSIVSTPlugin::configure(guiVisible,/tmp/rplugin_gui_FXCPQ6)
DSSIVSTPluginInstance::configure(guiVisible,/tmp/rplugin_gui_FXCPQ6)
DSSIVSTPluginInstance::configure: show gui: value /tmp/rplugin_gui_FXCPQ6
Write failed on fd 33 at remotepluginclient.cpp:502: Broken pipe

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.