cool. guess i think both these kinda things are best decoupled from synth engine itself. (especially tuning.)

btw, i have no real idea what the base length of the delay lines “should” be, nor the depth of feedback, would be curious to hear

another TODO: make envelopes modifiable (its a serious limitation of EnvGen(Env...) construct…)
and since we’re not actually bound by the past, maybe more envelopes for other sound parameters of the oscillator module.

(now that i think of it, this sounds more and more like just working on the “ensemble” element a bit and adding it to PolySub.)

i’ll see if i can nornsify and midify this later today/night. that will make it easier to mess with parameters.

3 Likes

This morning I saw this image in the service manual for an Arp Omni my boss has been servicing, thought it was a more accurate representation of the type of waveform I was trying to describe in my first post. I don’t think this exact shape is necessary to nail the string synth sound but from the ones I’ve seen on an oscilloscope they’ve all looked something like this.

omni waveform

4 Likes

interesting, thanks!

so that mostly looks like what i’d expect: basically short pulse softened by filters. so i just did variable width pulse/saw and called it kinda fine. (also added a feedback-sine waveform which goes kinda sine->parabolic->chaos. should change chorus LFOs to this too i’m thinking.)

what i didn’t know about is the asymmetric clipping. nice. so i’ll try something like that. i think a simple way in supercollider would be:

osc = (SoftClip.ar((osc * gain) + dc) - dc) / gain;

(i do wish SC had more built in stuff for nonlinear waveshaping besides naive hardclip. i guess there is Shaper.ar… )

bear in mind on computer we have extra complication of ensuring bandlimitedness. so we’re using SC’s builtin bandlimited variable width saw+tri, pulse UGens. kinda tangential: you can make many waveforms from sum/difference of two scaled/inverted saws. (call it any linear combination.) if you throw in variable width they can get pretty complex. if either source wave can be pulse, it’s almter ist like having a third oscillator (since you can make pulse from two saws.) best news is, if the source waves are bandlimited, i’m pretty sure the linear combo is also BL’d.

what i need to think about is, maybe by adding a DC term to linear combination of saws/pulses, you can get the asym clipping shape “for free” and much else besides.


also: yay! https://colinraffel.com/publications/dafx2010practical.pdf

4 Likes

Can you elaborate on this? Curious what I might be able to pull off with my existing set of oscillators and VCA Matrix…

maybe a silly q @zebra but is there any particular spots you go looking for sound design papers ?

need to get my reading material on this level

2 Likes

Not that it’s crazy hard to find, but to save people the effort the link to the STK example in the paper is broken; you can find it here: https://colinraffel.com/software/bbdmodeling/

1 Like

Did some further diving on the Ensemble effect and topology last night.

I found another really nice SoS article covering a modular based approach to recreating classic chorus and ensemble effects: https://www.soundonsound.com/techniques/more-creative-synthesis-delays

Also this Jürgen Haible design (inc. circuit description and schematics etc.): http://jhaible.com/legacy/triple_chorus/triple_chorus.html

Summary of interesting things I found relating to String Synths/Ensemble effects:

  • Most of the classic string synth ensemble circuits used 3 delay lines.

  • Anti-aliasing low pass filters would have been used extensively to reduce any clock noise using the old BBD’s.

  • 2 LFO’s typically used to modulate the delay lines. Fast (‘Vibrato’) ~5-7Hz and Slow (‘Chorus’) ~0.5-1.5Hz

  • The LFO waveform would have been sinusoidal*-ish* (square wave oscillator with heavy filtering to get a sinusoidal type waveform).

  • The LFO’s are then phase shifted to modulate the respective delay line (0° for Line 1, 120° for Line 2, and 240° for Line 3 on the Solina).

  • Delay times would typically be 10-50ms. I can’t find any exact values anywhere, but I know that around the 20ms region is where the old Boss Chorus units (CE-1 etc.) would operate. The vintage chorus units tend to sound ‘lusher’ and typically use longer delay times.

  • I can’t find mention of feedback/regeneration being used on the Ensemble units anywhere.

  • The original Eminent 310 (which the Solina was derived from) featured separate outputs on jacks for the 3 Ensemble effect delay line stages (indeed this very nice looking modern, but fully analogue, unit here has seperate level and pan controls for the delay lines http://wutierson.com/en/home/sound-processors/elkorus-v3-detail).

Hope this helps if anyone is looking to delve deeper into this in SC/Norns.

4 Likes

One example would be mixing a sawtooth and a squarewave with inverse polarity of eachother. If they’re in perfect phase and the square’s pulsewidth is exactly 50%, you should get a sawtooth one octave above your core oscillator. Fade the square in and out and you get a crossfade between octaves.

2 Likes

really recommend dafx papers.
and on the bbd topic here is a more recent one https://www.dafx.de/paper-archive/details.php?id=KbFTgvcTMmHQ2bHZvOUekw

3 Likes

I really loved this tutorial video made by Steve Porcaro from Toto. First part is about making a brass patch, but the second is about string synths.

4 Likes

fwiw, i saw that (it’s cool) but didn’t link it here b/c it is a lower-level model than what can be easily implemented in SuperCollider.

(in a nutshell, that paper proposes actually modelling the antialiasing filters in the BBD and actually feeding them a modulated digital pulse at the BBD clock rate. oversampling is recommended, which makes sense.)

also, it’s inherently less parameterizable! maybe part of the fun in emulations is being able to e.g. independently change the compander, filtering, and aliasing behaviors.

that said, that BBD circuit model could be pretty easily done in c++ or Faust, and maybe it would make a nice UGen &c.

2 Likes