Project Outline

My project involves the creation of a "phat house jam." I have been a fan of house and other forms of electronic dance music for some time. I also like to tinker with beat sequencers such as Fruity Loops. The aim of this project is to delve more deeply into the creation of electronic dance music on several levels. First, utilizing the Steinberg Virtual Studio Technology (VST) SDK, I am creating my own software synthesizer, which will form the lead component of my composition. The synth will utilize simple FM and, if time permits, may incorporate additional features to control timbre and pitch. Then, using various other samples and models, I would like to form a modern dance composition using FL Studio. In particular, I would like to further explore the effects and generators in FL studio to try to achieve a professional-sounding result from the ground-up.

The inspiration for my project is primarily to create something that people would like to dance to. I am a fan of producer/dj acts like ATB, Deadmau5, Tiesto and would like to see what sorts of sounds I can come up with to mirror their work. I'm also curious to see the ways in which my composition can find its own unique sound -- since my electronic music tastes are somewhat eclectic, it will be interesting to see what influences ultimately appear in the final result. On the production side, if time permits, I would really like to add and mix a vocal track. Aside from that, my goals are really quite open ended -- most importantly, I'm starting with the aim to produce something fun and will see where it goes from there.

 

 

 


The Result

My composition, titled "Outer Space":

Outer_Space.mp3

Synth VST Plugin:

wicked.dll

Source Code:

source.zip

Contains:

PDragger.h, PDragger.cpp - Custom VSTGUI widget for a 2d dragable interface

View.h, View.cpp - Custom VSTGUI for Alex's Wicked Synth

vstsynth.h, vstsynth.cpp, vstsynthproc.cpp - Core algorithm files for FM synth control


Week 1 - April 7

My week involved getting the development environment set up and effectively getting a "hello world" application to run. WIthin the VST distro, there are several example applications. I found a good example how-to on getting the development environment setup here. It basically involves setting up library paths and build options. The result is a .dll file which can then be loaded up in visual studio.

Once imported into FL Studio, the product looks like this:

Basically, the (relatively poorly documented) API provides the ability to define knobs which vary from floating point values 0-1. A knob is automatically created to represent the particular parameter.

vstsdk2.4\public.sdk\source


Week 2 - April 14

Using the public sdk example as a baseline, I implemented a simple FM algorithm. I added an additional "sin" voice and parameters to control the carrier and modulator separately as well as to modify the modulation index. The result looks like this:

Going left to right, top to bottom, the various parameters are fairly straightforward:

Wave 1 - Carrier shape

Levl 1 - Carrier Amplitude

Wave 2 - Modulator shape

Levl 2 - Modulator Amplitude

Mod. Ind - Modulation Index

Volume - Overall Amplitude

A demo of carrier timbres, modulator timbres and finally a mod. index sweep is available here.

WARNING: this is not the most pleasant sound...

Source Code:

vstsynth.h

vstsynth.cpp


Week 3 - April 21

This week was the beginning of my actual composition with FL Studio. FL Studio is a fairly standard beat-sequencer, which allows users to create and layer loop-based patters. It is also particularly powerful in that it allows automation of nearly any parameter of any instrument.

My first demo is still relatively crude, but it illustrates the automation of various instrument parameters. The "main synth" line is given a wah like effect by swelling the mod. index to emphasize various parts of the melody. The more string-sounding synth is automated using a volume swell.

The demo is available here.

I also began implementing a GUI for my synth using the VSTGUI library. The VSTGUI library is included with the latest distribution of the VST SDK. It is a cross-platform GUI api which interacts well with the VST framework. The GUI at this point is more or less a "hello world" with 2 functional knobs. Ultimately, I would like to extend the GUI framework to not only spruce up the default knob-based approach, but also to include some advanced features such as a 2d dragable interface.

In order to speed things along, I found a tool called VSTGUI Builder online. VSTGUI Builder essentially works in the same way that the drag and drop widgets work in Visual Studio, displaying a rough idea of what it will look like and leaving it to the developer to hook up the pieces. It can auto-generate boilerplate code for a VST GUI. It lacks several key features, however -- in particular, it cannot save. It is also based on an old version of the VSTGUI API and it took me a bit of tinkering to get the produced code to compile. In particular, a number of exposed variables have been moved into inherited functions in VSTGUI 3.0 (such as setEditor).

Source Code:

View.h

View.cpp


Week 4 - April 28

The Synth is DONE! Or at least it is about 99% feature complete now. I added a new gui, including a 2d dragable region, which allows control of amplitude and mod. index simultaneously. The gui is modified from several online sources and based on a Halo theme.

Each oscillator has a tone and amplitude knob. The tone knob is now continuous in that it can produce a range of different timbres rather that discretely a sine or triangular wave.

 


Week 5 - May 5

The beginning of my composition -- I've got some pretty good ideas about where things are going now and a number of melody ideas, rhythms and effects nailed down. I've been able to create most of the general tonalities I wanted with my synth. In particular, I wanted a sort of "crunchy bass" type sound, which I achieved with some basic modulation without a lot of color. For the arpeggios I used a heavier modulation with wider bandwidth tones and then applied some delay and a low pass filter. The one tone I have not yet been able to replicate well is the sort of epic/ethereal lead synth type tone. An example of the tone I would like is here (Albin Myers - Hustle Up). A demo of the current state of my composition is here.


Week 6 - May 12

This week was spent adding to my composition. I added several new voices, sprucing up the various timbres a bit. I've got a nice breakdown in the middle now with a more aggressive lead synth that goes to the outro. I'm also fussing around with the various automation parameters. The breakdown is here.


Week 7 - May 19

Problem! This week it became clear that there was a fundamental problem with my monophonic synth algorithm. I had noticed that there were some clicks in my synth as soon as I first tested it. After all, the code that it is based on, a two-tone synth, was not really written to be a full-featured musical synth, but rather just a basic intro into the Steinberg API.

I had planned on simply adding an envelope around the current note in order to fix the click problem. What I failed to consider was what happens when two notes are closely spaced together -- namely that there must be some sort of smooth interpolation between these notes in a monophonic synth. After some fiddling with it, I ended up doing a major overhaul to the code.

The result now is that notes are independent of each other and the synth is polyphonic. As a result, I was able to modify individual note parameters more easily. To illustrate this ability, I added envelope attack and release controls to my new synth gui.

New "Note" Class Source:

vstxsynth.h

vstxsynthproc.cpp

 


Week 8 - May 26

This week was spent putting the final touches on everything. One of the things that I was a bit unhappy with were the relatively abrupt transitions from section to section. There is now exactly 1 synth in my composition which I did not write. I am using a 3osc synth with each oscillator set to "noise" and then passed through a sweeping low pass filter in order to create a whooshing effect:

Other than that, there were minor modifications to timbre and I messed with the envelope of a couple of my synths as well. Enjoy my composition, now titled "Outer Space" here.