Dplug
is a library for crafting native audio plugins as simply as possible.
- Creating VST 2.4 plugins on Windows and Mac OS X, 32-bit and 64-bit
- Creating Audio Unit v2 plugins for Mac OS X, 32-bit and 64-bit
- Comes with a few music DSP algorithms
- Comes with a suite of
tools
to make plugin creation faster (bundling, color correction, regression tests) - Graphics renderer inspired by PBR
-
v3.x.y (9th May 2016):
- Audio Unit compatibility added, with both Cocoa and Carbon UI. What is still missing from AU: Audio Component API, sandboxing, v3. In other words it's on parity with IPlug but not JUCE.
- The
release
tool is now much more friendly to use. - Special keys in
dub.json
are now expected in aplugin.json
file next to dub.json. In the future it will be the place of autority for information about a plugin, for now this has to be duplicated inbuildPluginInfo()
override. An emptyplugin.json
is OK, defaults are in place. - The Wiki became a place to visit.
- no API guarantee yet. Do not expect things not to change.
-
v2.x.y: (6th January 2016)
- this is the next release, and API will break without notice
- supports VST for 32-bit and 64-bit, Windows and Mac
release
tool now expects a VST or AU configuration, see thedistort
example for details- special
dub.json
keyCFBundleIdentifier
becameCFBundleIdentifierPrefix
, see howdistort
works to update your plugins dub.json - 10.6 compatibility dropped.
-
v1.x.y: (26th May 2015)
- initial release, VST support for 32-bit and 64-bit, Windows and Mac
https://auburnsounds.com/blog/2016-02-08_Making-a-Windows-VST-plugin-with-D.html
- Use DMD >= v2.067 or LDC >= v1.0.0-b2
- Install DUB, the D package manager: http://code.dlang.org/download
- Go into an example directory
- Type
dub --compiler=dmd
ordub --compiler=ldc2
depending on the compiler used.
- Use DMD >= v2.067 or LDC >= v1.0.0-b2
- Install DUB, the D package manager: http://code.dlang.org/download
- Build and use the
release
tool which is in thetools/release/
directory. - Go into an example directory
- Type
release --compiler dmd
orrelease --compiler ldc
depending on the compiler used. - This tool is needed to create the whole bundle.
- How do I build plugins for OS X?
You need to use the release
program in the tools
directory.
This tool create a bundle and Universal Binaries as needed.
Like most D programs, you can build it by typing dub
.
- What is the oldest supported Windows version?
Windows Vista. Users report plugins made with both DMD and LDC work on Windows XP. But this target isn't officially supported by D compilers.
- What is the oldest supported OS X version?
OS X 10.7+ Probably possible to go below in cases, but impractical. To try that modify the "release" tool. D compilers do not support OS X 10.6 anymore so you won't get any help in case of problem.
-
What D compiler can possibly be used?
See
.travis.yml
for supported compilers. -
Is Dplug stable?
No. The interface tend to change for improvements. Pin the version you use using DUB version specifications.
- Will you fix the bugs I encounter?
I might but don't guarantee it. This software is released for free. It doesn't mean support is for free. If you want something to be changed, you can:
- ask it
- do it yourself
- use the bounty system
Pros:
- No dispatcher-wide mutex lock. All locks are of a short duration, to avoid blocking the audio thread.
- Plugin parameters implement the Observer pattern.
- Float parameters can have user-defined mapping.
- PBR-style rendering lets you have a good visual quality with less disk space, at the cost of more work.
- No need to deal with resource compilers: D can
import("filename.ext")
them. - No need to maintain IDE project files, they are generated by DUB.
- No need to make Info.plist files, they are generated instead.
- No need to use Xcode whatsoever.
- No need to use a MacOSX SDK.
Cons:
- Less battle-tested in general.
- Less man-power.
- Hipster compilers are used, though they get better all the time.
- API may change without notice (pin the version of dplug you use).
- AAX and VST3 unimplemented.
- No resizeable UI yet.
- No HDPI support yet.
- No modal windows, and no plans for it.
Dplug has three different licenses depending on the part you need. For an audio plugin, you would typically need all three. I recommend that you check individual source files for license information.
Plugin wrapping is heavily inspired by the WDL library (best represented here: https://github.com/olilarkin/wdl-ol).
Some files falls under the Cockos WDL license.
Important contributors to WDL include:
- Cockos: http://www.cockos.com/
- Oliver Larkin: http://www.olilarkin.co.uk/
However Dplug is far from a translation of WDL (see FAQ).
This sub-package falls under the Steinberg VST license.
VST is a trademark of Steinberg Media Technologies GmbH. Please register the SDK via the 3rd party developper license on Steinberg site.
Before you make VST plugins with Dplug, you need to read and agree with the license for the VST3 SDK by Steinberg. If you don't agree with the license, don't make plugins with Dplug. Find the VST3 SDK there: http://www.steinberg.net/en/company/developers.html
Other source files fall under the Boost 1.0 license.
- Abstract plugin client interface. Currently implemented once for VST.
- Abstract plugin host interface.
- VST SDK D bindings
- VST plugin client
- Audio Unit plugin client (WIP)
- implements windowing for Win32, Cocoa and Carbon
- Needed for plugins that do have an UI
- Toolkit includes common widgets (knob/slider/switch/logo/label)
- PBR-based renderer for a fully procedural UI (updates are lazy and parallel)
- Basic support for audio processing:
- FFT and windowing functions (include STFT with tunable overlap and zero-phase windowing)
- FIR, 1st order IIR filters and RBJ biquads (no higher order IIR filters)
- mipmapped wavetables for antialiased oscillators
- noise generation including white/pink/demo noise
- various kinds of smoothers and envelopes
- delay-line and interpolation
examples/distort
: mandatory distortion pluginexamples/ms-encode
: simplest plugin for tutorial purposeexamples/time_stretch
: resampling x2 through FFT zero-padding
tools/pbr-sketch
: playground for creating plugin background texturestools/release
: DUB frontend to build Mac bundles and use LDC with proper envvarstools/process
: plugin host for testing audio processing speed/reproducibilitytools/wav-compare
: comparison of WAV filestools/lift-gamma-gain
: tool to adjust color correction curves on a finished UI