[sdiy] Digital accumulator VCO core?

Mike Bryant mbryant at futurehorizons.com
Fri Feb 12 12:03:04 CET 2021

Hi Brian

It's a selection of ARM cored processors - M7 and A7x - and some logic.  Keep thinking about putting it all in an FPGA but it immediately loses some flexibility.   

As you say it's the analysis code that is the key.  Here's a brief description of where I've got to :

My Sound Synthesiser offers a new approach to Additive Synthesis.  The main problem with Sinusoidal or Wavelet Additive Synthesis is the need to change many parameters to make even a simple change to the sound produced.  The synth tries to overcome this by first sampling an existing sound.  But rather than play this back as a sample, the Decompose Sample function breaks the sound down into either Frequency and Amplitude Envelopes or Wavelets to pre-populate the synth parameters.  This sound can then be played back as is, in which case it is being used as a sampler with a constant amplitude envelope irrespective of pitch.  If few changes to the sound are needed, the Wavelet option may be best.  But using the Sinusoid option allows more extreme modifications to the sound by altering the amplitude of each harmonic or non-harmonic component of the sound, by adding modulation, or by offsetting the frequencies or envelope time.  Sounds can also be created from scratch but this can be frustrating to say the least !

The synth consists of over a thousand independent Sinewave Oscillators or Wavelet Generators, each with it's own extended functionality Amplitude Envelope generator, together with individual AM and FM modulation capabilities, each with their own simpler envelope generator.  Up to 124 oscillators are added together to form the sound for a single keypress.  The number of oscillators per sound sets the number of keys that can be played simultaneously, but if more keys are pressed then the most inaudible sinewaves are removed so no keypresses are missed.  To ease editing, these oscillators are divided into the Fundamental, 64 Harmonics, 24 SubTones lower than the Fundamental, and 33 non-harmonic Overtones above the Fundamental.  By default the SubTones and OverTones are set to the notes of two octaves below and three octaves above the fundamental of the chosen scale, but all oscillators can be changed to any desired frequency.  It is possible to increase the number of oscillators available per keypress by putting more units in parallel, up to a maximum of 16, giving almost 2000 sinewaves or wavelets per keypress.

A selection of Noise Generators with frequency and envelope shaping can be added to help create more natural sounds.  At the moment though these cannot be initiated by the analysis of any sampled sound so they are purely for adding to, and deviating from, the original sample.

A selection of delay line resonators are also available to simplify the creation of plucked string and percussion effects.  These can be initiated by the sample,  by impulses, or by the sinewaves, wavelets or noise generators.  These were added once it became obvious that it's currently almost impossible to analyse real-world percussion accurately enough, so instead the start of the sample can be used to initialise the delay line and then the system takes over.

The synthesiser can be played by one or more MIDI keyboards and/or Sequencers, each producing different sounds.  Once a sound is loaded changing most parameters is similar to other synthesisers, but there are a few key differences.  The OverTone Structure page allows the Levels and Frequencies of all the sinewave oscillators to be set.  Parameters can be changed on a per sinewave basis, or in groups for faster editing.  Once these are set, the envelope and modulations of each sinewave can be altered.  All editing can be on just the fundamental frequency, and single, groups or all of the harmonic or non-harmonic overtones.  Sinewaves can all have the same or totally different envelopes and modulation.  The most useful edit functions allow tones near to the fundamental frequency to include more of the envelope or modulation of the fundamental, whilst those of much higher pitch have a quite distinct envelope or modulation, as is the case with many real instruments such as a piano.  Another option is to 'bend' the frequencies of the fundamental, overtones or both depending on how the key is struck.  Finally various effects such as chorus and reverberation can be added to the final sound.  Due to the way the synth works, any edits take effect on the next MIDI note. It is not possible to change a sound already begun apart from with the pitch and modulation wheels.

This has been a sideline project I've had going for about 35 years, ever since I saw the Fairlight and Synclavier and thought I can do a lot better than that :-)

It's gradually developed as the hardware technology advanced to keep up with the mathematics.  Will it ever be finished ?  Not sure.  Subtractive synthesis gives good results quickly, whereas additive synthesis takes ages to get even a simple sound right.  But it does give far more control over nuances than subtractive synthesis can.

-----Original Message-----
From: Brian Willoughby [mailto:brianw at audiobanshee.com] 
Sent: 12 February 2021 04:57
To: Mike Bryant
Cc: synth-diy at synth-diy.org
Subject: Re: [sdiy] Digital accumulator VCO core?

On Feb 9, 2021, at 15:05, Mike Bryant wrote:
> I think if you're going to do complex additive synthesis then staying all digital until a single final DAC is the more sensible approach.  My system has over 1200 sinewave voices on a single small PCB, and I can link up to a dozen such boards.  It probably could create most sounds short of the human voice but the problem is how to control it creatively in a reasonable timescale.

Hi Mike. What processor is on your boards?

I wrote some macOS CoreAudio software sine wave oscillator banks capable of 1422 voices, but not 1526. I didn't try to find out exactly where the code fell over, and this was without any attempt to optimize for maximum voices. There was a bit of naive optimization to allow mixing a bank of sine oscillators without running each one completely separately. This was running on an Intel MacBook Pro, and I forget what the processor speed was.

The first application was to resynthesizes the Deep Note of THX fame. That sounded very close (until I tried to make it "more accurate" and then it actually sounded less like the original). THX synthesized that on a hardware DSP with only 30 voices, but after I got it working I decided to find out what it would sound like to throw as many voices as possible into the same algorithm. I need to make a recording of this, because it sounds crazy.

The second application was an attempt to recreate the Technos Acxel. This one has up to 1024 oscillators, but the real gem is the analysis code that won't be easy to recreate. The Acxel has both amplitude and pitch envelopes for every sine oscillator. I managed to get some code working that uses FFT to pull the loudest 30 pitches out of a recorded sound, and then detect simple linear amplitude envelopes. I didn't get around to implementing pitch envelopes - especially not the analysis part. Some very convincing sounds can be recreated after successful analysis, but other sounds lose quite a bit. I imaging that Technos must have put a lot into the huge rack of processors that analyzed sounds. It's actually much easier to create an engine that can handle the synthesis with real-time envelopes - it's a much harder problem to extract the control variables from a natural sound. You might want to look into simple pitch envelopes and simple amplitude envelopes. As long as those are independent per each sine oscillator, you might be able to do more with your 1200 sine wave voice boards.

Brian Willoughby

More information about the Synth-diy mailing list