Can XAOC Devices Sofia be replicated in VCV Rack?

I got a unique analog eurorack oscillator and I was wondering if anyone thought that the core waveshaping approach could be digitally approximated using existing modules in VCV Rack. I tried combining a fundamental tone with higher frequency oscillations, but I couldn’t figure out how to keep the ‘ripples’ to just one part of the waveform.

I have a video demonstrating how the oscillator works:

And here’s the website description:

Thanks!

3 Likes

far away from this great hw module but at least i got something in this direction by using the Csound fof2 opcode (which makes FOF synthesis)

3 Likes

That sounded pretty good! Yeah, XAOC said it was based on FOF synthesis.

Thanks!

this sound synthesis is really funny, i have made a native VCVRack prototype:

7 Likes

Hi ! So it is a post to an other forum, but I actually tried to do that and you can hear a short exemple and download the patch there :

(here I tried to do the same kind of post but you can’t upload even short mp3 / wavs)

3 Likes

That sounds awesome. I think that would be a very unique oscillator in the VCV library…

That looks similar to my own attempt, but I think your results sound much better – more like Sofia. I’ll have to dig into your patch a little more, but maybe my envelopes weren’t short enough.

Thanks!

1 Like

This is great to play with and it should work with any oscillator having sync and FM. I assume that the wrap effect can be made by mixing the rampage out into the FM of the VCO e.g. via VCV CV Mix.

kitchen-sink

1 Like

Yes exactly, I was trying to split it into its basic functions, just basing the patch on the idea of adding two differently tuned oscillators, one for each half of the cycle, having two (very short) enveloppes for amplitude control of each of those. When fine tuning the exemple I recorded I went for something smooth, but the square outs and lots of FM give crazy results too, it is a nice way of waveshaping that I had not tried before and now that the bases are there, why not going for other types of oscillators ? That would stray away from the Xaoc but I am curious ! (PM, PD, Wavetable, samples ?? …)

I have tried with VCV WTVCO but with the default tables this does not work very well, because to much unwanted high frequencies when the Pos is somewhere in between. In contrast, I have used very smooth (band limited) saw and square waves for the ripples in my prototype which imho sounds better. May be interesting would be to filter the ripple oscillators somehow.

1 Like

Here is my take on the Sofia using existing free modules.

Unlike the Sofia hardware - this emulator is fully polyphonic!

I’ve implemented most of the Sofia features except:

  • The ripple elements are restricted to just the positive half of the fundamental cycle, whereas I believe the Sofia hardware goes to about 75%
  • This version does not have any scaling of the ripple damping (decay)
  • There is both linear and exponential FM available on the fundamental (right most) oscillator. But I think the result is quite different than the Sofia hardware - I don’t understand the two FM inputs available in Sofia.

Below are the user controls for the emulator, going from top left to right:

  • OCT – Fundamental octave
  • CVMIX #1 – Fundamental V/Oct
  • CVMIX #2 – Ripple A Warp
  • CVMIX #3 – Ripple A Ratio (bottom knob 100% scales to Fund pitch, 0% is no scaling)
  • CVMIX #4 – Ripple B Warp
  • CVMIX #5 – Ripple B Ratio (bottom knob 100% scales to Fund pitch, 0% is no scaling)
  • SWITCH #1 – Ripple A shape selection, OFF = sine, ON = square
  • POLY ADSR #1 – Ripple A Damp (Decay)
  • SWITCH #2 – Ripple B shape selection, OFF = sine, ON = square
  • POLY ADSR #2 – Ripple B Damp (Decay)
  • FADE #1 – A / B Mix
  • FADE #2 – Fundamental / Ripple Mix

I have another version of this emulator with a slick user interface, but it is dependent on an unreleased module that I am helping to beta test. I hope to be able to share that version soon. This second version will include scaling of the damp decay.

Construction of the emulator is surprisingly easy. Below are some design notes:

  • The square output from the fundamental oscillator is used as the gates for the ripple envelopes. The ADSRs use a very short, but non-zero, attack and release to smooth out the transition in and out of the ripple phase of each cycle. This also provides a small ripple spike even with maximum damping (0 value).
  • The ADSR sustain is set to 0 so that decay to 0 can happen before the end of the square gate.
  • The saw output of the fundamental oscillator is offset and used as CV for the warp effect.
  • I wanted to increase the pulse width to enable the ripple phase to go as much as 75% of the fundamental cycle. But that would require adjusting the phase of the saw wave to get the proper warp profile. I could achieve that with the Sckitam Waveguide Delay, but that module is not polyphonic :frowning:
    Update - the soon to be released Surge XT Tuned Delay works great, and is polyphonic. So my version with the UI does go as much as 75% of the fundamental cycle.
7 Likes

Pretty sick to have a polyphonic Sofia. Sounds great!

Any chance you can post that Csound code here ?

gisine ftgen 0,0,8192,10,1
gisq ftgen 0,0,8192,10,1,0,0.3333,0,0.2,0,0.141,0.11
gisaw ftgen 0,0,8192,10,1,0.5,0.3333,0.25,0.2,0.166,0.141,0.11
gitab ftgen 0,0,4096,7,0,4096,1

instr 1
  iwav=gisq
  ibasewav=gisine
  kfreq chnget sprintf("FREQ%d",p4)
  aref oscil 0.75,kfreq,ibasewav
  kform chnget "P1"
  ksbfreq=pow:k(2,scale2(kform,7,14,-10,10))
  krise=scale2(chnget:k("P2"),0,1,-10,10)
  kdur=scale2(chnget:k("P3"),0,1,-10,10)
  kdec=0.1
  kamt=scale2(chnget:k("P4"),0,1,-10,10)
  aout fof2 0.7,kfreq,ksbfreq,0,100,krise/kfreq,kdur/kfreq,kdec/kfreq,200,iwav,gitab,100,0,1
  aout = aref + aout*kamt
  aenv madsr 0.001,0,1,0.02
  aout*=aenv 
  outs aout,aout
endin

3 Likes

Thank you !

Yeah, WTVCO is super clean, but that default wave does have a ton of high frequencies in some positions. I’ll bet there are other ones (WT files) out there that are more like what you want.