Giter VIP home page Giter VIP logo

dplug's Introduction

logo

Build and Test Dub version

Dplug lets you create professional audio plug-ins with minimal headaches and cost.

๐Ÿ  Dplug.org
๐Ÿ“š DPlug Wiki
๐Ÿ’ฌ Community Discord
๐Ÿ‘ฉโ€๐Ÿซ Getting Started

Features

Format macOS arm64 macOS amd64 Windows 32-bit Windows 64-bit Linux x86-64
VST2 โœ… โœ… โœ… โœ… โœ…
VST3 โœ… โœ… โœ… โœ… โœ…
AUv2 โœ… โœ…
AAX โœ… โœ… โœ… โœ…
LV2 โœ… โœ… โœ… โœ… โœ…
FLP โŒ โŒ โŒ โœ…

โš™๏ธ Automated Mac and Windows installers, signing, notarization.
โš™๏ธ Build plug-ins with Dlang, a powerful, easy and fast native language with serious build times improvements over C++.
โš™๏ธ Package-based dependency management with DUB. Build any Dplug tool with the $ dub command.
โš™๏ธ With PBR rendering, you can have video-game like skeuomorphism with a small distribution size.
โš™๏ธ DAW support list here.
โš™๏ธ Ask your question on the Discord!
โš™๏ธ Join the secretive Dplug Wasteland club for exclusive audio knowledge!
โš™๏ธ Free of charge!

Made with Dplug

Come talk with us on the Dplug Discord to learn more and meet your peers!

Release notes

Keep up with major changes with the Dplug Release Notes.

Key concept: Dplug uses SemVer. If you stay on the same Dplug major version tag (eg: "~>13.0"), your plug-in wont't break, and more importantly your user sessions won't break either.

Governance

Dplug has a deep commitment to stability. All breaking changes are documented in the Changelog and issues major SemVer tags for breaking changes. If you don't want any breaking changes, you can pin Dplug to a major version in your dub.json. Breaking changes only happen for major tags.

Dplug's goal is to support existing products and build commercial companies around them. It is a part-time operation, from people who release commercial plug-ins for a living.

Being stable and relatively bug-free is deemed more important to us than implement every possible feature. It's often than enhancements get postponed in favour of product development, so please be patient!

Strengths of Dplug

  • No interaction needed with Xcode, CMake, C++, Obj-C or MSVC.
  • Lovable D language, suitable from prototyping to production.
  • Same features for VST2 / VST3 / AUv2 / AAX / LV2 plug-in formats.
  • Same features for desktop OS: Windows / macOS / Linux.
  • Faust language integration.
  • Easy SIMD compatible with both x86, x86_64, and arm64 with same codebase.
  • Fast 2D software rasterizer in dplug:canvas, no OpenGL headaches.
  • Wren scripting for faster UI authoring.
  • Optional Physically Based Rendering (PBR).
  • Image support: PNG, JPEG, QOI, and specially designed QOIX codec.
  • Easy to install and update.
  • State-of-the-Art tutorials.

VST3 SDK

If you don't have the VST3 SDK, you can't make VST3 plugins with Dplug. Find the VST3 SDK there: http://www.steinberg.net/en/company/developers.html

If you don't have a licensing agreement with Steinberg, you can't distribute VST2 or VST3 plug-ins.

Licenses

Dplug has many different licenses depending on the sub-package you need. Please check individual source files for license information. Please do your homework and respect the individual licences when releasing a plug-in.

In particular:

dplug's People

Contributors

0xeab avatar abaga129 avatar aminya avatar andrejmitrovic avatar detomastah avatar drug007 avatar gedaiu avatar ibara avatar jpcima avatar klknn avatar lunathefoxgirl avatar mickaelistria avatar mrsmith33 avatar nilsding avatar p0nce avatar rikkimax 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

dplug's Issues

Separate color bleed and AO

4th component in depth map could be "emissive strenght", to be looked at for color bleed. Allows many lights. there is no reasons low-depth widgets don't color bleed on high-depth things.
Make bleed multiscale and multiply it by the emissive factor.

AO could look more like textbook SSAO and be color-less. Currently high

Faster rendering performance

Measurements based on rendering 2 bargraphs

Do nothing => 3.5ms
AO => 11ms
cast shadows => 5ms
secundary light => 1ms
specular => 2.5ms
skybox => 10ms
emissive => 20ms
Total => 58ms

Some things are very expensive, eg: a sqrt() cost 1ms.

UI depth maps

Because shadows are desirable and baking them takes huge space, it would be desirable to have sort of a SSAO effect software renderered. So far a solution with a 8-bit depth map would be winning. This needs multiple render buffers and a deffered pass for SSAO (and another for lights?). All this requires lazy UI updates for elements and z-order.

Building with a good codegen on Windows

This won't be easy.

Windows

Assertion failed: !(Pair.first != Ty && Pair.second == Ty) && "mapping to a sour
ce type", file D:\Temp\LDC-BUILD\src\llvm-3.6.0.src\lib\Linker\LinkModules.cpp,
line 265
  • LDC with 32-bit target => also an ICE
Error: 0x7536F1AB (0x0028FABC 0x0119070D 0x00000000 0x0028FBF0), tolower() + 0x2
B bytes(s)
0x7536FA44 (0x1AD22330 0x00000080 0x0119070D 0x00000000), _vsnprintf_l() + 0x54
bytes(s)
0x7536F9D8 (0x1AD22330 0x00000080 0x0119070D 0x0028FBF0), _vsnprintf() + 0x18 by
tes(s)
0x0042F599 (0x00000000 0x0195FA20 0x778A9950 0x0028FD70)
0x778A1EAA (0x0028FD0C 0x0028FD22 0x0028FD8C 0x6275642E), RtlFreeHeap() + 0x1BA
bytes(s)
0x7536B197 (0x00000023 0x0195FA20 0x0028FD60 0x778B47C4), malloc() + 0x57 bytes(
s)
0x6FC8A669 (0x1AABF6B0 0x1B15A8E8 0x1AABF6BC 0x6FC89FE7), _ZNSs4_Rep9_S_createEj
jRKSaIcE() + 0x59 bytes(s)
0x778B47C4 (0x1B15A8E8 0x1B15A8FE 0x0028FE1C 0x1B15A8E8), RtlFreeUnicodeString()
 + 0x34 bytes(s)
0x6FC8BAE7 (0x0DF25D68 0x0028FE14 0x0028FE03 0x00000000), _ZNSsC1EPKcRKSaIcE() +
 0x37 bytes(s)
0x01144E0B (0x00032A80 0x00000056 0x00000002 0x004013DE)
0x004013DE (0x7FFDE000 0x75237BE0 0x2B77CE40 0x0028FFDC)
0x75237C04 (0x7FFDE000 0x29D3E292 0x00000000 0x00000000), BaseThreadInitThunk()
+ 0x24 bytes(s)
0x778BAD1F (0xFFFFFFFF 0x778A0240 0x00000000 0x00000000), RtlInitializeException
Chain() + 0x8F bytes(s)
0x778BACEA (0x004014E0 0x7FFDE000 0x00000000 0x78746341), RtlInitializeException
Chain() + 0x5A bytes(s)
c:\d\ldc-32b\bin/../lib/libdruntime-ldc.a(dll.obj):(.text[__D4core3sys7windows3d
ll18dll_process_attachFPvbZb]+0x12): undefined reference to `_tlsstart'
c:\d\ldc-32b\bin/../lib/libdruntime-ldc.a(dll.obj):(.text[__D4core3sys7windows3d
ll18dll_process_attachFPvbZb]+0x1a): undefined reference to `_tlsend'
c:\d\ldc-32b\bin/../lib/libdruntime-ldc.a(dll.obj):(.text[__D4core3sys7windows3d
ll18dll_process_attachFPvbZb]+0x21): undefined reference to `_tls_callbacks_a'

Chunks

Useful for versionned parameters

@nogc dplug:dsp

For use in audio callbacks.
Including initializations and resets.

Race in text rendering

Now that UIElement render concurrently, it creates problems when sharing something like a Font.

  • either make Font thread-safe
  • or find something else

Fix license

Boost + IPlug license should be used in a per-file basis

Windows VST hosts compatibility

Current Status

  • Orion: OK
  • VSTHost: OK in 32 and 64-bit, crash at the end though (EDIT: only sometimes)
  • Reaper: OK in 32 and 64-bit, even when bridged
  • Live: looks OK
  • Audacity (Windows): OK in 32-bit (does not seem to be available in 64-bit)
  • Savihost: OK in 32-bit and 64-bit
  • Presonus Studio One: OK in 32-bit and 64-bit
  • Bitwig: One issue #33 OK in 32-bit
  • Fruity Loops: issues when bridged #43, OK in 32-bit and 64-bit otherwise
  • BlueCat Patchwork:
    • VST 32-bit hosting VST 32-bit: OK
    • VST 64-bit hosting VST 64-bit: OK
  • Cubase: OK, 32-bit and 64-bit

TODO: Samplitude, Sonar, and other VST hosts first

Support parameter changes

For now the parameters are declared, but there is no way to know if they have changed in the audio callback.

Audio concept

Concept for buffers and processors, or both at once.

Started as dplug:audio (nothing depends on it for now). It's not easy.

Overdraw

Easy to reproduce with automation. Background is not redrawn but control is redrawn.
overdraw

Seen in at least Cubase / FLStudio / Orion

Screen space reflection

Would be cool.
It requires a separate buffer and pass for reflections, the problem is that the reflection pass would have to be full GUI all the time, so very slow.

VST: FLStudio problems when bridged

These problems are only with bridged plugins:

  • connection lost with plugin: leads to the plugin being reopened, but no redraw / dirtying
  • redraw does not work well when other window are invalidating an area

Presets

  • Need a preset class which contain all parameters in float form.
  • Number of preset is set upront on plugin creation, strange.
  • Multiple output/input format to be expected: better let the presets be in memory as is.

PBR rendering

Remove shininess and implement roughness and metalness as documented on the Internet, especially UE4.
Get interested in PBR and see what can be done.
Rename diffuse into "albedo" which is the same concept in PBR.
Define defaults albedo colors from UE4 documentation.
Same for metals and materials.

Not scheduled because with envmap metals are metal enough.

Are spinlock really worth it?

Critical sections / mutexes usually have a lock-free part if no contention, and that is as fast as a spin-lock. If the lock is taken, then we'd better pause the thread than spin all that time.

Maybe synchronized can help in staying @nogc.

Problems with dirty state being a single rectangle

The dirty rect of toplevel element expands when a widget is dirty.
The problem is that some of the area isn't redrawn, so some widget may flicker and be erased by toplevel redraw.

Solution:

  • maybe make the dirty state a rectangle list
  • maybe have every UIElement have an intermediate output buffer (meh)

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.