visualizersdotnl/bison-supersaw
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
This is a verbatim snippet from bipolarudio.nl's otherwise (at time of writing) closed FM. BISON codebase. Since we've got ideas for our technology it will stay closed for the time being. - Why? It is intended to show how easy it actually is to implement a JP-8000 style supersaw oscillator instead of many, often clinically sounding, interpretations I've heard. - What does it sound like? Finding out how it sounds is a matter of buying a JP-8000, peruse Youtube to hear one or just simply implementing this yourself. One thing though: high detune causes that sweet, sweet dissonance <3 - How to apply? It fares especially well in a patch (FM. BISON does this with ease) that has multiple of these oscillators plus some pure sines or filtered saws to thicken it all up. I could go on and sell even more of our ideas, but instead you be the sound designer/engineer yourself. This is the basic ingredient. - Performance. It performs just fine though if need be it can of course be optimized according to target hardware; we hardly use any SIMD code in FM. BISON itself, in part because we never quite reached the point where it was necessary and over time, in part, because not doing so sustains a better degree of readability and ease of alteration. Calculating the polynomial into a reasonable coarse table is not only essential for fast real-time alterations of the oscillator's paramaters, even the table's modest size and linear interpolation between values actually means the result comes a bit closer to the JP-8000, since you guessed it, those settings are controlled by 7-bit discrete controls on the instrument itself (MIDI). - A review after 'From Silicon to Darude Sand-storm' presentation by 'The usual suspects' Video: https://youtu.be/XM_q5T7wTpQ - a highly recommended watch! Takeaway: sticking with Szabo's numbers to approach Roland's sound in combination with our own more modern yet also imperfect (read: intentionally not squeaky clean) implementation makes sense given the quite different problem domain here (in a broad sense). As it turns out the actual JP-8000 (and 8080) actually employ a "surprisingly" naive implementation *but* do so at twice the sample rate to combat aliasing, among other differences. I'd offer that might not have been their first choice, but given certain constraints definitely a good one. Other than that, if you give it a proper look: what happens here is *not* much different *nor* stupidly inefficient. We have another approach to combat aliasing without oversampling: first of all we source our sawtooths from a bandlimited oscillator (oscPolyPhase()) and on top subtract a pure sine from the sidebands to curtail harmonic distortion further. Oversampling *and* employing what we do will definitely do away with some of the grit you find in Roland's iconic sound and it complicates the oscillator in such a way that we actually stand to lose performance and accuracy. In other words: it just isn't the same thing, much like their sound is chiefly defined not only by the supersaw but by the entire DSP chain (filters, envelopes, you name it) and that is something we explicitly are not in the business of replicating. Why? Because this is part of our *own* instrument. Given the availability, certainly now, of accurate to perfect emulation I suggest you do the same: take the unique footprint and complement it with your own ideas, the virtual instrument / plug-in market is saturated with clones and emulators as it is; not unlike all those hardware boutique clones :-) That said, I will in due time write another version of this oscillator that more closely emulates the actual JP-8000, including oversampling and matching fixed point (integer) arithmetic. I will release that code alongside this in this repository as soon as I find some time to actually do it. In the meanwhile I will keep this implementation up to date with what we use internally. On behalf of myself and my partner in bipolaraudio.nl: have at it! Please do give everyone involved a shout out in your project or product if this made you any the wiser. - Niels J. de Wit, 12/01/2026