Cabbage Logo
Back to Cabbage Site


Started my first synth, it is based on Yamaha CS-80 design but I will heavily upgrade it so consider this as a WIP.
You can get it from here

Hi tested it very quickly. It works good until I start messing with volume envelope (which is first thing I do with synths :slight_smile:) Then it comes to cracking sounds. I think problem is that you uses too big values for sustain and times - note that madsr uses seconds for time-based values (ADR) and volume (S) where 1 is maximum value. Either use knobs with properly set range (as my Traveller uses) or recompute values from knobs to be in safe range.

1 Like

yeaps thanks a lot , I was wondering if it was my audio card or I did something stupid with the csd , of course I did something stupid.

Its great to post my synth here and get such a helpful advice, I may be a coder but I gotta to admit CSOUND is a strange beast to tame , but it is fun nonetheless thanks to Cabbage :slight_smile:

I had a blast today making the first steps with this synth. Still a ton to do. I want to add additive , FM(like FM8) , mod matrix, multi envelopes and a sequencer , so I will be sticking with this project for a very long time :smiley:

So excited to find that CSOUND even supports resynthesis. I had no idea that resynthesis of samples via additive is something that goes back as much as 1950. Blows my mind how behind commercial soft synths are and so many sound synthesis techniques in CSOUND that I never heard. I feel like a boy in the playground. I want to replicate some of Camel’s Audio Alchemy. Yes I will definetly take a look at your Traveller synth.

Also note that ENV will not start at all if attack is set (exactly) to zero. In this case, madsr returns 1 all the time. This is why it’s fine in default seettings.

All of this is described in Csound reference manual (google "csound opcodeName to get right help page).

Some of my students and I spent some time implementing some of the simple FM8 patches in class this semester. We got pretty good results with some very basic code.

talking about patches I need to figure out how Cabbage works with patches (save, load etc) . I welcome any advice and dowload link :slight_smile:

Can you start another thread about it, I feel we’re veering off topic here a little :rofl:

so after a ton of testing and searching around I find the reason for the cracking, it was not the envelopes but the fact I forgot to add a balance opcode to balance the oscilator audio with the audio of its filters. Those cracks were bursts of sound when amplitude went up to the roof and then went down fast and it actually got worse by losing sound altogether having to restart the synth.

Apparently balance opcode fixes such very rapid fluctuation in sound amplitude.

The learning process is relentless :slight_smile:

A new release is at hand

New features

  • fix a bug that was creating crackling noises
  • add ring modulators for both sound generators with individual envelops each
  • unite SG1 and SG2 knobs under one mixing knob for both sound generators
  • add reverb with addition knob for boosting volume

Chorus is the next step , it was proven trickier than reverb , this is the final step for emulating the Yamaha CS-80 , plus the addition of white noise generators for both sound generatos. Of course LazerHawk is more powerful because it has ring modulators for each sound generator , instead of only one ring modulator in the master section for CS-80.

Tested updated version today. It looks really powerful, but somewhat cryptic as I never used real CS-80.

It definitely needs some factory presets.

I don’t understand what buttons “timbre 1” and “sound generator 1” does.

thanks for testing this, its far from finished and far from getting to the presets stage.

Timbre is useless right now , the idea was to have multiple timbres which in hardware synths mean basically multiple instance of synth itself.

I called that section sound generator because CS-80 is a bit of a special synth. The reason why it was an insanely expensive and insanely heavy is that the synth event though a true analogue, it could output 128 sounds at the same time.

CS-80 was far from your typical analogue synth, the reason it could output so many sounds at the same time was because

  1. it had 16 voices polyphone and each voice had:
  2. a typical square oscilator with pulse width modulation and dedicated lfo
  3. a noise generator
  4. a triangle exclusive oscilator
  5. a sub oscillator (typical sine wave)
  6. all those sources were multipied by a factor of two because it was basically a dual layer voice
  7. to make matters worse for modern synth it did not have 1 or 2 or even 3 filters , it had 4. 2 for every layer. That is 4 per voice. One was low pass and one was high pass. Those filters cannot be replaced with a band pass filter because both of them had their own reasonance.

The synth had incredible range because of the amount of sound sources , it was super simple because it was still a old school substractive without any fancy features but still surgical precise because of the 4 filters per voice.

Currently my synth lacks a triangle oscilator and a suboscilator , which I will be adding in the future. However the CS-80 had only one ring modulator, which was shared by both layers while mine has dedicated ring modulator for each layer.

So the reason why I called this sound generator was to be able to output like CS-80 4 sound sources at the same time but my plan was also to add FM, wavetable and sampler and I decided to group these sources under 4 different sound generator per layer. My synth has basically two layers like CS-80

so basically its ((Sound Generator -> ring modulator -> High Pass Filter -> Low Pass Filter) *2 ) -> Chorus -> Reverb -> Out

Sound generator types
a) Substractive ( square with PWM + triangle + noise + suboscilator)
b) additive
c) FM
d) Sampler (wavetable, vector synthesis , graintable)

That would increase the amount of sound cources to 7 per layer (4 sound sound generators per layer) , 14 total per voice with each voice having two layers.

I would like to also add a modulation matrix page with multi point envelopes and of course lfos. A sequencer/arpegiator is also another thing I want to add. So will take some time till I start making presets for it.
PS: The only modern analogue synth that comes remotely close AFAIK is Alesis Andromeda A6 which I happen to own, it has far more modulaton sources (arpregiator, sequencer and crazy modulation matrix)

this is what you already have - in Csound for each new note new instance of the instrument is created (as far as I understand)

Also I am missing another thing - way how to detune/transpose second oscillator.

I think the problem is still here, i posted an issue in github

well technically you cannot detune transport any of them.

what problem ?

no that is a voice not a timbre. The difference with a timbre is that i has its own properties instead of being the same properties played on different note. A timbre is rather a diffirent instrument instead of an instance of an instrument.

Technically it is still an instance, because in CSOUND the score does not just send diffirent notes with velocities but also can change the properties per note if that is required and the instrument is designed to do so by being passed I think p7, p8, … as additional parameters. However if your instrument is not designed such a way there is no way, AFAIK to have full control of those instances.

In any case timbres means to have open multiple vst instances of the same synth in essence. Each one being an individual synth.

Timbres also can be assigned to multiple keyboard splits so they trigger on specific notes and velocities. In the case of CS-80 it has split for notes, velocities and polyphonic aftertouch (polyphonic aftertouch is basically extra velocity layer per note)

I wonder how this was handled in CS-80.

it was not

CS-80 was mono timbral. My Andromeda is the closest you can get to a CS-80 hardware analogue clone that is multi timbral. Its capable for up to 16 timbres, one for each voice, each timbre with its own arpeggio and sequencer. But to be fair sequencer , arpeggiator and general modulation, including audio effects are completely digital, but the sound is analogue.

By the way this is the new look for my synth, as you can see a lot more new features

I decided to go mono timbral because CSOUND eats CPU cycles like peanuts and I did not want to push my luck too much, plus the new synth is already powerful enough. Bottom black area is for multi point envelopes, mod matrix also is still a WIP

Synth does not make any sound currently because everything is broken, but hopefully it will be in a working state in the next couple of weeks. Stay tuned :slight_smile:

You definitely nailed that “spaceship control panel” feeling of CS-80. :smile_cat:

Not sure if that is a good or a bad thing but I was not aiming for a simple synth GUI , but a complex GUI that will have everything in one view so the user does not have to navigate through menus and submenus