Have you seen this?

StringTheory is a lo-fi, 4-note, paraphonic string synthesizer, based on the Solina String Synth emulation designed and coded by Jan Ostman.

I have one in my rack, and it’s fun! I got it because I miss the thick chorused string sounds I used to get out of my Juno60 (worst studio decision I ever made was selling that a decade or so ago). Might be useful to dig into the source code.

From what I remember of that code, when I played with it some years ago, it makes a lot of compromises to make it run on the limited Arduino hardware.
Short version is its wavetable with LFOs on pitch & phase and an AR envelope.

korg lambda sounds fantastic on the phone :slight_smile:

1 Like

Was really excited about that module until noticing it was MIDI only.

@tehn i can cook up some SC for ya…

1 Like

… here’s some WIP

as @Ithacus points out, a big part of the analog tone is soft saturation and filtering in the bucket-brigade delays that make up the chorus elements. computer won’t be the same; but i would try adding some stuff in that vein to the chorus synth here.

oh, another thing i’d add is some waveshaping to the chorus LFOs. (i dunno about the solina per se, but i like a little sharpness at the inflection point for a chorus)

22 Likes

I read another interesting article on SoS last night: https://www.soundonsound.com/people/ken-freeman-birth-string-synthesis.

It provides alternative methods used by Freeman (multiple oscillator banks, multiple points of modulation on the banks etc.) to achieve that lush ensemble sound.

The article also includes an interesting little snippet that concurs with @zebra :

'Much of the perceived richness and warmth of the mid- to late- ‘70s string machines was a consequence of the limited bandwidth of the delay lines used to modulate the waveform, which meant that their high frequencies were suppressed, not accentuated.’

Another thought; as the oscillators were a ‘divide down’ design, I would think deviation from octave to octave would not vary much (as they were using frequency divider chips). However, deviation from note to note (e.g C vs D) could certainly vary depending on each individual notes master oscillator stability and calibration. So perhaps a fixed detune per note could add a subtle effect ‘vintage’ effect as well?

As you can probably tell I’m a fan of the String Synth sounds so I’m looking forward to seeing how this progresses :slightly_smiling_face:

3 Likes

If vintage approximation is a goal, one could also add slight variations on the envelope time for each individual pitch. Since each key of a string synth has it’s own dedicated tone source, each key also has it’s own simple envelope circuit typically based around a draining capacitor. Often these were electrolytics which tend to go out of spec/fail more readily than aging film and ceramic capacitors and can lead to this kind of discrepancy. But, that might not be the kind of vintage vibe that’s desirable to reproduce :upside_down_face:

6 Likes

@zebra this is super informative, both about string synth and supercollider. much much appreciated!

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