SynthMaker

Dark Moon vsti

Archive · 2011 11 old posts

From the original SynthMaker forum (2004–2014), with its members’ names and dates.

acg2010 ·

Here is my latest project I call Dark Moon. It started out as a organ vst. It looks rather plain and simple and the GUI color scheme is not the best. However, I took all the techniques and approaches I have learned from this forum to combine into one vst plugin.

Features:

4 oscillators with detune 4 x 4 mixer pad with randomizer 2 filters - basic variable state and a custom biquad filter One ADSR to control all four oscillators either as together, or after unlocking, individually Individual oscillator ADSR "Lock" (then changing ADSR knobs will not affect the settings) ADSR setting readout Oscillator ADSR wireless "Lock" LEDs Pitch adjustment Pitch modulator Freeverb module (on-off only to keep it simple)

The inside connections are really a mess but I wanted to keep necessary modules to a minimum. That is why I created the single ADSR that can be unlocked so only one set of knobs and scaling modules would be necessary. I may go back and try using busses to help clean up the schematic.

However, I have a question: When creating the ADSR lock, I needed to be able to hold the final value to the ADSR. I tried several things mostly with a selector module. I finally came up with the module shown. The probelem is, I don't understand why it even works and aftering reading Trog's Triggers tutorials, I was even more confused what with forward and backward triggers propagating. I bet there is a more simpler way to do the same thing. If you have any thoughts, I would appreciate hearing from you.

Thanks, Ph D(J) acg2010

cyto ·

Yeah, I think you're making things a lot more complicated than they need to be. Here's a quick little example of how you could achieve the same results by switching on and off GUI components...

In the example, I changed the BG color of each ADSR so you could tell they are changing. If you were to have each one look the same, the user wouldn't know that one module is getting replaced with another, but he/she would actually be changing a different set of knobs for each ADSR. Then you don't need to worry about such complicated s&h routines.

-cyto

trogluddite ·

This is a strange one.

According to my tests, the 'selector' version of the control lock should not work. I tried several different trigger orders just to be sure - but selecting the lock setting always results in a zero output for me (as I would expect).

However, I believe that there was a time (with the old style trigger system), that triggers to the 'index' input of a selector did not create a trigger at the selector outputs - meaning that the output only changed when the value at the currently selected input changed, but not when doing the switching itself. With the newer trigger system, you can get the same behaviour by putting a trigger blocker at the index input of the selector.

Cyto's solution is by far the most elegant way to control multiple things with less screen space, as it ensures that when you switch 'pages' to a different envelope, the knob positions will always show the true current values.

However, just for completeness, here is the simplest way to enable/disable changes from passing through a section of schematic...

This effectively splits the output from the knob into the 'value' part and the 'trigger' part - when the triggers get blocked by the trigger switch, the sample and hold cannot get updated, so it hangs on to the old value.

acg2010 ·

Thanks cyto and trogluddite for your suggestions and explanations.

trog - I am using SynthMaker CM (version 1.0.5). For the selector version to work (at least in my Synthmaker version), you have to connect the switch to the float sample and hold module first before connecting to the selector. Also you have to connect the float out on the ADSR path first before connecting to the float sample and hold. Seems to work for me, I must have just been lucky. However, your solution is simpler and saves on modules and the trigger path is easier to understand.

Thanks again,

Ph D(J) acg2010

acg2010 ·

Version 2 of Dark Moon vsti plugin using suggestions by cyto and trogluddite. I finally had to swap out the Freeverb with the stock reverb module to avoid runaway CPU use on my PC. Also added a comb filter and noise gate. I am somewhat pleased with my cheesy animated Dark Moon logo (if you can't wow them with the sound of the vst, wow them with smoke and mirrors). Used a free moon graphic in Paint.net and created various frames. Then used Stitchpng software to create the animation and imported into my tubes animation module created for my guitar amplifier simulation vst project. Then used the updown counter with a tick25 as timer/trigger to run the animation.

acg2010 ·

Here is version 3 of my Dark Moon vsti. I have tried to mimic the x-y pad modulation automation found in HG Fortune's fine vstis. I expanded the oscillator Randomizer to include a circle, spiral, line, and some random patterns and added a direction (just swaps the x and y coordinates) and an on-off switch. Changed the Randomizer animation of the 4 x4 mixer pad dot to a faster speed with the tick 100 module. I know the modules used for the Randomizer could be simplified or easily coded and could be optimized considerably. It is interesting that I had to brush up on my high school math (hadn't used in nearly 30 years) such as equations for circle and spiral and use of sin and cos.

I also added the stock trance gate module to add some additional sound creation tools. Things I want to still add: a knob to adjust the Randomizer animation speed in the 4 x 4 mixer pad, change the 4 x 4 mixer pad dot graphics to something with a gradient to make it show up better, and cleanup the GUI graphics. The presets are not all that great but if you play around with the filters and other adjustments, you can generate some interesting sounds.

lesobrod ·

Hi! Interesting work, it helps me somehow for my own VST, thanx!

I know some people on forum (infuzion esp. 😉 ) who don't like Wireless connectors, but IMO it may helps to improve design of your osm. And think about Pack-Repack primitives, I see 3-4 places where it be good!

acg2010 ·

lesobrod,

I am not that familar with using pack unpack. I tried it a couple of places mostly in the ADSR module (seems a bus might be better there), but could not get it to work. Would you maybe point out or take a screen shot and circle where you see pack unpack could be used, post it, and I will try. I would appreciate it and I would learn from it as well.

Thanks,

cyto ·

acg2010 wrote: I am not that familar with using pack unpack. I tried it a couple of places mostly in the ADSR module (seems a bus might be better there), but could not get it to work.

The packing/unpacking features will only work on mono stream data. Basically, the packing/unpacking method is a way to get up to four streams of mono data to be processed in parallel. Modern CPUs have the ability to process calculations on up to four different SSE "channels". The packing module basically loads up the four individual streams of data into one stream of four "channels." Below is a example of how you would hook up a packed module...

Notice in the top example, one block of code is affecting all four streams and there is only one instance of the code running. The bottom example shows the traditional way where you would need four separate blocks of code to achieve the same results. The reason you can't use this in the ADSRs is that the ADSRs are using poly stream data. SM is in fact (behind-the-scenes) packing this data into the four SSE channels as needed.

In a synth like yours, the obvious place to use packed streams is in the "stereo" effect section near the output of the synth. But, looking over your schematic, I noticed that you have a lot of the "effects" in the poly section. You may want to rethink that. Essentially, you are requiring the CPU to make calculations for every active voice, when in reality, it may only need to be done on the left and right channels (and therefore could be "packed") or even only on a single mono stream. The only reason you would want to have "poly" effects is if your were modulating some of their parameters with envelopes or some other means that would need to be re-triggered for each voice. I don't see anything like that in your schematic. Try moving your "combiner" modules closer to the main voice generator (ie. right after the ADSRs) and then process your filters, dynamics, reverb, etc in mono. Doing so will significantly cut down on the CPU load for this synth.

-cyto

acg2010 ·

Thanks cyto for the example and use of pack unpack. I will try your suggestion of converting everything to mono after the ADSR. However, some of the pre-built modules are coded and I cannot change them.

Thanks again,

acg2010

acg2010 ·

Here is version 4 (probably last) of my vsti "Dark Moon". I added:

1) Borrowed template/save module from Step LFO and added it to the Trance Gate to allow saving of up to 4 user drawn gates. 2) Changed out the xy pad with one started by oddson and modified by infuzion and angular momentum. 3) Followed trogluddite's suggestion for the dot bitmap - animation is much better, no flattening of the dot edges. 4) Borrowed modules from oddson's xy pad record module and added to existing xy pad to allow user defined xy pad patterns with play back. 5) Added a speed adjustment to the xy pad play back in addition to the speed adjustment for the programmed xy pad animations (circle, spiral, etc). 6) Added a sub oscillator with on/off and drive adjustment. 7) Changed up the GUI some.

This is about as far as I can take this synth since I am at 99.6% module capacity, without writing code, recreating modules to allow optimization as has been suggested by others here, or using a newer version of SynthMaker.

Thank you to everyone that provided help, suggestions, or feedback. I have learned a lot while creating this but still have a long way to go yet.

Ph D(J) aka acg2010

Wrote something here? To have a post removed or your name hidden, write to [email protected].

Before your first post

A few rules keep this a friendly place. You agree to them once.

Shown next to what you post, here and in the app. It doesn’t have to be your real name: 3–24 lower-case letters, digits or _ (capitals become lower case, spaces become _).

    Then your post goes up straight away.

    Delete this reply?

    Open it in SynthMaker?

    It goes on the track you’re editing there, in place of that track’s sound, and into My sounds. Your other tracks stay as they are.

    Want to keep that track’s sound? Start a new song in SynthMaker first (Song › New song), then open this.

    Report this reply?

    Only the developer reads reports. The person isn’t told who reported them.

    What’s wrong with it?

    Block this person?

    You won’t see their posts and replies here any more. They aren’t told, and you can unblock them at any time.

    People you’ve blocked

    Their posts and replies are hidden from you. Unblock someone to see them again.

    The community rules

    A few rules keep this a friendly place. Everyone agrees to them once, before their first post.