Roland Supersaw - any idea how the original was done?

DSP, Plug-in and Host development discussion.
RELATED
PRODUCTS
User avatar
EvilDragon
KVRAF
22865 posts since 7 Jan, 2009 from Croatia

Post Thu Apr 22, 2021 12:10 am

Edouard Digital wrote: Wed Apr 21, 2021 4:26 pmHowever I see no good reason to be replied to with a derogatory comment, and I would expect that any critic be based on experience, not insults.
I also see no reason to use generalizing terms like "overall consensus" which is far from true. You may have asked some people that agree with your implementation, that doesn't make it a generally accepted consensus!


Plus yes, what Urs said - there's no way to bypass the filter in Diva, it will always color the sound a bit. You need to take that into account too.
Edouard Digital wrote: Wed Apr 21, 2021 4:35 pmI'm not competing directly with either the Virus TI HyperSaw or the u-he Diva Multisaw
Then it might be more prudent not to even mention those brands and products in your marketing. And then slap words like "overall consensus" when it's far from one.

User avatar
Edouard Digital
KVRer
12 posts since 13 Apr, 2021 from Paris, France

Post Fri Apr 23, 2021 5:09 pm

Urs wrote: Wed Apr 21, 2021 10:14 pm So basically, you're bluntly using our brand names to advertise your own work. I don't think comparative advertisement is forbidden per sé, but don't expect anyone to think of it as a classy move.
You have a point, so I removed your brand name.
As I said I didn't mean any disrespect, and while I very much appreciate your products, my tests show that my implementation is closer to the original. We're only talking about a very small part of Diva, one oscillator types among many, excluding any filter, enveloppe, effect, etc., so I don't think my claim would hurt your plugin in any way.
Last edited by Edouard Digital on Fri Apr 23, 2021 5:30 pm, edited 1 time in total.

User avatar
Edouard Digital
KVRer
12 posts since 13 Apr, 2021 from Paris, France

Post Fri Apr 23, 2021 5:25 pm

Urs wrote: Wed Apr 21, 2021 10:25 pm As for your criticism of our implementation, how are you even gonna judge it sound-wise? - There's no way in Diva to bypass the filters and VCAs. Are you not aware that the filters and VCAs always colour the oscillator sound and that, yes, you can't really compare it unless you somehow bypass the JP8000 filter *and* run it through, say, an analogue ladder filter?

Furthermore, the Supersaw isn't static at a detune of zero? Maybe your JP8000 has a CTRL-1 slider in need of service? I'm fairly certain there was absolutely no phase movement on ours when the slider was in the zero position. Sure, I could be wrong, but how is that even a considerable flaw?
About the different sound because of no bypass, I never said the opposite, I actually said the same:
Edouard Digital wrote: Wed Apr 21, 2021 4:35 pm I'm not competing directly with either the Virus TI HyperSaw or the u-he Diva Multisaw, since we offer an oscillator plugin for KORG synthesizers, while they're included in complete synthesizer voices, and this claim means no disrespect as I am myself a client and user of u-he plugins, as a producer, and I think they're great.
No, the Super Saw isn't static at zero, my hardware models are clean, and YouTube videos show that, for instance I quickly found his one: https://youtu.be/ypu02Z2s0Ao?t=122

Where did I ever say it was a "considerable flaw"? I said that we're closer to the original's sound and parameter behavior based on waveform and spectrogram comparison.
Edouard Digital wrote: Wed Apr 21, 2021 4:35 pm As to the Multisaw, I think it comes quite close, yet even with HQ off there are audible differences. After all it's not a JP-8000 emulation plugin, while I on the other hand was very much focused on strictly emulating the Super Saw, its bright raw character and its peculiarities.
I don't think your users expect a JP-8000 emulation from Diva, I certainly don't.
To each plugin, their use. :)

User avatar
antto
KVRAF
2550 posts since 4 Sep, 2006 from 127.0.0.1

Post Sat Apr 24, 2021 12:16 am

Urs wrote: Wed Apr 21, 2021 10:25 pm Furthermore, the Supersaw isn't static at a detune of zero? Maybe your JP8000 has a CTRL-1 slider in need of service? I'm fairly certain there was absolutely no phase movement on ours when the slider was in the zero position. Sure, I could be wrong, but how is that even a considerable flaw?
i confirm this, when the detune is set to zero, the 7 sawtooths are not detuned, that's what i saw in Sendy's audio recordings too, and my own "SuperSeven" osc does it that way

it might not be the slider itself but something to do with the ADC sampling the voltage from the potentiometer
if the JP-80x0 accepts MIDI CC he should probably use that to check

as for the aliasing, if the aliasing is important to reproduce, then i say you gotta reproduce the aliasing at the same sampling rate that's going on in the real thing, which is difficult to do in a DAW plugin, and would often require realtime resampling to "Host" rate
i don't remember whether i had any real clue what the sampling rate of the JP-80x0 is, so if anyone happens to know - do tell :D
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

User avatar
Urs
u-he
27111 posts since 8 Aug, 2002 from Berlin

Post Sat Apr 24, 2021 12:59 am

Yeah, hahaha, even the most digital of hardware synths have analogue parts as long as they have pots and sliders. Maybe they do sound different after all those years.

User avatar
EvilDragon
KVRAF
22865 posts since 7 Jan, 2009 from Croatia

Post Mon Apr 26, 2021 8:29 am

Yes definitely looks like those knobs need some Deoxit :) And yes, testing by sending a MIDI CC (or sysex, whatever) would remove the analog parts from the equation and show you that, yes, indeed, with Ctrl-1 at zero, there is no phase movement between all 7 saws on a JP8k...
antto wrote: Sat Apr 24, 2021 12:16 am i don't remember whether i had any real clue what the sampling rate of the JP-80x0 is, so if anyone happens to know - do tell :D
I doubt JP8k was working at anything other than 44.1k.

Benutzername
KVRian
537 posts since 23 Jan, 2008 from Hamburg, Germany

Post Mon May 03, 2021 4:54 am

EvilDragon wrote: Mon Apr 26, 2021 8:29 am Yes definitely looks like those knobs need some Deoxit :) And yes, testing by sending a MIDI CC (or sysex, whatever) would remove the analog parts from the equation and show you that, yes, indeed, with Ctrl-1 at zero, there is no phase movement between all 7 saws on a JP8k...
antto wrote: Sat Apr 24, 2021 12:16 am i don't remember whether i had any real clue what the sampling rate of the JP-80x0 is, so if anyone happens to know - do tell :D
I doubt JP8k was working at anything other than 44.1k.
The DAC on the JP8000 runs at 18 bit and 44.100

User avatar
zerocrossing
KVRAF
12721 posts since 26 Jun, 2006 from San Francisco Bay Area

Post Mon May 03, 2021 7:21 am

The origin of the first super saw was when a saw from another planet realized his planet was dying, he sent his only son on a spaceship to earth. Here, the light of our yellow sun gives the saw super powers. I’m not exactly sure why they’re still super at night... battery?
Zerocrossing Media

4th Law of Robotics: When turning evil, display a red indicator light. ~[ ●_● ]~

User avatar
Markus Krause
KVRAF
1562 posts since 2 Jul, 2018

Post Wed May 05, 2021 1:40 am

+1 for 44.1 kHz
Tone2 Audiosoftware https://www.tone2.com

Oziaso
KVRer
15 posts since 11 Jan, 2015

Post Mon Feb 07, 2022 10:15 am

Urs wrote: Tue Apr 20, 2021 11:14 am
EvilDragon wrote: Tue Apr 20, 2021 9:05 am What a load of bull. :) Diva's supersaw is matching the OG pretty darn well.
Maybe he's accidentally using the "high quality" mode in Diva's digital osc which removes the aliasing? We added that in case our users were too baffled of the digital artefacts in a synth that's otherwise taking a lot of pride in sounding "not digital".
i bought into it as well...i even bought the jp6k last week and it is nice but then i tried a supersaw with the 3 vco on the Diva demo last nite and holy fk the fattest warmest supersaw ive heard . Hey Urs when i buy this synth is the full version better with cpu ?

User avatar
EvilDragon
KVRAF
22865 posts since 7 Jan, 2009 from Croatia

Post Mon Feb 07, 2022 10:22 am

No, demo is the same plugin as the full version, just adds some timed noise and crackles.

Oziaso
KVRer
15 posts since 11 Jan, 2015

Post Mon Feb 07, 2022 8:03 pm

EvilDragon wrote: Mon Feb 07, 2022 10:22 am No, demo is the same plugin as the full version, just adds some timed noise and crackles.
Thanks my man . I'm off to make her mine .

Oziaso
KVRer
15 posts since 11 Jan, 2015

Post Tue Feb 08, 2022 7:13 pm

EvilDragon wrote: Mon Feb 07, 2022 10:22 am No, demo is the same plugin as the full version, just adds some timed noise and crackles.
Sounds amazing thanks again !

stepvhen
KVRer
2 posts since 5 Dec, 2022

Post Sun Dec 04, 2022 7:04 pm

AUTO-ADMIN: Non-MP3, WAV, OGG, SoundCloud, YouTube, Vimeo, Twitter and Facebook links in this post have been protected automatically. Once the member reaches 5 posts the links will function as normal.
Apologies for necrobumping this thread with my first post on this forum. Over the last week or so I've delved through implementing a supersaw JP-8000 style, with respect to using 1996 hardware (loosely). I aimed for as few awkward values as possible, tried to use bit shifting as much as possible, and just sorta guessed on other stuff. I think its convincing so far:

1. The detune coefficients look to be 5, 16, 28, divided by 256. That is, f * (1 +/- d/256), where f is the fundamental frequency, and d is 5, 16, or 28. I think this covers a fixed point implementation, and supports previous findings with respect to rounding/measurement errors. These factors also neatly work out to summing to 7, and not just slightly above it (which makes sense, its all balanced).

I'll note that I started with (1,4,7) / 64, but the first detune wave never matched up with published measurements. I tried low prime values until I got to 5/256. This also disrupts the patter (11 between 5 and 16, 12 between 16 and 28), so any beating between similarly spaced waves is minimized. It follows that the next pair of saws to be added (to make 9) would be 41/256, then 55, 70, and 88, etc.

2. I've found a 2nd order RBJ filter (e.g. the stock JSFX in Reaper by Stillwell), with Q of sqrt(2), and cutoff at 2.5*f to be a match, visually at least. I don't have a JP-8000, and all the links to samples are dead by now (if anybody has some of the samples discussed here that they could share, that would be great)

For the wave generation itself, I chose naive saws. I am currently convinced this was the case in the original, but my method generates phase accumulator values so any other wave is possible (critical code sections below):

Code: Select all (#)

/* Reaper JSFX code */
@init
  ph1=0;
  ph2=0;
  padj=2^32;
  
function yass(p,dph,phsr)(
/* Don't have a solution for random phase, but didn't want to implement an RNG.
 * phase offests are the super low base phase, multiplied by some odd factor. This avoids bumping,
  * but does not produce any perceivable repetition or audible frequency shift. The static offset is
  * needed to avoid everything starting at the same spot. 
  */
  x = dph*4; o = 0;
  w1 = (phsr*1.05+0.1) + p + ((dph + x)/256);  
  w2 = (phsr*1.07+0.3) + p - ((dph + x)/256);
  w3 = (phsr*1.13+0.37) + p + x/64;
  w4 = (phsr*1.23+0.29) + p - x/64;
  w5 = (phsr*1.17+0.23) + p + ((x * 8) - x)/256; 
  w6 = (phsr*1.19+0.5) + p - ((x * 8) - x)/256;
  w1 -= floor(w1); w2 -= floor(w2); w3 -= floor(w3);
  w4 -= floor(w4); w5 -= floor(w5); w6 -= floor(w6);
  p -= floor(p);
  o += w1/8 + w2/8 + w3/8 + w4/8 + w5/8 + w6/8+p/16; 	/* fundamental is lower at full wet */
);

@slider
/* detune amount, currently linear */ 
  p1 = slider5;

/* Mix amount, constant loudness */
  dry = cos(0.5*$pi*slider6)/8;
  wet = sin(0.5*$pi*slider6);
 
@sample
ph1+=(adj/padj);  		/* increment base phase, use multiples of this value */
ph1-=floor(ph1);		/* floating point wraparound */
pout=0;
ph2=ph1*padj;			/* Shift back to fundamental frequency */
det = p1*ph2;			/* apply detune */
pout = yass(ph2,det,ph1); 	/* Yet another supersaw */
pout = pout*2 - 1; 		/* Center */
It started from a paper by Kleimola et al. "Phaseshaping Oscillator Algorithms for Musical Sound Synthesis" https://mural.maynoothuniversity.ie/4100/1/SMC2010.pdf (https://mural.maynoothuniversity.ie/4100/1/SMC2010.pdf). Within they describe a method for generating a hardsync wave (and also a supersaw, sorta, but I dropped that one due to phase bumping). My yass() uses this hardsync, but sets the base frequency so low you won't hear the sync action. This generates each saw needed by multiplying by some factor.

On the subject of "why 7 saws?" it might be because scaling the final waves afterwards could be done with a bit shift by 3 (divide by 8 ), and this leaves some headroom for the HP filter. The previous number would be 3 (uninteresting), and the next would be 15 (probably too much).

So a single multiply for the detune factor, multiply for phases (could be different), and then shifts and adds for every wave. Its not a perfect emulation (e.g. changing detune amount causes a click), but I'm happy with it.

I don't know if this is how it was done on the real hardware, but its satisfying to me, and makes me wonder about other potential applications for this hard-sync/multiply-up style of oscillator wave generation.

User avatar
Music Engineer
KVRAF
4180 posts since 8 Mar, 2004 from Berlin, Germany

Post Mon Dec 05, 2022 9:28 pm

stepvhen wrote: Sun Dec 04, 2022 7:04 pm Apologies for necrobumping this thread with my first post on this forum.
You apologize? Man, if your results are correct (I can't verify them) then you have just posted the ultimate solution to a long standing question, so thanks a lot!
1. The detune coefficients look to be 5, 16, 28, divided by 256. That is, f * (1 +/- d/256), where f is the fundamental frequency, and d is 5, 16, or 28. [...] These factors also neatly work out to summing to 7, and not just slightly above it (which makes sense, its all balanced). [...] It follows that the next pair of saws to be added (to make 9) would be 41/256, then 55, 70, and 88, etc.
OK - this stumped my a little bit at first, but I think, I have figured it out now: You mean:

Code: Select all

1 + (1+d*5/256)+(1-d*5/256) + (1+d*16/256)+(1-d*16/256) + (1+d*28/256)+(1-d*28/256) = 7
1 + (1+d*5/256)+(1-d*5/256) + (1+d*16/256)+(1-d*16/256) + (1+d*28/256)+(1-d*28/256) + (1+d*41/256)+(1-d*41/256) = 9
1 + (1+d*5/256)+(1-d*5/256) + (1+d*16/256)+(1-d*16/256) + (1+d*28/256)+(1-d*28/256) + (1+d*41/256)+(1-d*41/256) +  (1+d*55/256)+(1-d*55/256) = 11
right? ...edit: Oh - wait: this summing criterion seems to always hold, no matter what values I choose. For example, using 7,20,25 instead of 5,16,28, I still get 7 as sum (a := d/256):

1 + (1+a*7)+(1-a*7) + (1+a*20)+(1-a*20) + (1+a*25)+(1-a*25) = 7

so this summing criterion doesn't really seem to determine the pattern (...which actually becomes pretty obvious recognizing that (1+x)+(1-x) = 2 for any x). So, what's the general rule for the detuning coeffs here? I'm really not very good in that "what number comes next" game.
2. I've found a 2nd order RBJ filter (e.g. the stock JSFX in Reaper by Stillwell), with Q of sqrt(2), and cutoff at 2.5*f to be a match, visually at least. I don't have a JP-8000, and all the links to samples are dead by now (if anybody has some of the samples discussed here that they could share, that would be great)
Does this refer to the highpass that is apparently present in the JP-8000 supersaw?

Oh - and the forum hides your link, saying:
AUTO-ADMIN: Non-MP3, WAV, OGG, SoundCloud, YouTube, Vimeo, Twitter and Facebook links in this post have been protected automatically. Once the member reaches 5 posts the links will function as normal.
If you, want, you can try sending it to me via private message, then I will post it here (it apparently also gets removed when quoting - IIRC, this wasn't always the case)
My website: rs-met.com, My presences on: YouTube, GitHub, Facebook

Return to “DSP and Plug-in Development”