This repository was archived by the owner on Dec 4, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.html
328 lines (255 loc) · 16.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=1040">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="keywords" content="Dplug,Audio,plugin,framework,D,DSP">
<meta name="author" content="Guillaume Piolat">
<title>Dplug - Make audio plug-ins with D (support VST2 / VST3 / AU / AAX / LV2 / CLAP / FLP, macOS/Windows/Linux)</title>
<style>
html {
font: 16px/1.5em "Helvetica Neue", Helvetica, sans-serif;
min-width: 1040px;
margin: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
body {
margin: 1em 0 4em 0;
background-color: #f5feff;
}
.smaller
{
font-size: 0.7em;
}
h1 {
color: #3b4f55;
font-size: 42px;
font-weight: 200;
letter-spacing: -2px;
white-space: nowrap;
margin-top: 20px;
}
h2 {
margin-top: 2em;
}
h2 a {
color: #ccc;
left: -20px;
position: absolute;
width: 740px;
}
footer {
font-size: small;
margin-top: 8em;
}
header aside {
margin-top: 82px;
}
header aside,
footer aside {
color: #636363;
text-align: right;
}
aside {
font-size: small;
left: 780px;
position: absolute;
width: 180px;
}
.column {
margin: auto;
width: 720px;
position: relative;
}
a {
color: #104dc1;
}
a:not(:hover) {
text-decoration: none;
}
code
{
font-family: "Menlo", monospace;
-webkit-text-size-adjust: 100%;
line-height: 1em;
}
.center {
display: block;
margin-left: auto;
margin-right: auto;
}
</style>
</head>
<body>
<a href="https://github.com/AuburnSounds/Dplug">
<img width="149"
height="149"
src="https://github.blog/wp-content/uploads/2008/12/forkme_right_white_ffffff.png?resize=149%2C149" style="position: absolute; top: 0px; right: 0px" alt="Fork me on GitHub">
</a>
<div class="column">
<header>
<b><a href="./">Overview</a></b>
<a style="margin-left:1em;" target="_blank" href="https://github.com/AuburnSounds/Dplug">Source</a>
<a style="margin-left:1em;" target="_blank" href="https://github.com/AuburnSounds/Dplug/wiki">Documentation</a>
<a style="margin-left:1em;" target="_blank" href="https://github.com/AuburnSounds/Dplug/wiki/Getting-Started">Get started</a>
<a style="margin-left:1em;" target="_blank" href="https://github.com/AuburnSounds/Dplug/tree/master/examples">Examples</a>
<a style="margin-left:1em;" target="_blank" href="#tutorials">Tutorials</a>
<a style="margin-left:1em;" target="_blank" href="https://github.com/AuburnSounds/Dplug/issues">Issues</a>
</header>
<h1>
<img src="logo.png" class="center" alt="Dplug logo" style="width: 5em; margin: 2em auto">
The Dplug audio plug-in framework
</h1>
<h2><a id="contents" href="#contents">#</a> Table of contents</h2>
<ul>
<li><a href="#tutorials">Dplug Tutorials series</a></li>
<li><a href="#introduction">Introduction</a></li>
<li><a href="#features">Features of Dplug</a></li>
<li><a href="#differences">What makes Dplug different?</a></li>
<li><a href="#maintenance">Easier life through Dplug</a></li>
<li><a href="#dlanguage">Easier life through D</a></li>
<li><a href="#downsides">Downsides of Dplug</a></li>
<li><a href="#alternatives">Alternatives to Dplug</a></li>
<li><a href="#madewithdplug">Made with Dplug</a></li>
<li><a href="#gettingstarted">Getting Started</a></li>
</ul>
<h2><a id="tutorials" href="#tutorials">#</a>Dplug Tutorials series</h2>
A series of tutorials around creating plug-ins with Dplug. Those are created in the context of the Dplug meetings. To attend, hop on the Discord!
<ul>
<li><a target="_blank" href="tutorials/Dplug Tutorials 1 - Live-coding plugins UI with Wren.pdf">Dplug Tutorials 1 - Live-coding plugins UI with Wren</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 2 - MIDI Output in Dplug.pdf">Dplug Tutorials 2 - MIDI Output in Dplug</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 3 - Anatomy of a custom widget.pdf">Dplug Tutorials 3 - Anatomy of a custom widget</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 4 - Digital Multiband Processing.pdf">Dplug Tutorials 4 - Digital Multiband Processing</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 5 - Distortion At Large.pdf">Dplug Tutorials 5 - Distortion At Large</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 6 - 3 ways to live-edit your UI.pdf">Dplug Tutorials 6 - 3 ways to live-edit your UI</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 7 - Introducing the Wasteland.pdf">Dplug Tutorials 7 - Introducing the Wasteland</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 8 - Swing Explained.pdf">Dplug Tutorials 8 - Swing Explained</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 9 - Introducing the Gamut image library.pdf">Dplug Tutorials 9 - Introducing the Gamut image library</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 10 - Introduction to Real-Time Speech Processing.pdf">Dplug Tutorials 10 - Introduction to Real-Time Speech Processing</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 11 - UI Feedback optimizations in Lens.pdf">Dplug Tutorials 11 - UI Feedback optimizations in Lens</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 12 - Using Faust in Dplug.pdf">Dplug Tutorials 12 - Using Faust in Dplug</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 13 - Perception how low can you go.pdf">Dplug Tutorials 13 - Perception: how low can you go?</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 14 - Benchmark your UI in 3 easy steps.pdf">Dplug Tutorials 14 - Benchmark your UI in 3 easy steps</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 15 - Visualizing a 2D PBR interface with voxels.pdf">Dplug Tutorials 15 - Visualizing a 2D PBR interface with voxels</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 16 - Dplug architecture and D ecosystem.pdf">Dplug Tutorials 16 - Dplug architecture and D ecosystem</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 17 - Faust Dplug Integration.pdf">Dplug Tutorials 17 - Faust Dplug Integration</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 18 - The Case Against Binary Trees.pdf">Dplug Tutorials 18 - The Case Against Binary Trees</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 19 - 4 Audio DSP Optimization Idioms.pdf">Dplug Tutorials 19 - 4 Audio DSP Optimization Idioms</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 20 - Moog Ladder Filter Explained.pdf">Dplug Tutorials 20 - Moog Ladder Filter Explained</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 21 - CLAP Support in Dplug and 3 other goodies.pdf">Dplug Tutorials 21 - CLAP Support in Dplug and 3 other goodies</a></li>
<li><a target="_blank" href="tutorials/Dplug Tutorials 22 - FLOSS, Community, Business models, a Basic Introduction.pdf">Dplug Tutorials 22 - FLOSS, Community, Business models, a Basic Introduction</a></li>
</ul>
<aside><a href="#contents" class="smaller">Back to Table of Contents</a></aside>
<h2><a id="introduction" href="#introduction">#</a> Introduction</h2>
<p><b>Dplug</b> is an open-source audio plug-in framework existing since 2013.</p>
<p>A plug-in framework is a software library whose aim is to insulate audio plug-in creation from platforms and formats woes.</p>
<p>As such, Dplug is used to target different formats and OSes, for use in popular hosts, such as FLStudio, Logic, Pro Tools, Cubase... </p>
<p>Dplug is developped mainly by Auburn Sounds and is located on GitHub: <a target="_blank" href="https://github.com/AuburnSounds/Dplug"><code>https://github.com/AuburnSounds/Dplug</code></a>.</p>
<aside><a href="#contents" class="smaller">Back to Table of Contents</a></aside>
<h2><a id="features" href="#features">#</a> Features of Dplug</h2>
<p>Dplug lets you create audio plug-ins products aimed at audio production on the desktop.</p>
<ul>
<li>macOS, Windows and Linux.</li>
<li>VST2, VST3, AUv2, AAX, LV2, CLAP, FLP formats.</li>
<li>Lightweight, low-overhead client wrappers.</li>
<li>Trying to be liberal with licensing. You still have to comply with the VST2 licence agreement, the VST3 licence agreement, and the AAX licence agreement. In particular Avid is a gatekeeper for the DPlug AAX client. Dplug is forkable.</li>
<li>Sophisticated PBR games-like software renderer, and also two fast 2D rasterizers for real-time controls.</li>
<li>Script and resizing support.</li>
<li>Supported DAWs listed <a target="_blank" href="https://github.com/AuburnSounds/Dplug/wiki/Host-Support">here</a>.</li>
</ul>
<h3>Options?</h3>
<p>Maintaining user sessions compatibility and avoiding breaking it is of paramount importance for audio plug-ins developers.</p>
<p>Often you'll want to update Dplug to a major version, but still retain user sessions compatibility.</p>
<p>Dplug's answer to this is <a target="_blank" href="https://github.com/AuburnSounds/Dplug/wiki/Options">Dplug Options</a>. They let you upgrade Dplug without breaking user sessions. Instead you break user sessions at your own pace, when making major updates to your plug-ins.</p>
<aside><a href="#contents" class="smaller">Back to Table of Contents</a></aside>
<h2><a id="differences" href="#differences">#</a> What makes Dplug different?</h2>
<p> Dplug has a few peculiarities compared to the other plug-in framework: </p>
<ul>
<li>Dplug is written in <a href="#dlanguage">the D programming language</a>.</li>
<li>Dplug can provide <a target="_blank" href="https://www.auburnsounds.com/blog/2016-09-16_PBR-for-Audio-Software-Interfaces.html">semi-procedural rendering</a> for interfaces in order to have smaller memory and disk footprint.
This rendering is fully customizable so as to support a wide variety of shading techniques. It doesn't use the GPU, so it's very stable and never cause OpenGL driver issues.</li>
<li>Dplug can use the Wren programming language as an "imperative CSS" to speed-up authoring.</li>
<li>Dplug is solely made for professional plug-in developers. It can be used free of charge,
however do not expect any personal support; it's not really a framework for beginners.</li>
<li>That said, Dplug tries to <a href="#maintenance">make authoring plug-ins a pleasant experience</a>.</li>
</ul>
<aside><a href="#contents" class="smaller">Back to Table of Contents</a></aside>
<h2><a id="maintenance" href="#maintenance">#</a> Easier life through Dplug</h2>
<p>Writing and selling audio plug-ins is a bit like portfolio management,
one must offer value while not getting into <i>product debt</i>, offering more products that one can possibly maintain and update.</p>
<p>Still, having an extensive product portfolio is important for revenue. Therefore, one of Dplug's core principle is to try to <b>create the minimum maintenance load</b>,
so that you don't get unforeseen work without your consent.</p>
So, what does Dplug do to make your life easier?
<ul>
<li>UI live-coding throught <a target="https://wren.io/">Wren</a> integration.</li>
<li>Building plug-ins for a single platform is a single <code>dplug-build</code> command-line invocation.</li>
<li>Support for Windows and macOS installers out of the box.</li>
<li>Support for Apple Notarization and code-signing out of the box.</li>
<li>A number of plug-in <a target="_blank" href="https://github.com/AuburnSounds/Dplug/tree/master/tools">tools</a> to speed up development or regression searching.</li>
<li>All breaking changes are readily documented in the <a target="_blank" href="https://github.com/AuburnSounds/Dplug/wiki/Release-notes">Release Notes</a> (breaking changes are unavoidable, however Dplug uses <a href="https://semver.org/">SemVer</a> to batch them).</li>
</ul>
<aside><a href="#contents" class="smaller">Back to Table of Contents</a></aside>
<h2><a id="dlanguage" href="#dlanguage">#</a> Easier life through D</h2>
<img src="d.png" class="center" alt="D logo">
<p><a target="_blank" href="https://dlang.org">The D programming language</a> is a general-purpose programming language with static typing, systems-level access, and C-like syntax. It provides <a target="_blank" href="https://p0nce.github.io/d-idioms/#How-does-D-improve-on-C++17?">strong improvements</a> over C++ along with <a target="_blank" href="https://blog.thecybershadow.net/2014/03/21/functional-image-processing-in-d/">uniquely composable</a> new kind of abstractions (though Dplug doesn't make use of such power).</p>
<p>D is often praised for being <a href="https://www.dpldocs.info/this-week-in-d/Blog.Posted_2021_02_08.html">"low friction"</a>.</p>
<p>OK. What does D bring to the table, day to day?</p>
<ul>
<li>Get <b>faster builds</b> out of the box without header-only libraries or combined source.</li>
<li>Use <b>one compiler</b> <a target="_blank" href="https://github.com/ldc-developers/ldc/">(LDC)</a> for the 3 desktop platforms. Use the same powerful and recent LLVM backend for all your releases.</li>
<li>Use the standard D package manager <a target="_blank" href="https://code.dlang.org/">DUB</a>. It handle dependencies, can generate IDE projects, and tests.</li>
<li>Drop the need to learn C++, or if you're experienced <i>keep up with the changes in C++.</i></li>
<li>Keep using Visual Studio with <a target="_blank" href="https://rainers.github.io/visuald/visuald/StartPage.html">VisualD</a>.</li>
</ul>
<h3><i>"But D is a GC language so you can't possibly do audio with it, right?"</i></h3>
<p>Dplug plug-in runs with the D runtime left disabled, so the D GC is just not running in a Dplug plug-in. It is disabled, so there is zero GC allocation or GC collection in a Dplug plug-in.</p>
<p>This runtime disabling has to be paid dearly, and Dplug users use a restricted subset of the D language.</p>
<ul>
<li><a href="https://github.com/AuburnSounds/Dplug/wiki/Working-in-a-@nogc-environment">Downsides to living without the D runtime</a></li>
<li><a href="https://p0nce.github.io/d-idioms/#How-the-D-Garbage-Collector-works">How the D GC actually works</a></li>
</ul>
<aside><a href="#contents" class="smaller">Back to Table of Contents</a></aside>
<h2><a id="downsides" href="#downsides">#</a> Downsides of Dplug</h2>
<p>Dplug is a by-product of existing plugin products, and built for enabling and maintaining revenue.</p>
<p>It is not a product by itself, and it doesn't necessarily have the structure to scale to many users.
Feature development get routinely postponed in favour of product creation, or maintenance tasks such as keeping up with macOS.</p>
<p>Here is a list of missing features:</p>
<ul>
<li>HiDPI</li>
<li>Sidechain input</li>
<li>AUv3 and iOS support</li>
<li>Video tutorials</li>
</ul>
<p>We'd like to do those items, but didn't get the time yet. Check the <a target="_blank" href="https://github.com/AuburnSounds/Dplug/wiki/Release-notes">Release Notes</a> to get an idea of Dplug's velocity.</p>
<p>You can also <a href="https://github.com/AuburnSounds/Dplug/wiki/Bug-Bounty-Program">sponsor Dplug</a>, or even better, get involved in the codebase to make it happen.</p>
<aside><a href="#contents" class="smaller">Back to Table of Contents</a></aside>
<h2><a id="alternatives" href="#alternatives">#</a> Alternatives to Dplug</h2>
Be sure to consider the alternatives before settling on a plug-in framework.
<ul>
<li><a target="_blank" href="https://juce.com/">JUCE</a></li>
<li><a target="_blank" href="https://github.com/iPlug2/iPlug2">iPlug 2</a></li>
<li><a target="_blank" href="https://github.com/DISTRHO/DPF">DPF - DISTRHO Plugin Framework</a></li>
<li><a target="https://github.com/olilarkin/awesome-musicdsp">Other frameworks</a></li>
</ul>
<aside><a href="#contents" class="smaller">Back to Table of Contents</a></aside>
<h2><a id="madewithdplug" href="#madewithdplug">#</a> Made with Dplug</h2>
Check out the products made with Dplug.
<ul>
<li><a target="_blank" href="https://www.auburnsounds.com">Auburn Sounds</a> plug-ins</li>
<li><a target="_blank" href="https://www.cutthroughrecordings.com/">Cut Through Recordings</a> plug-ins</li>
<li><a target="_blank" href="https://lunafoxgirlvt.itch.io/nucat">Kitsunebi Games Nu:Cat</a> plug-in</li>
<li><a target="_blank" href="https://punklabs.com/ot-simian">Punk Labs OneTrick SIMIAN</a> plug-in</li>
<li><a target="_blank" href="https://smaolab.org/effects/">SMAO#LAB</a> plug-ins</li>
</ul>
<aside><a href="#contents" class="smaller">Back to Table of Contents</a></aside>
<h2><a id="gettingstarted" href="#gettingstarted">#</a> Getting started</h2>
<ul>
<li><a target="_blank" href="https://github.com/AuburnSounds/Dplug/wiki/Getting-Started">Get Started with your first Dplug plug-in</a></li>
<li><a target="_blank" href="https://discord.gg/7PdUvUbyJs">Chat with us in our #audiodev Discord channel</a></li>
<li><a target="_blank" href="https://github.com/AuburnSounds/Dplug/wiki/Bug-Bounty-Program">Get paid to work on Dplug</a></li>
</ul>
</div>
</body>
</html>