Supersaw!

VST, AU, AAX, CLAP, etc. Plugin Virtual Instruments Discussion
Post Reply New Topic
RELATED
PRODUCTS

Post

hakey wrote:Wouldn't one HP filter suffice for all 7 sawtooth processes?
...also the filter coefficient will be linearly related to the phase increment. you could get it with a single bit-shift.

it would come as no surprise if the filter coefficients happen to be exact add/sub/shift values, like (c << 2) - (c >> 4)

(== 3.9375)

you have to remember in these embedded systems: memory is extremely expensive, memory access is extremely intensive. if you can do _anything_ by a couple adds and a shift, that's the way it'll be done.

tables should be avoided at all costs, and minimizing the length of tables is extremely important. if possible, tables will be re-purposed and used for many things at the same time.

also, if you need to choose between two methods of operation, choose the one with less instructions. program space is valuable too.

is it a good idea to bank-switch into a large table, read values from it and apply the overhead of computing offsets? generally not unless the content of the table is extremely complex. the calculation of a two-pole filter is far less expensive than a table lookup including bank-switch.

for anybody who doesn't know i can recommend spending some time writing 16-bit x86 code or using embedded devices like for example the PIC series or Z80 series chips. with the usual 2k or 4k program memory and 128 bytes of ram you start to come up with some very interesting methods to do what you want to get done using the least instructions and memory possible. this lends intense insight into other related systems.
Last edited by aciddose on Sun Oct 31, 2010 10:54 am, edited 1 time in total.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

Urs wrote:
Sendy wrote:
antto wrote:also, i looked at the JP-8000 manual.. there is this Noise waveform
and it seems it "scales" with frequency (i'm not sure) but it smells like noise in a wavetable which is pitched just like any wavetable osc
The noise osc has a keytracking, sweepable resonant LP filter built into it, nice for making ghostly sine waves :)
Hehehe, it's a bandpass, isn't it?
On my one, only when the res is fairly high. *shrug*
http://sendy.bandcamp.com/releases < My new album at Bandcamp! Now pay what you like!

Post

if they used the same method as in the past, it's a series filter with feedback compensation. so it's for example, 12db -> 12db resulting in 24db. the resonance values then multiply rather than adding, so if you've got 6db peak on both, the output will be 12db peak against the signal making it seem a lot more like a bandpass.

the alpha-junos use this and it results in their signature sound.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

hakey wrote:
antto wrote:
if it's saw -> Filter:
7 x phase incrementing coefficients
7 x phase memory variables
7 x filter coefficients (calculation or lookup)
7 x filter memory variables (y1 y2 ..)
7 x sawtooth process + filter process

now.. the second case smells like more CPU consumption.. :shrug:
Wouldn't one HP filter suffice for all 7 sawtooth processes?
That's correct.

Add to that, you can't just have a single wavetable lookup. It would have to be mipmapped wavetables and there would have to be interpolation. And if they were, why didn't they antialias them beyond C5?

The trick is to create a reasonably aliasing sawtooth with least possible instructions on a fixed point system. A naive saw doesn't cut it IMHO, but a parabolic one explains that the peaks in the output are sharper than those of any highpassed sawtooth I came along. A few experiments with that, and it sounded pretty alike.

Then obviously there's a lowpass involved. Maybe that's the filter of the JP itself, but I find that other waveforms have more clarity on the top end. The Supersaw only has that with a tiny amount of resonance in the filter section. Hence I think there's an averager... which I'd leave out and oversmaple instead to preserve as much crispyness as possible.

Well, I spent only two days on this, and I think I got reasonably close.

Post

i was going to mention the parabolic method - you'd just need to compute a parabolic shape and highpass filter that to get reasonable anti-aliasing. the result would be a waveform with odd harmonic peaks, not perfect 1/n, leading to these ripples which look like a 12db highpass with Q and a sharper falloff of harmonics near the top end where of course 1/n would alias far more, but 1/parabolic_resulting_shape(n) avoids aliasing.

the only question is how do they get enough bits to compute that? would need to know specifics of the processor used to guess the exact algo.

that still wouldn't change anything but the timbre of the solo waveform though. the over-all effect of the unison would still be based upon amplitudes and pitch like any other. nothing magical about the unison itself - just the waveform.
Last edited by aciddose on Sun Oct 31, 2010 11:06 am, edited 1 time in total.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

@Sendy and AD: You might be right :oops:

Post

i'd go with x*(1-abs(x))<<2 unless there is some tricky way to compute a parabola without the mul.

then you can just mix all your unison waves in that format, apply the highpasses after mixing.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

hakey wrote:
hakey wrote:
Urs wrote:Here's my take:

Example 1
Example 2
And here's mine:

Super?

Anywhere near the ballpark/carpark/Yellowstone National Park?
No more comments?

I think my attempt sounds pretty damn close to Urs' Example 2 (the real JP8K).
Jup, sounds totally like it.

Anyways .. we have 2010 (soon 2011) ...
Why do I have to read "Supersaw!" as a topic here?!? :cry:

Post

i realize the parabola i gave is odd-harmonic.. you'd need two muls to get even harmonic, for example 2.5*x*(1-x*x)
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

Urs wrote: The trick is to create a reasonably aliasing sawtooth with least possible instructions on a fixed point system. A naive saw doesn't cut it IMHO, but a parabolic one explains that the peaks in the output are sharper than those of any highpassed sawtooth I came along. A few experiments with that, and it sounded pretty alike.
Ok I'm just working off samples people have posted but...

If you look at nyquist where the harmonics stop and at where the alising level is, it's a around 10db difference. So the foldback aliasing is comming back in 10db lower, which would tie in almost perfectly with 2x oversampling of a niave sawtooth. You'd get 6db drop as it goes from fs/4 up to nyquist, and then another 3dbs as it folds backdown to fs/4.

Another reason why I'd sugest that it's a niave sawtooth is that the noise floor from the aliasing is flat and dense, in my experience you dont get that if you use an oscillator with better bandlimiting.

The funky shape looks like it's been stuck through a 12db highpass filter as antto sugests. This is a (blep generated but straight) sawtooth through a 12db highpass, a tad of resonance.

Image

And it could be that the JP whatever is running internally at 96k, hence the lower aliasing when looking at samples in 44100.

Post

Everyone is of course free to create their own interpretation of the JP8000 Supersaw. I have a unit here at the moment and I simply couldn't get naive sawtooths to sound similar, no matter what highpass filter I used. If anyone manages to do it with naive saws, then he probably saves an instruction or two. But I still doubt it would behave exactly like the hardware unit.

Post

Urs example 1 got much of the example 2 body but too much sine wave.

IF it was an osc in zebra then i would use OSCFX (fundemental) to lower the volume of the sine tone this would clear out the muddyness and make it more clear.

/Michael
www.xsynth.com - Sound Synthesis with Vintage flavour

Post

sample.wav.rar
here's a recording.. testing out 7 sawtooths with 7 12dB high-pass filters
i vary the detuning/mix and the filter offset/resonance

it seems the sweet spot for the filter is 0.25 octaves above the osc, and resonance between 0.6 and 0.75

there is nothing else in the signal chain, just a simple GATE (on/off) amp envelope, pretty simple

using only 1 HP filter after the mixed sawtooths is not going to work IMO
i gotta check the maths involved in SVF coefficients calculation but i think it ain't very easy
aciddose: you mean, they could have converted the osc coefficients to filter coefficients because both follow the same frequency/cutoff?
but erm, i'm not sure about this, for an OSC you need phase increment (omega=freq/Fs)
for a filter you need the same omega, but then, usually most filters involve some exp() call or even worse - trig functions..

hm..
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

Sendy wrote:
antto wrote:also, i looked at the JP-8000 manual.. there is this Noise waveform
and it seems it "scales" with frequency (i'm not sure) but it smells like noise in a wavetable which is pitched just like any wavetable osc
The noise osc has a keytracking, sweepable resonant LP filter built into it, nice for making ghostly sine waves :)
oh, so the noise is not a pitch-shifted table, it's the filter that is "pitch'ed"
hm.. interesting ;]
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

antto wrote:i gotta check the maths involved in SVF coefficients calculation but i think it ain't very easy hm..
it definitely is easy. the linear approximation for svf coefficients is close enough that you'd only be at most 10hz off for the highest notes this machine can produce. error is related to the magnitude of the coefficient, at lower frequencies the error is reduced dramatically.

also, there need only be _one_ filter, and it can be a naive svf implementation. the feedback amount is an exact bitshift+add, and the coefficient a bitshift+add. that leaves two muls to be done for the filter - easy.

the same would apply for the highpass filters needed for the parabolic generator - but nollock says the aliasing is _not_ reduced from a 1/n spectra so it's unlikely this method was used.

_if_ a parabolic were used, you wouldn't need an additional svf to get the ripples we see near the fundamental, that would be a consequence of the generator itself. the filter in that case would also only need to applied once to all unison waves - they're close enough in frequency that the amplitude error would be insignificant and perhaps even desirable.
Last edited by aciddose on Sun Oct 31, 2010 3:51 pm, edited 1 time in total.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post Reply

Return to “Instruments”