Developing VST Plugins for Linux is something that has always been of great interest to me personally.  There never seemed to be a framework that was easily portable to Linux aside from JUCE.  Why not use JUCE you ask?  Don’t get me wrong, JUCE is an excellent framework full of a multitude of useful libraries, but the licensing fees are too high for an independent developer like me.  Then there is WDL which I used for a while, but unfortunately, it has been orphaned so future developments are unlikely unless you do them yourself.  WDL also doesn’t have support for Linux, and in my experience, it can be a nightmare to manage the projects.  I could go on and on comparing JUCE, WDL, and Dplug but I will save that for a later post.  In this post, I want to tell my story of why I switched to the new kid on the block: Dplug.

Begin long story…

Sometime about 6 or 7 months ago, I started learning a new language just for fun called D.  It was a language that had caught my interest from various blog entries and youtube videos.  One of the beautiful things about D is the package manager made for it called Dub.  Just out of curiosity I searched the Dub package repository for “vst” and was shocked when “dplug” came up.

So what is Dplug?  Dplug is an open source library written entirely in D that can build plugins for Windows and Mac in VST format and Audio Unit format.  At first, this seemed too good to be true.  I cloned the GitHub repository and followed the instructions in the README for building a sample plugin.  I went to the distort example, opened a terminal, and typed in “dub”.  Much to my surprise, the plugin built like it was magic.  There wasn’t any frustration over using an IDE, no build errors, nothing.  Surely something must have gone wrong, it’s never that easy.  So I moved the resulting DLL over to my plugins folder and opened my host.  Once again I was shocked to see the example plugin open and run beautifully.

At this point I was sold on Dplug, but there was just one thing that still bothered me.  Just like WDL, there was no Linux support.  After asking the author Guillaume Piolat about the state of Linux support, he mentioned that he had once attempted to add Linux support in the past but ran into problems with x11 and hosts not find the plugins’ entry points (D and the libraries written in it have matured a lot since that time).  Guillaume decided to appoint a programmer named Rikki to add support for x11 windowing.  Again I was shocked.  There was a library for VST/AU plugins that is maintained extremely well and frequently.

Rikki is great when it comes to this sort of task.  If you need any work done, especially in D or with windowing, I highly recommend him.  http://cattermole.co.nz/

In just a short amount of time, Rikki finished up X11 windowing for Dplug and had a working standalone example.  I could hardly contain my excitement to finally see my plugins run on Linux.  The plugins didn’t work right off the bat unfortunately.  This was due to the plugins not getting a handle on the window to draw to and also not receiving events for the X server.  We handled this by having Dplug create its own window and then creating a separate thread to dispatch events and redraw the UI.  After a few small changes, we had the plugins opening and properly handling X events.

Conclusion

Finally, there is an open source framework for creating VST plug-ins in Linux.  There are no licensing fees to worry about and development is very active.

Dplug is exactly what I was looking for, but I’m not going to say that is the ultimate library for creating audio plugins.  The library is still actively being developed so it doesn’t have support for formats like AAX or VST3.  Also even though D has a syntax similar to C and C++, it may take a while to adapt to using a different language.  If this doesn’t scare you away then I strongly encourage you to give Dplug a chance!

In the following months, if there is enough interest, I may begin a series of tutorials about writing plugins with Dplug.  If you are interested in joining our discussion about Dplug, we have a discord server here  https://discord.gg/V5xDwFP

The GitHub page for Dplug is here https://github.com/AuburnSounds/dplug

If you are interested in seeing what kind of plugins can be made with Dplug, then you should certainly checkout Auburn Sounds.  They use Dplug exclusively.  https://www.auburnsounds.com/

As always feel free to contact me at ctrecordingslive@gmail.com

Sign up for our newsletter so you dont miss new deals and anouncements!

Please follow and like us:
Categories: DdplugProgramming

4 Comments

Guillaume Piolat · August 17, 2017 at 10:26 am

One important note: to use Dplug you have first to agree to the VST SDK license from Steinberg Technologies GMBH.
Also, as Dplug relies on some code translated from WDL (notably the plugin client abstraction, Carbon window and Audio Unit), an acknowledgment in the product documentation “would be appreciated but is not required”.

New top story on Hacker News: Developing VST Plugins for Linux with D – The Internet Yard · August 20, 2017 at 1:59 pm

[…] Developing VST Plugins for Linux with D 7 by p0nce | 0 comments on Hacker News. […]

Dplug For Developing VST Plugins on Linux | Modern Metal Production | ExtendTree · August 20, 2017 at 3:08 pm

[…] Read Full Story […]

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts

Audio

Linkwitz-Riley Crossovers – Digital Multiband Processing

When it comes to Digital Signal Processing, successfully creating crossovers can be tricky at first.  Linkwitz-Riley filters have a very important quality that when a highpass and lowpass filter with the same corner frequency are summed, Read more…

D

D – An Elegant Language For A More Civilized Age

This is from a paper that I wrote for one of my classes recently and would like to share it here. Nearly every native application running on modern computers was written using C++.  The language Read more…

Audio

Simple Circular Buffer in C++

The circular buffer or ring buffer can often times be difficult to implement.  I pulled my hair out for hours trying to implement one using a dynamic array, but I finally found a simple solution that Read more…