Advice on how to expand synth sound variation

MrCanvas

Well-known member
Hi! I made another Teensy-based polysynth using parts from other discarded projects. It is the usual subtractive setup but I am trying to make it more flexible in terms of modulation to create more variety than my previous attempts.

I would like to hear your opinions on what parts of the synth pipeline is crucial to make more (usable) sounds? Architecture, modulation setup, effects? Anything goes. I want to avoid copying (too much) from great works like Jeannie and Tsynth though. I have not spent too much time on custom waveforms in this project yet. Another tip I got but have not been able to implement in a decent way is modulation of the effects.

Here is a rough picture of the architecture. All modulation sources (red) can be routed to any destination (yellow) with level control through a modulation matrix in the UI.

Untitled.jpg

Some examples where I am at below. Its ok but not great. Suggestions or comments?


Cheers, Daniel
 
@MrCanvas (Daniel):

Congratulations !! You have accomplished creating some very nice sounds from your polysynth. I am likewise using the Teensy Audio Library in the implementation of my TeensyMIDIPolySynth (TMPS). In my experimentation, I have found two additional capabilities which you might like to investigate: add a filter (LP, BP, HP selectable) to the output of your LFOs (to alter/limit the frequency content of the LFO used to alter the primary VFO . . . you might also add another LFO to control/alter the knee frequency of the added filter for even more sound control) & add an envelope to the output of your LFOs (to allow the effect of the LFO to fade in/out and/or ramp in/out in a controllable/adjustable manner). You might also investigate mixing a user adjustable DC level in with your LFOs & your VFOs.

Keep up the good work !!

Mark J Culross
KD5RXT
 
Thanks for your encouragement Mark! I will be sure to test your suggestions. Filtered LFO's is an interesting idea, and I like additions that are not "per-voice" as the resource need is not so punishing.
 
Great work @MrCanvas. Used similar knobs on my late 70's Synth, a mess of stripboard and clip leads. One controlled Osc Mix level to VCF Fc, and the other controlled VCF Out level VCF Fc.
Probably easy to implement for the sake of what your ears think, perhaps?
 
,,, I like additions that are not "per-voice" as the resource need is not so punishing.
One thing you might want to play around with is "switching off" modules you're not using. For example, the waveform objects tend to use near-zero CPU when they're set to an amplitude of 0.0. Other objects behave similarly when fed silence to their inputs - this usually only works if the silence is in the form of NULL blocks, not standard audio blocks that happen to have all zeroes; with recent versions of Teensyduino (1.57 onwards) you can force this by disconnecting the patchcords at run time, and reconnecting them when you need them for a particular sound.

I have a PR in which optimises AudioMixer4 to transmit NULL blocks if all inputs are set to a gain of 0.0 - this isn't the case for the existing one. Depending on how you've implemented your modulation matrix, this might be useful. You might also want my envelope object fix, which causes envelopes to continue their shape even if the input is NULL (e.g. you set the source waveform to amplitude 0.0).
 
Thanks for more good comments! Yes optimization is needed. Looking forward to that PR since the mod matrix contains...a few AudioMixer4's. 47% load right now so not great, not terrible.

I originally intended to make this at least 2-part multitimbral by adding more "voice banks". However I have since noticed that a big part of the patch design is in the effects chain which is global at the moment.
 
Looking forward to that PR since the mod matrix contains...a few AudioMixer4's. 47% load right now so not great, not terrible.

I originally intended to make this at least 2-part multitimbral by adding more "voice banks". However I have since noticed that a big part of the patch design is in the effects chain which is global at the moment.
It's only one file to drop into your Audio library - download from https://github.com/h4yn0nnym0u5e/Audio/blob/feature/optimise-mixer/mixer.cpp . Probably a good idea to keep the original, just in case!

Yes, I'm mulling over the possibility of multi-timbrality myself, but making it more complex by not even having a fixed topology for each timbre! Apart from the input and output objects, which are fixed by the available hardware. Oh, and only instantiating the objects that make a voice when a note starts ... and destroying them when (just after, actually) it stops ... Still a work in progress, give me about a year and I may be starting a thread of my own.
 
I decided to explore wavetable functions next, not using the wavetable object in the audio library but rather by abusing the arbitrary waveform. It works much better than I thought, was expecting massive artifacts.

It is possible to import wave tables from https://waveeditonline.com/
The two main oscillators can have their own tables and parameters including either phase scan (moving the 256 sample window across the table) or morph mode (interpolate between nearest waveforms).

Also, thanks h4yn0nnym0u5e for the updated mixer. It lowered my "idle state" performance requirement from 49% to 30%.


(yes I know I suck at making videos...)
 
It sounds great. Nice project !
In The Pool, I also use 64x256 Wavetables from Wavedit for the Wavetable mode of the digital oscillators but also to add user-customisable waveforms to the LFOs.
 
Thank you for the encouragement Baloran. Your own projects are amazing, very inspiring!
I am contemplating making my own wavetable object just for the sake of learning. At the same time, it is very convenient to just mess with the arbitrary waveform.
 
I made some updates to this project, mainly moving to another hardware platform to investigate touch based ui (work in progress) but also added new wavetable and modulation features. Here is a quick sneak peek. As always, I am amazed at how much is possible with all the great tools all of you have been providing!

0:00 - 1:30 noodling with a busy patch, preliminary screen saver running
1:30 - stepping through the ui and messing with the osc 1 wavetable

 
Back
Top