Making Vst Plugins In 2019
Roll Your Own VST Synths with SynthEdit
Includes some useful tips you won’t find anywhere, and some tips you’d have to look many different places to find.
A VST plugin is a software-based audio effect or a virtual instrument intended for use in a host program that supports Virtual Studio Technology. Most digital audio workstations nowadays can load VST and VST3 plugins. VST plugins are used to expand a virtual music studio, much like how hardware effects and instruments are utilized in a real studio. Top 10 Free VST Plugins (2019) In the jungle of free VST plugins, there are many gold nuggets to be found, if you know where to look. Some of the free plugins out there hold such a class that they could. While we’ve covered The World’s Best Free Plugins elsewhere on the site, here we’re paying our respects to some of the best plugins available right now overall, running down the top VST, AU and AAX options that should take pride of place on anyone’s dream hard drive in 2019.
by Michael W. Dean
Reflects use of SynthEdit 3.1, latest version as of publishing this article, August 28, 2018. Can be used for VST2 and VST3.
Best Free Vocal VST Plugins. It's well-known that dynamic sounds are much harder to mix – and the vocals are super dynamic. Luckily, there is no need to stress out every time you get to the mixer and start working on getting the “perfect vocals.” All you need to do is to know which free vocal mastering VST plugins. Hello yall hope this won’t be long. I find myself rn stuck in a period where im only making beats for other rappers to use and sell it to them. The beats on their own are not bad, but definitely something i would.
Michael W. Dean wrote the book
$30 Music School (Only 5 dollars. 2nd Edition, 2018. Cheaper than a drink in a bar, Kindle Edition).
It’s the 2018 update to the classic 2003 DIY music book $30 Music School, a 540-page paperback that retailed for $30.
This article is an excerpt from the 2018 update.
NOTE:
Jef McClintock, the creator of SynthEdit, looked over this article and confirmed that it’s accurate.
NOTE:VST® is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.
Info about Steinberg’s October 1st, 2018 update on licensing requirements for VST2 developers, including users of SynthEdit, is at the bottom of this article.
Please link, rather than copy, this article, in case I have to update anything. Thank you.
Get it here: SynthEdit.com
SynthEdit is an amazing program that allows you to create VSTs without learning programming. It utilizes a “drag and connect blocks” interface. (See top image on this article.)
It may seem like you couldn’t do much without learning to code, but you can. Some of the best free VSTs (and even some pay VSTs) are made with SynthEdit.
Of course, there are also some so-so synths made with it, but that’s to be expected with anything that makes entry easier on a basic level.
SynthEdit was created by Jef McClintock to bridge the gap between left-brained musicians and right-brained programmers.
By hiding the coding under the hood, SynthEdit makes it possible for the people who actually use synths to make them.
You can also make VST effects and drum machines with SynthEdit. It is not limited to synths.
The demo version is free. With the demo version you can make and output VSTs, but they have a few limitations: branding says “SynthEdit” instead of you, and have a limit to the number of presets you can add.
Registering your copy of SynthEdit:
* Gives you control over the number of presets in your VST Plug-ins.
* Removes SynthEdit advertising in the VST plug-in title and About box.
* Enables the VST nag screen feature.
* Enables multi-channel audio I/O (demo supports only 2 in, 2 out).
The full working version is 99 dollars US, + theft (tax, 4 dollars US).
I recommend buying the full working version if you like the demo. It’s worth much more than that for the fun you’ll have. And some people who get very good at making VSTs with SynthEdit actually make money selling their VSTs.
There is a 32-bit version and a 64-bit version of SynthEdit. The 32-bit can be used to make 32-bit VSTs, the 64-bit can be used to make 64-bit VSTs.
You can make a project on one version and output on the other version, with maybe a few small changes.
The 32-bit version of SynthEdit will run on 32-bit or 64-bit Windows machines.
The 64-bit version of SynthEdit will only run on 64-bit Windows machines.
32-bit VSTs made with SynthEdit will run on 32-bit DAWs (running on 32-bit or 64-bit computers), and will sometimes even run on 64-bit DAWs.
But on 64-bit DAWs, the 32-bit VSTs will have odd features, like how any presets will show in a different window in 64-bit Reaper.
Though people on 64-bit DAWs often won’t download 32-bit VSTs, thinking the VSTs won’t work at all, or will be partially incompatible. Both are possible.
Contrary to a common belief, there is no difference in sound quality between 32-bit VSTs and 64-bit VSTs.
But 64-bit bit DAWs can utilize as much memory as your computer has. Whereas 32-bit DAWs cap out at 4 GB of RAM available to the DAW.
That said, I run a 32-bit DAW (Cubase 5.1 – “vintage!”) on 64-bit Windows 10, and sometimes make complex projects with up to 35 tracks and rarely have memory issues. Even though there’s only 4 GB of RAM available for Cubase, the rest of my computer has 60 GB of RAM, so everything is running quite smoothly around Cubase, which actually makes Cubase run better.
That is, a 32-bit DAW will often run much better on a 64-bit OS with more than 4 GB RAM than it would on a 32-bit OS with less memory. Even though the 32-bit DAW cannot itself access more than 4 GB of RAM.
SynthEdit used to have an issue where VSTs made with it would crash or not run if you ran the same VST on more than one track in the same program. Matlab 2015a download for mac. So if you run into that issue on older VSTs that haven’t been updated in a long time. But do know that it’s been fixed in outputting from version 1.1 (and later) of SynthEdit.
The current version, as of this writing (July 2018) is version 1.3.
One of the very cool many cool things about SynthEdit is that while making VSTs, it gives you pop-up warnings if you try to connect something that can’t be connected. It basically teaches you as you experiment.
AN EASY WAY TO LEARN SYNTHEDIT
It took me two weeks of a few hours a day to make my first two VST synths with SynthEdit. They’re not be best synths ever, but not the worst, and they’re fun. Plus they have some cool sounds.
I’ve posted the SynthEdit project file for my VST mono synth, LuckyWorm, here:
Also: here are SynthEdit projects for 2 of my Microtonal Synth VSTs (one 64-bit, one 32-bit.)
You are free to download it, examine it, output it and expand on it. Don’t just slap a new name and logo on it, do little else, and call it your own.
But if you do make substantial contributions to it, feel free to use it for the basis of your first synth, if you change the name of the synth, change the Plugin ID of the synth, and credit:
Adapted from LuckyWorm synth by BipTunia Synths https://biptunia.com/?page_id=2070
in your ReadMe file, and anywhere you post list your synth for download online.
And it would also be cool if you use the same license I used, the BipCot NoGov License.
but that’s optional.
You set the Plugin ID when you output VST from SynthEdit:
Notice I’ve set the name to “NotLuckyWorm” and put in a bunk ID of “zzzz.”
DO make sure you change the Plugin ID when you output it. Two VSTs having the same Plugin ID can cause conflicts in some DAWs.
The ID namespace for VST2 is only 4 characters long. This can lead to confusion, and crashes if two VSTs with the same ID run in the same DAW at the same time. Try to come up with a unique ID no one else would use.
PRESETS
You can add presets into your synth or FX made in SynthEdit.
Presets are premade settings that the developer creates and saves. Then they’re available to the end user.
Also known as “patches”, they’re useful; so someone opening the VST for the first time can get an idea as to how it sounds, and what you can do with it.
I think presets are a good thing to have. Plus they’re a lot of fun to make. They are, to me, the most fun part of making VSTs. Naming them can be a lot of fun too.
On my LuckyWorm synth, all the presets names are related to worms somehow. On ShinyDirt, the presets are related to dirt.
A lot of electronic musicians hate presets, consider them “amateur shortcuts for bedroom DJs”, and spend hours coming up with their own sounds.
But if presets are “cheating”, so is quantizing. And string synth sounds. Shouldn’t you just take the time to learn violin, cello and viola???
I almost exclusively use presets in BipTunia’s music. I have about 30 VST synths, all picked on their presets. And I still make music that sounds like no one.
People are afraid of “sounding like everyone else” but still it’s more about the music you use than the sounds you make. This is the important truth:
The most basic synthesizer VST with 8 presets probably has more variation in sound than most guitarists will make on their guitar in a lifetime.
Even if presets are “cheating” (they’re not), they’re still useful to add to your soft synths to let people “take it for a spin” easily before branching out and making their own settings.
Presets are also useful for people new to synths to not be scared off by all the knobs, even virtual knobs on VST soft synths.
All other things the same, synths with more presets get more downloads than ones that don’t have presets.
Few synths use as many presets as are available. A lot have 8 or 16 presets. 32 is not terribly common. 64 is rare. I put 128, the max possible, in my synth ShinyDirt, which you can hear here:
and can download here:
Be sure to review other people’s synths on sites where you can leave reviews. It’s almost criminal how few reviews some great and fairly popular synths have on KVR, for instance.
At LEAST click on the top right of the page if you use and like a synth. That takes even less time than a short review, to add the synth to any or all of these:
- My Perfect Studio
- My Actual Studio
- I Own This
- Favorites
- I Want This
Note that I make simple YouTube videos showing a run through of the presets of my synths. This is good to do, and will increase the number of people who download your workyou’re your work is good and useful.
WHERE TO LIST YOUR VSTs (and where to get free VSTs!)
Great source of free VSTs:
https://www.kvraudio.com/
Also this:
http://vstplanet.com/
And
Those three sites are where I get almost 100% of the free VSTs I use.
Note in the LuckyWorm synth SE project file where it says “Programs”, I’ve set 32. “Programs” in that sense, is “presets”, and I pointed out to Jef that it’s confusing. So he’s going to change that to “Number of Presets” in a future update.
That place is where you set how many presets show up. The options available are
1, 8, 16, 32, 64, 128.
(I’d love to see any number possible but there’s probably some binary 32-bit reason for this doubling system.)
You can download LuckyWorm here:
(You can also just output it from the project file in SynthEdit.)
And you can hear LuckyWorm in action here:
There are a lot of free-to-use modules for SynthEdit, but I couldn’t find any completed projects that are free to reuse. So I uploaded that one.
RESOURCES
There’s a help menu built into the program.
There is a lot online for SynthEdit info, but it’s not really all in one place.
There are also a lot of YouTube videos and online tutorials.
I’d recommend you Google questions you have before bugging people to help. But if you’re stuck, there’s a Facebook group here:
And there’s a forum here:
Both require joining before you can post.
I’ve received help both places. But only after I could not find the answer elsewhere.
Those are NOT places to promote VSTs, that’s frowned upon. But they are great places to get help, give help, and meet other VST developers.
After you get better at SynthEdit, be sure to pop in once in a while and help noobs. Don’t be a “hit and run” forum user.
SKINS
SynthEdit comes with a couple default skins (GUIs).
There’s a SynthEdit-branded skin for the free version.
For the paid version, there’s a bland a grey one and a pretty blue (but bland) one.
You can easily make your own skin by copying the skin folder, and changing the look of files in Photoshop or another image editing program and replacing the files in your new skin folder.
If you make a background BPM image that’s smaller than your interface, it will tile. Or you can make it the size you want, as one file, and it will not tile. That’s what I did.
SynthEdit skins are here on Windows 10:
C:UsersPublicDocumentsSynthEdit Projectsskins
Keep the file names, but I made this interesting GUI for my synth ShinyDirt simply by replacing three files (the background, the horizontal slider, and the vertical slider). The Japanese site ComputerMusic.jp said it that “the GUI has lots of personality.” (If you’re on Chrome, you can translate that on the fly.)
Note that I left in a Waveform monitor – the green squiggly lines near the middle bottom – in this synth and in LuckyWorm synth.
That module is meant to be diagnostic only, but I left it in because it’s so darn cool and stoney.
Plus it’s useful to people new to subtractive music synthesis. It will help them really understand what is going on with the waveform. I’d encourage others to add these into your synths. I really think this should be a “thing.”
Here’s a video on how to make pro-looking skins.
SYNTHEDIT TIPS THAT WEREN’T EASY FOR ME TO FIND:
–If your VST doesn’t show up in your DAW after outputting the VST from SynthEdit, usually if you close a DAW and re-open, new VSTs are scanned and included, if they’re in your defined folders. I’ll add that in the doc.
If they don’t, in Cubase, go to Devices / Plug-in Information then on the VST Plug-ins tab, hit both Update and Update Plug-in Information. And on that same tab, you can add folders to be scanned, if the folder you’re outputting VSTs into isn’t being scanned, under VST2x Plug-in Paths.
All DAWs have a similar feature to add folders, and to re-scan, but it may be in a different place. Google to find it if you can’t.
You have to put the .dll AND the folder that are made by SynthEdit in that folder. With the .dll outside the folder, like this:
–You have to right-click and hit “refresh skin” on the panel view in SynthEdit before you’ll see your new skin look after changing the skin.
–Input and output I/O module connection to the rest of the project is a little tricky. I made a complete synth that worked in the SynthEdit program, but wouldn’t work in Cubase 5.1 when I output the VST.
This is because some older DAWs won’t work with mono VSTs. The workaround in SE is to make it a stereo output even if you are only outputting a mono signal. Examine and copy what I did in my downloadable example for LuckyWorm, above. It’s an inelegant fix that makes this work perfectly.
I’ve dealt with VSTs by other people that have this issue. There’s one that emulates Taurus Bass Pedals with this issue.
There is a DAW workaround with patches and MIDI channels and routing where you can make this work, but unless it’s the holy grail of VSTs, most people will just search and find the other Taurus pedal emulator that works in Cubase. lol.
So if you want your VSTs backwards compatible, and usable by the largest number of people, make ’em stereo even if they’re mono.
–Obviously, for whatever folder SynthEdit outputs to (this can be changed), you’ll need to go into your DAW’s settings and add that folder as one of your plug-in folders. And sometimes you’ll have to refresh your plug-ins in your DAW to get the changes to show up when you output a new VST version.
Sometimes, the older version will still show up. Here’s a workaround: in the DAW, change the instrument in the track with your VST to some other VSTi you have. Hit SAVE on your project in the DAW.
With your DAW still open, delete the files for the VST in the VST folder. Output your new version of the VST from SE. Hit “refresh” in the DAW’s plug-in settings.
Add the new version of the VST back in to that instrument track. Hit “refresh” in the DAW’s plug-in settings.
If THIS still shows the older version, do all of the above, but restart the DAW before these last two steps: “Add the new version of the VST back in to that instrument track. Hit “refresh” in the DAW’s plug-in settings.”
–Sometimes you have to reconnect the audio in SynthEdit for it to play sound. Especially after you have another sound program, like a DAW or Windows Media Player, open while you have SE open.
Top Vst 2019
If the green button shown here is grayed out rather than green like this:
click the button once and it will turn green. Then SE will have control of the sound card again.
—In SynthEdit, Inputs are usually on the left, and outputs are usually on the right. And signal flow in the creation interface is usually from left to right. Of course, you can move anything anywhere and run the onscreen “wires” all directions, but you’ll still use inputs on the left of modules and outputs on the right of modules.
–Outputs generally wire into Inputs.
–And you can’t connect different types of modules (Inputs to GUIs, for instance), without a converter. But there are converters too. As shown in the above screenshot, they’re under “Conversion.”
–Adding presets is amazingly not well documented anywhere.
Basically you put the “Patch Automator” (MIDI/Patch Automator) into the main container.
Hook the MIDI In on the Input IO Mod to the MIDI In on the Patch Automator:
Then hook the MIDI Out on the Patch Automator to the MIDI Out on your output IO Mod:
Then twiddle the virtual knobs and sliders on your GUI Panel in SynthEdit until you have a sound you love. Then click and type type in a groovy and/or descriptive name (in the area where I put the preset “Diet of Worms” in the above pic.) Then save the SE project. Do this until you have as many presets as you’d like.
Fun fact: you can set preset values on modules lower or higher than they show in the GUI. On my synth VST, ShinyDirt, I did this a lot.
I also “wired” one of the two LFOs “wrong”, and added a drop-down picker switch to be able to do different things with the mod wheel for every preset. This makes a basic synth cool, unpredictable, and fun. People noticed. That synth was much more popular than my first synth.
–You can export and import your presets as text files. Click on File as shown in the pic above (the WORD file, not the drop-down arrow to the left of the word that reveals all the presets.) You’ll get this menu:
From there, you can “Save Bank” to output your settings. Or “Load Bank” to input settings.
This can be useful for a few things:
–If you’re working with another person on the same synth, you don’t have to stop work for your friend to make presets. (Though the presets he makes won’t include any modules you add. But for instance, two people in different locations could each make a bunch of presets, each person making half of them, then email them to the Dev, where she can import them back into the master file before outputting the VST.
–You can even edit the file with a text editor, since it’s just an XML file.
The file extension is the proprietary
.xmlbank
but you can change that to
.txt
Then move around the order of the presets, then change the file extension back to
.xmlbank
and re-import it into your SE project.
This is an easier way to do that than using the “COPY” function next to “File.” That’s a clunky, kinda Win 3.1 way to do it. Though it does work. And that’s probably better if you only want to move a few around.
Editing XMLs can be tricky. They’re supposed to be a little bit fault-tolerant, but in my experience, aren’t always.
–Sometimes you have to save a project to make a value change show. Especially if you change the default values on sliders and switches. Saving the project will also make an item show a name change on the VST’s panel GUI.
–To align the controls on your final VST panel to be to a grid, you need a grid. There’s a third-part grid module that’s free. Grab the “GUI” set here:
(32-bit or 64-bit, depending which SynthEdit you run.)
You unzip and add the module to your modules folder.
On Win 10, SE 32-bit, that’s here:
C:Program Files (x86)SynthEdit 1.3modules
Then refresh you modules in SE (Edit / Preferences / File Locations tab / Re-Scan Modules Button.)
Then the hatch will be accessible under RH/GUI/Display/RH-Hatch:
Then drag the module onto your panel view, then right click and send “to back.” It adds a grid which you can stretch over the surface of your panel GUI:
Then you can nudge your knobs and sliders until they line up. Whatever you want nudge, click once on it to select, then use the arrows on your computer keyboard to move it.
If you like that, the guy has a tip jar. It’s always nice to tip people a few bucks if you can when they make things that make your life better.
FOR PEOPLE WHO KNOW SOME PROGRAMMING
There’s also a SynthEdit SDK (software development kit) for developing custom modules.
These are things you can make to use yourself in VST production, and also can share with others.
Some of the modules are hosted on the SynthEdit website.
Some are just linked there.
But third-party SE modules are not rolled into updates of SynthEdit.
This makes sense. Because then Jef would be expected to offer free support for other people’s work.
(And as someone who has run a software company, giving away FeenPhone, I totally understand that choice. A lot of people demand tech support NOW, even on free or inexpensive software.)
TIP: If you use someone’s third-party module in your VST, mention it and link them in your ReadMe and website listing.
And always include a short ReadMe in the zip along with your VST files. See my VSTs for an example of things that should be in the ReadMe text file.
ALL IN ALL
SynthEdit is a great resource, reasonably priced, and has a good community to make the world a better place through synthesizers.
It’s easy to use SE for basic stuff. But it’s also very robust if you really want to take time and make something with complex functions.
SynthEdit: Use it, teach it, and tell two friends.
TIP: When adding your VST on the KVRaudio site, do NOT pick the option “Powered by SynthEdit” to credit synth edit.
Instead, put “made with SynthEdit” in your description.
If you pick the “Powered by SynthEdit” from the drop-down menu, it automatically categorizes your VST as “SoundWare” and grays out the options to change that to Instrument or Effect.
I spent a lot of time and wasted effort one day going back and forth with the admins learning about this bug that they consider a feature.
I suggested to KVR that they remove that. They explained that it’s not supposed to be an option, but can come up if you search it in the drop-down list, since it shows every dev with listings on KVR. “Powered by” just made sense to me. But it actually means means “works with”, like how a plug-in that ONLY works in Reaktor would be “Powered by Reaktor.”
AUTHOR BIO:>
Michael W. Dean plays in the heavy synth rock project, BipTunia. He used to play in the Warner Brothers band, Bomb. (Produced by Bill Laswell.)
Michael directed the film Hubert Selby Jr: It/ll Be Better Tomorrow, did some of the music for that film, and for other films.
He has toured Europe lecturing on & teaching film and audio production.
Michael does the syndicated radio show, Freedom Feens. He also runs the site Creamy Radio Audio, which has tutorials on getting great spoken audio on almost no money.
He created the BipCot NoGov License (an alternative to copyright).
In his spare time Michael hangs out with his wife & cats, and makes VST synths.
He also does some other stuff that’s not music related.
LEGAL, ABOUT STEINBERG’S NEW LICENSING: Steinberg, the company that makes VST technology, has updated their licensing requirements for VST developers, and this includes those of us using SynthEdit.
The author of this article runs the boutique VST synth studio, BipTunia Synths. BipTunia Synths has been licensed for VST SDK use by Steinberg. Agreement countersigned by Steinberg on August 23, 2018. Compliance info for developers is here. There is also information on the need for use of specific language, and images, in this document: VST3_Usage_Guidelines
That’s the VST3 guidelines, but apply to the VST2 licensing also, by my reading of the VST2 License agreement that developers are supposed to sign and send to Steinberg. (This is not legal advice, and I am not an attorney. Consult an attorney if you don’t understand the documents.)
Download that PDF, fill out, sign and scan, and email to reception@steinberg.de
There is also info on the SynthEdit site, here.
I don’t make VST3s, so you’ll have to ask Steinberg what the procedure is for licensing use of that.
Also note they don’t want people to use “VST” in their company name, and they seem to not want people to use variations of VST, like “VSTi.”
You don’t need to Fax the document. I printed it, signed it, scanned it, and sent a scan. Steinberg countersigned and sent back within a few days.
Be sure to do this if you make VSTs, even with SynthEdit, as Steinberg has been sending take-down demands to sites that host VSTs by non-complainant devs.
Deadline for this is supposed to be October 1, 2018. Not sure if they’re allowing extensions. You’ll need to ask them.
You can grab the required website VST logo below:
LEGAL: VST® is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.
Introduction
Microsoft announced that it would offer Visual Studio Express free of charge forever. Though the Express version of Visual C++ (hereafter referred to as VC++) has some limitations, it’s still a great tool and it’s nice to see Microsoft taking some steps to support the developers writing software for their platform. This document will describe how to get VC++ installed and building VST plugins. It assumes that you have prior experience developing VST plugins, and are familiar with the structure and layout of the VST SDK.
If you are trying to write VST’s in a language other than C++, than this guide is not for you. There are lots of other frameworks out there for developing VST plugins in other languages (such as C#, Java, Ruby and Python, just to name a few).
This tutorial will walk you through the process of installing and configuring the tools you’ll need to build your own VST plugins with Visual Studio, and creating a simple VST plugin with optional support for a VSTGUI frontend. This guide only covers building VST 2.x plugins, as the VST3 SDK is not very widely supported yet. Note that Steinberg’s website is a bit confusing and it is easy to accidentally download the wrong version of the SDK, so double-check to make sure that you have the 2.4 SDK.
Download required packages
- Steinberg’s VST SDK, which requires you to make a free Steinberg Developer account.
- Microsoft’s Visual C++. This guide uses the 2010 Express edition, as it was the latest version at time of writing.
- Libpng and zlib (optional)
Install Visual C++
If you already have a working installation of VC++, you can skip this step. Otherwise, download VC++ and install it. The standard installation should be OK, but you can choose to perform a custom installation if you don’t want documentation or other stuff installed with it. Before installing VC++, you must remove any other versions of VC++ on your computer.
Next, download and install the Platform SDK, which will provide you with the standard header files and libraries you’ll need to build software. You may choose to install VC++ anywhere on your hard drive, but the default location is C:Program FilesMicrosoft Visual Studio 10.0
.
Creating your project
Create a new project of type “Class Library”, which we’ll call YourProjectName. In the rest of this tutorial, whenever you see YourProjectName, replace that text with the actual name of your project.
In Visual Studio 9, you’d make a new project with the wizard found at File -> New -> Project. Select Visual C++ -> Win32 Console Application, and choose a directory for your project. When the wizard opens, press “Next” and select DLL as the Application Type. Also check the “Empty Project” box.
If you prefer not to start with an empty project, then you can remove all of the files that VC++ creates for you, but keep the resource.h
and YourProjectName.rc
files, and remove any references to these files (such as YourProjectName.ico
being listed in the resource file).
Add Source Code to the Project
If you already have source code for your plugin, simply add it to the project. Otherwise, you need to create the following files:
- YourProjectName.cpp
- YourProjectName.h
- resource.h (Only needed if building a plugin GUI)
- YourProjectName.rc (Only needed if building a plugin GUI)
You will also need to add the files from the VST SDK, which includes everything under the vstsdk2.4/public.sdk/source/vst2.x
and vstsdk2.4/pluginterfaces/vst2.x
directories. I usually prefer to manually make groups for these directories and drag the files to the groups from Explorer, as dragging the entire “vstsdk2.4” directory to VS can cause it to choke when it tries to add a bunch of unused files to the project.
To start out with, the plugin’s entry point header file (YourProjectName.h) should look something like this:
The accompanying class definition (YourProjectName.cpp) should look something like this:
Note that your project won’t compile just yet, but be patient!
The above code samples are simply blank entry points which don’t do anything exciting. The VST SDK offers lots of methods which you can override in order to do things like setting parameters, receiving MIDI messages, and so on. These things are beyond the scope of this tutorial; if you don’t know what code to put inside of processReplacing, try checking out the “again” example distributed within the VST SDK in the public.sdk/samples/vst2.x/again
folder.
You must also create a module definition file for your project, named YourProjectName.def. Usually this file is placed in the same directory as the VC++ project file, but you may place it somewhere else so long as this definition matches the Module Definition File settings in the Linker section of the project preferences. This is just a plain-text file which should contain the following text:
Configure build settings
Go to the project settings either by right clicking on the project in the solution explorer and then selecting “Properties”. Make the following changes to the project for all build configurations:
- General
- Character Set: Not Set
- Common Language Runtime Support: No Common Language Runtime Support
- C/C++
- General:
- Additional Include Directories:
- (or wherever you put the VST SDK)
- Your source code directory
- Any other directories which you may have header files stored in Global SDK directories, such as
- Additional Include Directories:
- Preprocessor:
- Preprocessor Definitions:
- For Debug builds you may also wish to add
- If you wish to use PNG graphics for a VSTGUI frontend, add
- To avoid lots of compiler nags and warnings, define
- In some cases, you may also need to define
- Code Generation:
- Runtime Library: Multi-threaded. Multi-threaded debug may be used for debug builds. This will build the VC++ common runtime library statically into your plugin, increasing its size by approximately 200Kb. If you choose to use the CRL as a dynamic library, then you must also distribute a copy of the CRL with your application, which complicates deployment and distribution.
- Precompiled Headers:
- Precompiled Header: Not Using Precompiled Headers. Yeah, this makes rebuilding a bit slower, but will avoid a bunch of weird errors as you are getting your project set up. Once you get the project building you can revisit this step.
- General:
- Linker
- General:
- Additional Library Directories: Add any other library directories which your project depends on.
- Input:
- Additional Dependencies (for Release builds):
- libcmt.lib
- uuid.lib
- shell32.lib
- ole32.lib
- gdi32.lib
- User32.lib
- advapi32.lib
- zlib.lib (only if you are building with a GUI)
- libpng.lib (only if you are building with a GUI)
- Additional Dependencies (for Debug builds):
- shell32.lib
- msvcrtd.lib
- ole32.lib
- gdi32.lib
- User32.lib
- advapi32.lib
- zlib.lib (only if you are building with a GUI)
- libpng.lib (only if you are building with a GUI)
- Ignore Specific Default Library (for Release builds):
- msvcrt.lib
- libc.lib
- msvcrtd.lib
- libcd.lib
- libcmtd.lib
- Ignore Specific Default Library (for Debug builds):
- libcmt.lib
- libcmtd.lib
- msvcrt.lib
- Module Definition File: YourProjectName.def
- Additional Dependencies (for Release builds):
- General:
Adding support for VSTGUI (optional)
Include VSTGUI support in your plugin, simply add the VSTGUI files into your project in addition to your own editor class. At a very minimum, these are:
- aeffguieditor.cpp
- vstcontrols.cpp
- vstgui.cpp
Adding support for PNG graphics (optional)
If you would like to use PNG’s in your plugin instead of BMP graphics, you will need to also build your own version of libpng and zlib. Download the source code for both libraries from the links given in the “Requirements” section of the document and place them in the same directory. There is a Visual Studio project for libpng which will also build zlib for you; it is located in the projectsvisualc71
directory. In order to get the projects to build correctly, you’ll need to rename the source code directories to simply “libpng” and “zlib”, removing the version numbers from the directory name.
When you open the project up, VC++ will run you through the project conversion wizard. Convert the project, and change the “Runtime Library” settings in both libpng and zlib to be Multi-Threaded, as described above. Unless this step is performed, the dependency on the CLR will be present in your project. Next, choose the LIB ASM Release or LIB Release build style and build the project; if you build the libraries as DLL’s, you will be unable to statically link them into your plugin. The project should build ok, but throw a few errors when attempting to run the pngtest files. You can ignore these problems, as the libraries will still be correctly compiled and can now be linked to your project.
Visual Studio doesn’t need to have the libraries within your actual project. Instead, place the libraries in a directory of your choosing and be sure to add this path to the list of “Additional Library Directories” in the Linker preferences for your project. You may choose to place the libraries in the same directory as the Microsoft Platform SDK stuff, but I personally prefer to keep them in a separate directory checked into version control. Also be sure to add references to libpng.lib
and zlib.lib
for your project in the “Additional Dependencies” section of your Linker preferences for the project.
The path must be relative to the location of the project file. Then, in resource.h
, add the following preprocessor definitions:
Making Vst Plugins In 2019 Mac
Now you can use IDB_BITMAP1
(or any other name of your choosing) in your code when creating new CBitmap objects.
I have heard some reports of vstgui.cpp
not compiling properly due to the missing symbol png_set_expand_gray_1_2_4_to_8
. Changing png_set_gray_1_2_4_to_8
to png_set_expand_gray_1_2_4_to_8
in vstgui.cpp
seems to fix this issue.
Final considerations
VC++ ships with an optimizing compiler, but sometimes the compiler will choke on certain files and optimization must be disabled. In particular, I have experienced this with Laurent de Soras’ FFTReal libraries, since they are written as template classes. In general, however, optimization is a good idea, as is “Eliminating Unreferenced Data” (in the linker settings). The “Whole Program Optimization” setting appears tempting, but usually results in dozens of build errors and problems, so it’s best to avoid this. Also, be sure to use the optimization features of this compiler and linker, as they can greatly boost runtime performance.
If you are developing on a multi-core machine, then you might need to disable parallel builds by setting the number of parallel builds to 1 under Tools -> Options -> Projects and Solutions -> Build and Run. In past verisons of VS, I noticed that the compiler does not always link projects in the order one would expect, which caused odd errors during linking about missing symbols. However, VS2010 users probably shouldn’t need worry about this setting.
Unresolved symbols when linking
Sometimes you may see errors like the following:
If you are getting errors in your build about missing symbols, make sure that you double- and triple-check the debug and release configurations for the library configuration above, since some of the libraries which are used in one build style are specifically excluded from the other. Also, when you close and re-open the project’s build properties, VS always “forgets” the last selected build style, so remember to check and set this appropriately.
Vsts 2019 Download
Also, you should check to make sure that the Platform SDK was correctly installed on your system and that your project’s include and library paths are pointing to these directories.
Unresolved external symbols
If you are seeing errors like this:
Then this most likely means that the file which contains the given symbol is not correctly added to the VC++ solution.
Linking errors with symbols defined multiple times
Free Vocal Vst Plugins 2019
This is undoubtedly one of the most frustrating problems which can occur when building a VST in VC++. If you are seeing error messages like this, then it most likely means there is some problem with your library configuration:
Making Vst Plugins In 2019 Free
Most likely, the libcmt and msvcrt libraries are being included incorrectly in your build. Double-check the library list above, keeping in mind that the recommended configuration uses libcmt for release builds only, and msvcrtd for debug builds only. /autotune-vst-plugin-fl-studio.html.