DPW experiments
- KVRian
- Topic Starter
- 1091 posts since 8 Feb, 2012 from South - Africa
Hey people, been mucking around with Differentiated Parabolic Waveforms for a while now - and quite amazed by its simplicity and versatility. Obviously - it's inferior to all the blips,blams and bleps - but as a c++ and mathematical noob, I think it is probably the easiest qausi bandlimiting technique out there - even wavetables isn't so easy to implement - and even harder to "populate" with anything 'custom',IMHO.
Sofar, I've done:
Standard Saw, Standard Pulse, Standard Triangle, Vintage(rounded) Saw, Pulse-Width Saw, Pulse-Width Triangle, Exponential Triangle, Soft Saw (nearly same harmonic slope as triangle), Vintage Saw to Fake sine morph(can maybe morph Saw-Sine-Triangle).
Strangely enough - after reading alot of old digital synth manuals - some of these shapes have popped up(more than once) - especially stuff from Roland
Inanyway, any other papers/blogs out there that has more info on DPW? Especially related to making other shapes - apart from a standard Saw & Triangle?
Or, I'll show you mine and you show me yours?
(Except if you're under-age )
Sofar, I've done:
Standard Saw, Standard Pulse, Standard Triangle, Vintage(rounded) Saw, Pulse-Width Saw, Pulse-Width Triangle, Exponential Triangle, Soft Saw (nearly same harmonic slope as triangle), Vintage Saw to Fake sine morph(can maybe morph Saw-Sine-Triangle).
Strangely enough - after reading alot of old digital synth manuals - some of these shapes have popped up(more than once) - especially stuff from Roland
Inanyway, any other papers/blogs out there that has more info on DPW? Especially related to making other shapes - apart from a standard Saw & Triangle?
Or, I'll show you mine and you show me yours?
(Except if you're under-age )
-
Richard_Synapse Richard_Synapse https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=245936
- KVRian
- 1136 posts since 20 Dec, 2010
You can make anything with DPW using samples, ie you simply pre-integrate a wavetable then differentiate it on playback. For the ones you made, which order did you use, and care to share your formulas?
Richard
Richard
Synapse Audio Software - www.synapse-audio.com
- KVRian
- Topic Starter
- 1091 posts since 8 Feb, 2012 from South - Africa
Good idea, but I'm a noob - all my stuff works with a simple counter i.e. a good old saw.Richard_Synapse wrote:You can make anything with DPW using samples, ie you simply pre-integrate a wavetable then differentiate it on playback...
All are first order (I did mention simplicity ) , taking into account that I probably will use a modest 2x oversampling - which gives about -18dB less aliasing, first order seems practical - and no need to fire-up Maxima. I'll share one 'new' shape - a Vintage Saw.Richard_Synapse wrote:For the ones you made, which order did you use, and care to share your formulas?
Code: Select all
A DPW triangle:
a= abs(saw) - 0.5;//centre it around zero
b = a * abs(a);//parabole
c = a - b;
d = differentiate(c);
Now a DPW "Vintage saw":
a1 = abs(saw) - 0.5;
a2 = a1 * a1;//parabole
b = a2 * a2;//another parabole
c = b - a2;
d = differentiate(c);
output will be one octave higher though, so freq/2.
-
Richard_Synapse Richard_Synapse https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=245936
- KVRian
- 1136 posts since 20 Dec, 2010
Cool, I'll try it...what is the pulse-width triangle?
Here's how you do any shape. Take a buffer of say 2048 samples with whatever shape you want in it. Then simply add up the 2048 samples from first to last (this is the integration step). This gives you a new set of 2048 samples, and of course you do this prior to runtime and only once. Now using your terminology the realtime output is then simply
d = differentiate( buffer );
where 'i' is between 0..2047 in this example and corresponds to your 'saw' variable. You probably want to use interpolation, but the above will work for a start.
Richard
Here's how you do any shape. Take a buffer of say 2048 samples with whatever shape you want in it. Then simply add up the 2048 samples from first to last (this is the integration step). This gives you a new set of 2048 samples, and of course you do this prior to runtime and only once. Now using your terminology the realtime output is then simply
d = differentiate( buffer );
where 'i' is between 0..2047 in this example and corresponds to your 'saw' variable. You probably want to use interpolation, but the above will work for a start.
Richard
Synapse Audio Software - www.synapse-audio.com
- KVRian
- Topic Starter
- 1091 posts since 8 Feb, 2012 from South - Africa
Not sure if it completely qualifies as "pulse-width" :Richard_Synapse wrote:Cool, I'll try it...what is the pulse-width triangle?
Can make it assymetrical, but the aliasing creeps back a bit.
-
- KVRian
- 876 posts since 24 Jun, 2002 from Berlin
seems the amplitude varies a lot based on frequency. Do you know if there is a precise way to compensate for this?
cheers,
oli
cheers,
oli
-
Richard_Synapse Richard_Synapse https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=245936
- KVRian
- 1136 posts since 20 Dec, 2010
Yes, you simply divide the output by frequency (more precisely, the phase increment). If you use higher order DPWs, be sure to use doubles, otherwise you'll quickly run into numerical issues.
Richard
Richard
Synapse Audio Software - www.synapse-audio.com
-
- KVRian
- 876 posts since 24 Jun, 2002 from Berlin
thanks, that works. Anyone know if a quasi-bandlimited saw-triangle morph can be achieved with this approach?
- KVRAF
- 5223 posts since 20 Jul, 2010
Technically, anything that isn't a pulse can't *really* have a pulsewidth, a more technically accurate term might be "duty cycle" as it appears to be speeding up each excursion and introducing a relaxation period (essentially the triangle works twice as fast so it can go on holiday at the end of the week ).Ichad.c wrote:Not sure if it completely qualifies as "pulse-width" :Richard_Synapse wrote:Cool, I'll try it...what is the pulse-width triangle?
Can make it assymetrical, but the aliasing creeps back a bit.
But yeah, pulsewidth is just one of those terms that has become a catch-all term and it's not overly technical, so I'd stick with that.
http://sendy.bandcamp.com/releases < My new album at Bandcamp! Now pay what you like!
- KVRian
- Topic Starter
- 1091 posts since 8 Feb, 2012 from South - Africa
Probably not - the DPW saw and DPW tri - are two different approaches, there might be another 'different morph' available. I still haven't done the gain compensation for my non-bandlimited saw-tri morph(unity parabole method) yet - anybody want to share their formula? I'm still going to try and do a saw-tri morph with DPW though - if I can find a way around the "abs" function in the DPW triangle case - it should be doable - I think.hibrasil wrote:thanks, that works. Anyone know if a quasi-bandlimited saw-triangle morph can be achieved with this approach?
Random note - has anybody seen the "triangle mod" of the Roland JP-8080? Page 66 of the manual. That's simple interger wrap around , must be highly oversampled though Also - I've done all of the 'shapes' of the jp-8080 saw (page67) seperately with DPW - think I *might* be able to combine them...
- KVRAF
- 5223 posts since 20 Jul, 2010
The Triangle Mod wave is pretty interesting, but the parameter range is WAY too small. Actually, the diagrams in the manual overstate the variance in the waveform you can produce. Some softsynths like Zebra, Zeta, Helix etc can do a much better job giving you a nice full sweep, some can even wrap the wave multiple times.
More interesting I found was the regular Triangle wave in the JP:
Unlike the Triangle Mod waves, these diagrams match the synth output precicely, and it's a really weird and interesting transform that I haven't seen implimented anywhere else. Notice that in the middle position the waveform's already lost it's symmetry as well as changed tension. It's great for making intricate but soft sounds.
More interesting I found was the regular Triangle wave in the JP:
Unlike the Triangle Mod waves, these diagrams match the synth output precicely, and it's a really weird and interesting transform that I haven't seen implimented anywhere else. Notice that in the middle position the waveform's already lost it's symmetry as well as changed tension. It's great for making intricate but soft sounds.
http://sendy.bandcamp.com/releases < My new album at Bandcamp! Now pay what you like!
- KVRAF
- 2554 posts since 4 Sep, 2006 from 127.0.0.1
i have aproximated both the trianglemod and triangle from the jp-8000 (based on audio recordings from, Sendy ) in my polysynth (which is under construction)
the trianglemod is basically funky math and modulo
the triangle was much harder, it required a funky shaper
and after i looked a bit more into this shaper, i wonder - maybe they used THAT same shaper for the weird shape of the sawtooth (in the supersaw)
here's some audio: https://www.box.com/s/nbpl1zuxkxx7rkc4d548
btw, thanks Sendy for the very precious audio recordings from the jp8000 ;]
the trianglemod is basically funky math and modulo
the triangle was much harder, it required a funky shaper
and after i looked a bit more into this shaper, i wonder - maybe they used THAT same shaper for the weird shape of the sawtooth (in the supersaw)
here's some audio: https://www.box.com/s/nbpl1zuxkxx7rkc4d548
btw, thanks Sendy for the very precious audio recordings from the jp8000 ;]
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
- KVRian
- Topic Starter
- 1091 posts since 8 Feb, 2012 from South - Africa
Interisting waveshaper antto! Guess there is truly different ways to skin a cat! Don't know if we are refering to the same 'supersaw' - but a shaper on that seems unlikely - the odd supersaw shape comes from the phase of the tracking HP, IMHO.
P.S. What software did you use for you expession evaluator? It looks cool.
P.S. What software did you use for you expession evaluator? It looks cool.
- KVRAF
- 2554 posts since 4 Sep, 2006 from 127.0.0.1
exactly that shape, but i strongly don't think they actually use a HP filter tracking the oscillator frequencyIchad.c wrote:Interisting waveshaper antto! Guess there is truly different ways to skin a cat! Don't know if we are refering to the same 'supersaw' - but a shaper on that seems unlikely - the odd supersaw shape comes from the phase of the tracking HP, IMHO.
this shaper can be bent to give that same waveform
uhm.. mIRCP.S. What software did you use for you expession evaluator? It looks cool.
EDIT:
here, using the same shape you get this which looks pretty much like one of the jp8000 supersaws
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
- KVRian
- Topic Starter
- 1091 posts since 8 Feb, 2012 from South - Africa
Hmmm, interisting hypothesis. Does your "shaper" explain the theoretically reduced aliasing below the fundamental? And what do you feed it with - a naive saw or something else?antto wrote:exactly that shape, but i strongly don't think they actually use a HP filter tracking the oscillator frequencyIchad.c wrote:Interisting waveshaper antto! Guess there is truly different ways to skin a cat! Don't know if we are refering to the same 'supersaw' - but a shaper on that seems unlikely - the odd supersaw shape comes from the phase of the tracking HP, IMHO.
this shaper can be bent to give that same waveform