Thursday, January 31, 2008

The ability to change the gui made it neccessary to implement a simple splash screen.

This one only shows the synth's name, current version and copyright for 2 seconds. And only on first load and open.

Sorry, but I have to do this :)
I finally decided how to use the free space in the lower right corner of the gui: I added an "Audio Input" panel.

Now you can use the sidechain as a modulation source and you may route it through the synth.

It is also possible, to use 2 different signals, e.g. a modulation signal on the left channel and an audio source on the right channel.

AudioVolume and AudioPanning are added to modulation destinations.

I think this is a good solution ... and also sounds very interesting^^

Tuesday, January 29, 2008

Next version will be v0.5 (comming soon).

Changes since v0.4:

BUGFIX: Filter overdrive caused explode protection to reset the filter
DESIGN: Gui changed, gui.dat added
IMPROVEMENT: Reduced alias to nearly zero on morph sweeps
IMPROVEMENT: Reduced alias on AM modulation (slightly).
PRESETS: Added some more evaluation presets. (Still not the final ones)
MIDI: More midi CCs implemented

I think I'll test this new version for a few days and release it on friday.
I am now focusing on reducing the aliasing of CS2 when using sync or AM. May the triangle waveform will lose it's morphing abilities.

Monday, January 28, 2008

Today I excluded the gui resources from the plugin dll. CetoneSynth2 can now be run with different skins (which of course must be created first). Simply exchange the 'gui.dat' file. C# tool for creation is done: Text file describing sizes and positions, some bmp files. Start the tool, copy the .dat, ready.

Have to go to bed early today ... cu.

Well, well, there has been nothing wrong with my old formulas to calculate the sync freq ... this one is nicer though. The aliasing when using sync has some other source: The hard edges when restarting the oscillator.

I'm checking on how to smooth those edges without having to double (or quad or ...) sample the oscillators.

Sync must be considered 'experimental' at the moment.

CHANGED: Mod6 amount mod dest behaviour.
Today I'll revise the oscillator code in CetoneSynth2. Sync still does produce lots of aliasing when using with high frequencies. After thinking about this (when I was trying to find get some sleep) I've come up with a simple equation to calculate the frequency of the slave oscillator (modulated by the master) for anti aliasing:

slave-frequency + master-frequency.

I'll test this today and also give the oscillator a wider frequency range (note range stays (0-120)) to avoid aliasing.

Man am I tired ... *sigh* ... fell asleep at about 0430h ... had to get up at 0800h but slept 'til 0915h ... so I'm already late for my 'job' (I'm currently unemployed and have to do some job with <1$ payment per hour (forced by our "agency for work" which gives us money because we don't have a job)).

Sunday, January 27, 2008

I've found another bug: When using full gains on oscillators and filter the filter-explode-security-device resets the filter. This results in high frequency pulse output.

Found and fixed this one. Will be included in the next release (v0.4 still has this bug).

Saturday, January 26, 2008

The synth engine won't change anymore, I hope.

So, CC MIDI input and output is next.
Updated list of modulation sources and destinations:

  1. Velocity (uni)
  2. Keytrack (bi)
  3. LFO1 (bi)
  4. LFO2 (bi)
  5. Envelope 1 (uni)
  6. Envelope 2 (uni)
  7. LFO1 x Envelope 1 (bi)
  8. LFO1 x LFO2 (bi)
  9. Modwheel (uni)
  10. Modwheel x LFO2 (bi)
  11. Aftertouch (uni)
  12. Left audio input (bi)
  13. Right audio input (bi)
  1. Filter cutoff
  2. Filter resonance
  3. Filter gain
  4. Main volume
  5. Panning
  6. OSC 1 volume
  7. OSC 2 volume
  8. OSC 3 volume
  9. OSC 1 pitch
  10. OSC 2 pitch
  11. OSC 3 pitch
  12. OSC 1 morph
  13. OSC 2 morph
  14. OSC 3 morph
  15. OSC 1 spread
  16. OSC 2 spread
  17. OSC 3 spread
  18. LFO 1 speed
  19. LFO 2 speed
  20. Main pitch
  21. Modslot 6 amount
I decided to implement fix no. 2. Doesn't make any great difference in speed. (Thank God I've done all this interpolation stuff reusable and already optimized the coefficents calculation inside the filter.)

Now the filter doesn't explode (with low Q settings it never explodes) but the filter still produces some heavy gains when using high Q, very low FC and deep notes. But this may be considered a feature not a bug^^

I'll now think about this gain thing.

have a good night ...
I've noticed something and that's really bad ... *sigh*

My favourite filter design becomes unstable when quickly changing from greater to lower cutoff frequencies and explodes. The beta version already had a safety condition which resets the filter when it's going to explode (you'll hear a sharp click noise).
After tinking about this for a while I came up with some different kinds of fixes:

1. Limit the minimum FC. But this limit prevents the filter from running nearly closed, so this is not the perfect solution.

2. Always interpolate FC inside the filter. This should prevent the filter from exploding but would also cause some more CPU load. I can't say how much this will be, but I'll check this.

3. Smart interpolation of FC. This means: checking for rapid FC changes towards zero and only interpolating in this cases ... but this would cause massive pops in CPU usage when 'going down'.

4. Exchange the filter. <-- never ever.

Well, it's late at night, I have to go to bed but I will think about this and try some solutions tomorrow.

Stay tuned ...
BUGFIX: Arpeggiator now starts at note 1. (Before this fix it played the 'real' note first)

ADDED: MIDI program changes

Friday, January 25, 2008

ADDED: ModSource Modwheel*LFO2
BUGFIX: Note-off wasn't handled properly in mono mode.

ADDED: ModSources: Modwheel and Aftertouch

CC implementation started (this is sooo easy because of the synth's architecture) ... still thinking about which parameters will be controllable and wich CC should get assigned to it.

TOY: Knobs react on CC input when GUI is open.

The beta is released! Get it here.

[x] Chaos
[x] Interpolation stuff for all volume/panning related stuff
[ ] All mod destinations (2 are missing right now)
[x] Architecture select tool
[x] Clean Non-SSE/2, SSE and SSE2 builds
[x] Some test presets

So ... maybe ... maybe ... there's a wolrd where we don't have to ruun ... nope, maybe I might release the beta tonight.

Thursday, January 24, 2008

Modslots are implemented, glide is working.

Yet modslots are still missing some routings ... but I think I really can release a bet version this saturday.
CS2 now shouldn't crash when using a FS below 44.1kHz.

Things missing (for the beta release) right now are:
1. Glide
2. ModSlots
3. Chaos

I'm getting close^^
Oh ... I forgot something: CetoneSynth2 currently doesn't support standard VST parameters, so the non-GUI editor won't work.

I dunno if I ever include standard parameter stuff, but I will make most of the parameters MIDI controllable.

And now: Again "have good night"^^
Before I _have_ to take a nap, here a picture of the CetoneSynth2 beta GUI.

There's still some space left in the lower right corner, which definetely will get filled until the final release.

And, yes, LFO frames are not yet finished. Also modslots are still missing.

Another 'and': This plugin is designed for a FS of at least 44.1kHz ... anything below may currently crash the plugin and/or produce garbage. (But this might not be a real problem)

Good night and good luck ...

Wednesday, January 23, 2008

Discovered a major bug in MIDI handling ... *sigh* ... corrected^^
"autoload.fxb" added, for easy preset updates or user defined banks.

"autoload.fxb" must be a complete bank, i.e. 128 patches.

Switched filters from 32bit floats to 64bit doubles. CS2 will come in 3 flavours I think: Normal, SSE and SSE2 compiled.

CS2 should work with: Logic (look here), Cantabile Light, FL Studio 7 demo, Cubasis InWired, Reaper freeware ... and I hope many, many more^^

So ... "Heroes" is on TV ... after that: Stargate Atlantis ... cu^^

Tuesday, January 22, 2008

Another sound sample:
LPF sweep, Arp using 128th notes syned to 120BPM
New GUI shot (using cantabile) -> working3.png
I've totally rewritten the GUI to Synth parameter handling after I realized that the Synth engine doesn't has to have functions for making the GUI reading or writing values more easily.
Now the Synth engine only fas functions for setting parameters and only one or two (needed) references to the GUI.

GUI GDI object count should be approx. 60 or 70.
Memory usage is approx. 6MB (when using more instances of CetoneSynth2 the amount of used memory increases slightly (a few KB or so per instance)).

ARP sync is done at sample accuracy (I'll implement sub-sample accuracy today).

Again: reduced CPU usage.
I've tested the plugin on my wife's AMD Duron 1GHz, 16 voices, 3xSuper, 24dB makes a total of 50% CPU usage.
Tests on an AMD Duo 2.2GHz, same sound, about 25% usage.

I think the CPU usage is acceptable.

Stay tuned: Beta version will hopefully be available on the 26th January.

Some words about that beta version: I need your help^^
So, please, all of you, liking my synths, please test CetoneSynth2 in your VST hosts and report bugs to me. This time I want to release a (more or less) perfect product including a real documentation.
And _you_ can help me.

The beta release will be anounced at KVR Audio's Instrument forum.

Monday, January 21, 2008

Currently I am testing the arpeggiator ... maaan ... this is retro chip style^^

*sigh* ... I could just play along forever^^

Sunday, January 20, 2008

Some facts about the voice management of CetoneSynth2:

16 voice polyphonic, each voice having:
3 OSCs (depending on mode up to 15 OSCs)
1 filter
3 envelopes
2 LFOs

Voice allocation rule:
1. search a voice that is done, if found, use this
2. search the 'oldest' voice in release state,
if found, use this
3. use the 'oldest' voice

After some slight optimizations does my synth run at an average cpu load. When using 4 voices the cpu usage is about 10%, when using 16 voices 30% and more. (Test sound: 2xNorm-OSC, 1xSuper-OSC, 24dB filters with 'Exp' envelope mode)

Some words about my 'machine':
3.2GHz P4 HT, 1.5GB Corsair DDR2/400 RAM, WinXP, no ASIO

Well, I'll do my best to make this thing as low on cpu usage as possible (limited to my possibilities of course^^), but this is not Synth1 (I tried this thing yesterday, damn nice, damn good coded).

The mass of options make this synth really hard to optimize. I could get some speed gains by rewriting highly frequented portions in assembly, but my assembly days are long over (back in 1994 I used assembly a lot).

Branches do kill the cache and I try to avoid calls und branches where ever this is possible. I thought about writing different voice render functions for different osc and filter configs, but this would be overkill (pow(4, 3) * 2 functions would be needed).

So, CetoneSynth2 will be a synth which needs a somehow up to date machine if you intend to use a huge amount of voices.

Ah ... GUI has changed again^^

The MIDI sync stuff is developed (I hope) and now only needs to be coded. LFOs have to be implemented (easy) and the modulations must be designed (types of sources and destinations, destination depending amounts).

The last parts will be the arpeggiator, glide, bank and preset handling.

There may be a beta version out next weekend, depdending on how much time I'll have next week.

Saturday, January 19, 2008

Another screenshot showing work in progress: working2.png

Friday, January 18, 2008

Here's a simple test sound, to let you hear what this synth will sound like: (1.2MB).

Some infos about this sound:

3 oscillators operating in "super" mode with a spread value of 2
OSC tuning: 0, -12, +12 semi
Oscillator volume causes mixer to clip.
12dB lowpass filter with envelope mod.

I like it^^

The "super" mode now uses only 5 oscillators. Fat enough, less cpu usage.
I'll do my best to optimize this synth, but the "super" mode is a cpu killer^^

Tests using my synth in cantabile, 3 activated "super" oscillators and 32 voices result in a cpu usage of about 80% on my 3.2GHz P4 HT.

But, hey, who _really_ needs 32 voices of the same sound?!

When using realistic 4 or 8 the cpu usage is ok, but could be better (as said above, optimizations will follow).

Personal opinion: I love the sound of this synth.

Summary: "super" is (and will be) a cpu killer, use it wisely^^
The "super" oscillator mode is ready, first tests are running (only OSC and ENV), sounds nice.

Explanation: "super" is a homage to the classic Supersaw. When a CS2 OSC is in super mode, it is in fact 7 oscillators, slightly detuned. One interesting fact is, that this "super" mode is not limited to saw waves only.

The wave-detune spreading is adjustable (due to a lack of size in the OSC frame, this is only a small slider).

This makes the OSC count of CS2 a total of 21.

Thursday, January 17, 2008

Ok, I think the oscillators are ready now.

Oscillator range is MIDI notes [0, 120[ ([C-2, C8[)
Real frequency range is [8.176 Hz, 8372.0 Hz]

New mode added: "Super" (guess what this means^^)
Today I'll implement the buttons. Most of the code needed for those is done.

Again the GUI layout has to be changed (filter frame).

Oh, some remarks to my GUIs.

I am no graphic artist, as you may have guessed already, I am a coder, and so do my GUIs look like. The images are all 'programmed' not painted. I write a (more or less) small program in C# and code all elements. Makes some stuff easier^^
Here's a first shot of the GUI with all knobs implemented: working.png

Wednesday, January 16, 2008

The mouse wheel crusade

Finally it's done. After two days of google'ing, researching and trying I have found the solution:

For all you VST GUI coders (I don't mean VSTGui, but your own windows GUI) that want to use the mouse wheel, just add SetFocus(hwnd) into your WM_xBUTTONDOWN handling.

So, now you can change the value of a knob by simply moving the mouse over it an turning the mousewheel. If the knob won't turn, just click once into the GUI (anywhere).

So, new GUI preview image online. OSC frames changed. See here.


Finally I am working again on my plugins. Many things have changed during the last months and I was really busy doing some other coding stuff, but now I really want to revise my plugins (right after I have finished CetoneSynth2).

One really important thing I forgot when designing my first plugins was to compensate for denormalized numbers. This will be fixed.

But now some text about

I started to work on this new synthesizer about four days ago. After two days I already had the GUI partially working (knobs).

After some more thinking about this synth I can now present a list of features quirks:

The Oscillators:
The OSCs are using standard waveforms (bandlimited of course) saw, triangle, pulse and noise. The noise waveform will have some kind of pitch ability.

Semitone range from -64 to 63
Finetune range from -64 to 63 cents
Morph controls either the pulse waveform's pulse width or the triangle waveform's sawtooth-to-triangle morph parameter.

There will be a nice feature, but I'm not sure if it is really usable: Different oscillator modes.

'Normal' mode:

The oscillator works like a standard analogue one, producing one waveform.

'Add' mode:
You don't select only one waveform at a time but you may select a combination of waveforms which then is mixed and outputted.

'Mul' mode:
Same as 'Add' mode, but with waveform multiplication (AM).

I'm really curious about how those OSCs will sound (early sound tests produced nice results).

The OSC frequency range will have a maximum at about 9kHz I think.

Later more ...