The Roland Alpha Juno is a formidable beast. It could be argued that it is a crucial synth for 90s rave/dnb and beyond. I would say so.
One of the iconic sounds is the infamous ‘hoover’ patch.
This is basically created by turning up everything on the synth ha. Or something like that. It’s unique sound is dependent on a few crucial aspects, such as the chorus, portamento, vibrato, sub oscillator etc. One of those thing is the quirky pulse-saw wave.
Let’s take a look at how to make one.
A cursory internet search reveals a diagram something like this:

A sawtooth that has two square notches nibbled out of it. I’m imagining part of the motivation was that it was an easy hack back when integrated circuits cost a fair amount. It also sounds awesome!
Now I haven’t formally verified that this is the exact shape used on the original, however - it sounds like it and thats good enough for me. (If you do know then please do say)
First we’ll need a sawtooth and a variable pulse width at twice the frequency. Both mapped between 0 and 1 (not ±1)
I forgot to mention - the important part of this sound is the pulse width modulation - ooh its soo creamy and delicious! I think because when you have notes at different pitches, although they might be pulse modulated by the same lfo, because the periods are different they don’t all move in lockstep which really adds to the richness.
Then we simply multiply the pulse and saw together and shift to be centred around zero (ie move to ±1)
Try this on any synth you can - it sounds amazing 😀
Also sounds good at higher modulation rates too.
But, in the spirit of yak-shaving, there is a problem.
In the digital domain, and at 48/41k sample rates, the sharp transitions will never fall precisely on a particular sample - at higher pitches the will jump between different samples (smallest discrete time steps) and this will be heard as a gritty low inharmonic noise. (its actually harmonic but flipped upside down in terms of frequencies)
This can sound okay if you want this kind of ‘radio tuning interference’ noise, but when you’re playing a chord at a high enough frequency it can sound very congested. Its also exacerbated by the pulse already being double the root frequency.
So what do we do? Well previously we have been using phase modulation feedback in synteland (word salad alert!) as a simple way to make uncrunchy sawtooths.
This is like fm synthesis where a wave modulates itself and a saw results.
But it would be hard (or at least I can’t think of a way) to modulate the pulse width of this.
So what other options do we have? Well my preferred approach is always something that is hacky/easy.
I tend to put off doing things ‘properly’ as much as I can. Until I really have to. This life approach is not recommended!
enter polyblep
I had previously come across this nifty technique to do what is called ‘anti-aliasing’ (avoiding the crunch we just mentioned).
There is a paper called ‘Antialiasing Oscillators in Subtractive Synthesis by V. Valimaki and A. Huovilainen. It spells out the basic technique, but doesn’t offer an implementation so I spent several hours of head scratching to get something working lol. In the end defaulted to kvr forums to use the guts of one on there. One thing I wondered was is it possible to write it in syntelang (spoiler: it is!) - which means you could live code it ha. I don’t know why you would want to, but it’s kinda fun and saved modifying the Go code.
Anyway - it sounds great :D
How does polyblep work? well remember those sharp transitions in the wave form? I we take the sample immediately before and immediately after and joggle them about a bit (using a U-shape quadratic (multiply it by itself - squaring (lisp - giggle))) then that smooths the jumps and they act as if they land more accurately on a particular sample. Sounds more complicated than it is.
Now we can put all the pieces together, in syntelang:
[ jpls
out ^freq
osc
push
plyb
out sw
pop
mul 2
mod 1
push
plyb
out pls
pop
+ @
mod 1
plyb
- pls
- @
+ 1
mul sw
- 0.5
]
this will give a function where the argument sets the pulsewidth. The plyb function is the polyblep.
How it works: we use an old trick I found in Sound On Sound magazine’s Synth Secrets - subtract two sawtooth waves to make a pulse. Note that even though we’re using two (0,1) range saws, we need to subtract the pulse width to shift it back up to between zero and one, otherwise the multiply won’t work properly.
Now we have juno goodness! Whoop!
bonus content
I recently saw a Chaos Computer Club talk about reverse engineering vintage digital synths - it was about the JP-8000 (another Roland synth) which has a legendary supersaw sound that, basically, is responsible for trance. Amazing.
Anyway, the talk is really well done and if you pause at the right point they list the detuning coefficients for the seven sawtooths that make up the sound.
Which of course I made into a sound in Syntə hehe.
It sounds like this:
oooh lovely.
I can also recommend some other talks from the conference, including the Bunnie/Xobs one ( rewrite it in rust! lol) and the Doctorow one is obviously cool if you’re not familiar.
bonus bonus content content
The Reese bass is a classic and highly influential sound made by the legend that is Kevin Saunderson (Go listen to Inner City - Good Life now!) (the bass was actually on a different track called Just Want Another Chance)
It was used in the track Pulp Fiction by Alex Reece (confusingly)
It was originally made on an Casio CZ-5000 which is an awesome synth. Remember that phase modulated sawtooth we mentioned earlier? Well that is the same synthesis technique. So what are we going to do? Make a Reese bass of course!
Its deceptively simple - the core of the sound is two sawtooths detuned either way by about half a semitone, with the phase distortion amount low to simulate a low pass filter.
Ooof - magic.
Hope that was fun/interesting?!
Catch ya laterz 💖