Menu Sidebar
Menu

Chris

Hi! I've got a new plugin you can have! These plugins come in Mac AU, and Mac, Windows and Linux VST. They are state of the art sound, have no DRM, and have totally minimal generic interface so you focus on your sounds.

Longhand

TL;DW: Longhand is an experiment in softclipping.

Longhand.zip (505k) standalone(AU, VST2)
Longhand in Airwindows Consolidated under ‘Saturation’ (CLAP, AU, VST3, LV2)

A sine is a very interesting thing, in part because it’s so very simple.

Think of a circle. A sine (and cosine) is what gives you that shape. It’s a simple arc in space. If you use the mathematical function sin(), it gives you a waveshaper, but if you don’t clamp it to half of pi (a constant called M_PI_2) you get a wave FOLDER for your trouble. As your wave gets louder it starts to wrap around again, first to zero and then all the way to negative 1 (the output of sin(), no matter what the input, will return something between 1 and -1).

Very simple, and it’s the waveshaper with the absolute gentlest transtion between linearity and clipping. Interestingly this means there’s a sharp transition at exactly zero when the rate of curvature flips, and this gave rise to my plugin Spiral (and newer versions of Channel), but as a simple function sin() has the softest clipping anything can have.

Does that make sin(), in every C compiler and every computer, perfect?

There’s a catch. To implement sin(), nothing out there really does it in the cumbersome, calculating way. There’s optimizations. As you hit exactly 1.0 (or -1.0) in the output, that’s when you can begin referring to a lookup table, but backwards. You can store a series of values and interpolate between them. You can build a dedicated hardware unit into your CPU to do it, or your GPU. You might get ambitious with this, since you’re probably drawing triangles and can’t be bothered with details. sin() is simple, but implementing it can be hacktastic. And of course it’ll still be perfect, because it’s math and it’s a computer, and what else could it be?

Longhand’s an experiment in checking this notion, for the purposes of audio.

First, there was PurestSaturation. It uses a form of approximation known as a Taylor Series, where you make a temporary number, and keep multiplying it by itself, and then alternately adding and subtracting the results by very specific amounts. The purpose of PurestSaturation was, ‘what if we make a sin()-like saturation, but intentionally use fewer terms than you’d normally have, so there’s less math in it? and then to top it off, what if we only use powers of 2 for the adding and subtracting and the scaling, so we’re retaining the mantissas of the temp variables even though our sine isn’t accurate anymore? It’ll be close, but it’ll be a different thing. What happens then?’

And so, that’s PurestSaturation. TapeHack has some similarities to this. Both are intentional departures from the majesty of sin().

But… what if we put our working variables in long double precision just for sheer overkill, and then rather than departing, we worked out LOTS of terms for a Taylor Series of sin(), beyond the point that even long double can follow? For starters, we are only doing simple multiplies and additions and subtractions. That’s all a Taylor Series is. What that does is, rather than model a sine in discrete quadrants and mapping it to where it’s needed, we’re calculating the wave as ONE continuous function. Every new term means more calculation, but also another layer by which this continuous function can wrap around, wavefold again and again, and produce a sine as a result.

Once we stop adding more powers to the temp variable, it stops being a sine and becomes a runaway wave-shaper, producing an output that’s no longer countered by a higher order of temp variable pushing the opposite direction… and at that point we have to clip or otherwise stop, or we get infinity out of the equation. It’s never a perfect wavefolder unless it’s infinite processing… but one thing it is, is a continuous function. It’ll wavefold around without ever transitioning to a lookup table or using any sort of optimization. Longhand, in a word.

What does it SOUND like?

The answer to that question is also why the dry/wet control doesn’t work as expected. Turns out I followed this one all the way through to release, without removing one little detail: it includes ‘dry’ in its gain trim, which can slam the processing right up to its final, no-further-wavefolds, ultimate peak. I had some consternation trying to figure out what I was even doing but that’s what it was. The maximum gain (substantial!) is what it takes to get Longhand to its final peak. The inputs are hardclipped, -1.0 to 1.0, for that exact reason and no other. There’s a taper to the control but 0.5 is not unity gain, it’s just pretty close to it. All of this was so I could run dry into normal ‘sin()’ and then subtract it and use BitShiftGain to bump up the delta and see what, if anything, was there.

And there really is the tiniest difference between the math library, optimized one, and Longhand. It made sounds when nulled out in this way. Does that make Longhand better? It’s certainly the tiniest amount more linear as the waveform rounds over the top, because it’s continuing the same algorithm. Now, of course, the dry/wet is returned to its original purpose… sort of. But since it’s not true Dry, it instead is an output that can boost past clipping. Any DAW that can run Longhand is a floating point buss, so you can pad it down again, getting a dry/wet where you’re effectively blending between dry and a soft-saturation that’s also lowering its clip threshold as it goes. Or, you can ignore dry/wet unless you’re using Longhand for an ultra soft clip and it’s not soft ENOUGH. If you’ve got any Dry in the signal and you’re not clipping the output, that guarantees Longhand is giving you a softclip that’s even softer than sin().

This was an experiment that got out of the laboratory since I’ve been scrambling so hard to finish up more demanding plugins. If you leave dry/wet out of it, Longhand is the purest and most continuous of soft saturators. Apologies for the odd behavior of the dry/wet, it got past me and there is so much else to do that I’m going to have to let it stand. Apart from that, is this a giant improvement over math_library sin()? No, because there’s no way to have it be a big change and also still be sin(). But it is different, in that it’s a very very high accuracy approximation that is continuous through the point where the math library uses an approximation, mirroring, and quadrants to return a result from any value you pass in.

This is not that, it’s very restricted and goes the cumbersome long way round to return a value. But if there’s fluidity to be had by working the answer out in longhand, this is how that’s done, and that’s the experiment.

Airwindows Consolidated Download
Most recent VCV Rack Module
download 64 Bit Windows VSTs.zip
download Signed M1/Intel Mac AUs.dmg
download Signed M1/Intel Mac VSTs.dmg
download LinuxVSTs.zip for x86
download Pi4VSTs.zip for 32-bit Pi
download Pi5VSTs.zip for 64-bit Pi
download Retro 32 Bit Windows VSTs.zip
download Retro PPC/32/64 Mac AUs.zip
download Retro PPC/32/64 Mac VSTs.zip
Mediafire Backup of all downloads
All this is free and open source under the MIT license, brought to you by my Patreon.

Density3

TL;DW: Density3 refines Density to keep up with recent developments.

Density3.zip (515k) standalone(AU, VST2)
Density3 in Airwindows Consolidated under ‘Distortion’ (CLAP, AU, VST3, LV2)

This secret weapon’s seen a little fine-tuning.

Density’s one of my first plugins. Its power is in using sin() based overdrive combined with a very gentle highpass, one that can dial back the amount of saturation on heavy basses… while allowing it through anyhow using the dry/wet control. It’s an incredible dirt-shaper for refined work.

But what if it used the technique from PurestSaturation? That’s Density3: finally an upgrade.

But there’s more! Turns out the negative Density range enjoys a change too: it blended better with a phase-flip. I could have known it needed one, except nobody constructs inverse saturations like this, as it doesn’t seem like a useful sound. Until you take advantage of its gatey qualities to dial in tone, between -1 and 0, that keeps the nature of the tone the same but dries up its quieter regions, as subtly as you’d like.

This is out because another dev I know was looking into Density2, and wanting to shoot it out against his own algorithms. I said, just so you know, there’s a Density3 and it’s on the github repository, it’s just not out yet.

Now it is :)

Airwindows Consolidated Download
Most recent VCV Rack Module
download 64 Bit Windows VSTs.zip
download Signed M1/Intel Mac AUs.dmg
download Signed M1/Intel Mac VSTs.dmg
download LinuxVSTs.zip for x86
download Pi4VSTs.zip for 32-bit Pi
download Pi5VSTs.zip for 64-bit Pi
download Retro 32 Bit Windows VSTs.zip
download Retro PPC/32/64 Mac AUs.zip
download Retro PPC/32/64 Mac VSTs.zip
Mediafire Backup of all downloads
All this is free and open source under the MIT license, brought to you by my Patreon.

BitDualPan

TL;DW: BitDualPan is dual pan that’s almost BitShiftGain.

BitDualPan.zip (518k) standalone(AU, VST2)
BitDualPan in Airwindows Consolidated under ‘Utility’ (CLAP, AU, VST3, LV2)

This is by request, and also a sort of experiment.

There’s a PurestDualPan already. It’s out, it’s free, it’s yours. There is also a BitShiftPan, which is a lot like BitShiftGain except you can control the sides independently. The first, PurestDualPan, is simply a dual pan in long double precision and dithered to the audio buss. This is unreasonable overkill but I’ve always been fine with that. I’m trying to get a sound and only have bits to work with. So in the ‘bit’ versions, they manage to get the sound of ‘utterly pristine and undiminished’ through gain changes by applying simple gain changes but only in 6dB increments.

In floating point, whether it’s 32 bit or 64 bit double precision, if you do that something special happens. A floating point number has two parts: a mantissa and an exponent. The mantissa is literally a tiny chunk of fixed point audio data (well, unless it’s just math data, but the same thing applies). The exponent? That’s how loud to play the first chunk. All the ‘bit’ plugins do is alter only the exponent, and pass through the mantissa untouched. Perfect audio… in 6.08dB increments.

For BitDualPan, that’s what you get… almost.

If you leave the sides hard-panned, the mantissas are untouched. If you swap the sides, same deal! If you set one side, or the other, to zero (silence) and then do anything at all with the other side, same deal. And then, if you pan in the sides (in 6dB increments, still) and leave both audible, that means both sides will be altered. They’re added together, so they’re a floating point add from two sources both of which were bit-shift gain staged, meaning the mantissa will be altered, and that means… what?

I honestly don’t know. I’m sure I don’t have the nicest playback system of anybody who uses my plugins, or the best ear: I’m just willing to try stuff and this becomes a new form of minimal processing. Instead of dithered multiplies, it’s summing a couple of floating-point inputs in such a way that there is only an add, nothing else. It’s certainly not gonna be any worse than any ordinary DAW summing, but does it gain anything from setting up the source audio so both sources are the exact mantissa of the input channels? It reduces the whole thing to a single add (per channel) and no multiplies, which are normally what you see in this sort of thing.

If you feel this one, use it in good spirits. It manages to cut the digital math to an absolute minimum but then apply it in a way I don’t often see, and it sits in the ‘dual pan’ role that I’ve long overlooked. And it uses the mechanic the Bit plugins enjoy: when you’re not touching the mantissa, you also don’t dither because the output’s already perfect. So, BitDualPan also doesn’t floating-point dither, to see if there’s a sound that comes out of the only mechanic being a floating-point add.

I’ll get right back to plugins that have more going on. There’s only so much you can do with ‘what is the sound of one floating point add per channel?’ But here you are, to compare with PurestDualPan. Now you can pick whichever you like best :)

Airwindows Consolidated Download
Most recent VCV Rack Module
download 64 Bit Windows VSTs.zip
download Signed M1/Intel Mac AUs.dmg
download Signed M1/Intel Mac VSTs.dmg
download LinuxVSTs.zip for x86
download Pi4VSTs.zip for 32-bit Pi
download Pi5VSTs.zip for 64-bit Pi
download Retro 32 Bit Windows VSTs.zip
download Retro PPC/32/64 Mac AUs.zip
download Retro PPC/32/64 Mac VSTs.zip
Mediafire Backup of all downloads
All this is free and open source under the MIT license, brought to you by my Patreon.

SoftClock3

TL;DW: SoftClock3 is a groove-oriented time reference.

SoftClock3.zip (535k) standalone(AU, VST2)
SoftClock3 in Airwindows Consolidated under ‘Utility’ (CLAP, AU, VST3, LV2)

You might or might not have heard of the first SoftClock. It came out shortly after I’d developed it because people desperately wanted to play with it, and before I was able to use it much. (still can’t, too busy with plugins.) It’s the metronome made of waving, wobbling tones where the beat is always a swoop of a (mostly) sine wave that goes up to a high point. Inspired by a joke metronome of dog woofs that proved strangely inspiring to play along to, SoftClock is the machine tempo with perfect regularity but no actual beat, where you have to place the ‘click’ of your notes wherever it SEEMS to be.

Version 3 is largely about taking SoftClock in a strange direction where it builds in Airwindows theories about tempo from 2020, and designs its wobbly guide sound around them, producing distinct wobbles based on what sort of tempo node you’re using.

But what on earth is a tempo node? Well, in practical terms it’s the thing that took away the whole ‘big beat’ and ‘snare pocket’ and ‘speed’ controls, replacing them all with ONE control that is simply ‘Flavor’. Set ‘flavor’ to zero, and you get a simple repeating pitch-waver to guide your tempo. It is not a ‘click’ but you’ll find it easy to sync up to it because the pitch-waver sounds like moving your body feels, and you can set a tempo by its regularity. The beat is where you feel the beat is. The waver is perfectly regular, so it doesn’t drift.

Set ‘flavor’ to 0.5, or even more, and things start getting a lot more interesting.

That’s because this ‘node’ concept of tempo covers a lot of bases. You can have ‘relaxed’ nodes where the groove mustn’t be too rigid or strenuous. You can have ‘tense’ nodes where it’s positively brittle, loaded with energy. There’s nodes that amp up the relaxed energy until it’s an infectuous groove… or nodes that take the relaxed energy and hang back, sneaking in attitude until the groove swaggers. It’s a continuum of groove, cycling between serene ease and jittery edginess, and it wraps around and around rising tempo like a barber-pole from the slowest to the fastest tempos. One of the Airwindows fans, Bo Danerius, worked out the algorithm and shared it, after I made a post outlining the theory: math webpages can do things like that given scatter-plots of data, and I’d sorted a whole bunch of hit records into these categories.

And now, SoftClock3 does it automatically: just set the tempo and it AUTOMATICALLY applies the speed, swing and wobble settings to deliver the correct pitch-wobble for whatever that tempo is. No guesswork. It even helps you tune in exact tempos for a song or riff: if you’re near the ideal setting, it’s likely that one direction will be ramping up speed and tension, and the other direction will slow the wavering and calm the energy. Either of these directions could be either faster tempo or slower: depends what node you’re already at. It ought to be a very natural way to find the correct tempo for whatever you like, by roughing in the general region and then exploring until SoftClock moves the way you need the song to move. Use the Flavor control to govern the amount of character that should be applied to the tempo: full relaxed or full tense don’t have swing, but groove and swagger do, and they’re adjusted by the amount of Flavor.

If all this sounds like complete madness, that is perfectly fine. It’s experimentation. We can’t all go ‘tell me what plugin you want and I’ll have AI make you one’. Some of us gotta deal with getting these big ideas, and pursuing where they lead, sometimes for years. It’s been six years since I posted the first thoughts on this stuff. SoftClock already existed. Why not run with the combination of all these things, and see what it does?

SoftClock3 is a groove-oriented time reference. It’s pursuing various theories nobody else has, in hopes of making a kind of ‘click’ that so perfectly represents entrainment (the way musicians feel time) that it can not only lock people in effortlessly, but also lead them towards the perfect tempo, through exaggerating the flavor of that tempo until it’s impossible to miss.

If it works, we can all discover a new thing together… and lay down some momentous grooves of all flavors and varieties. :)

Airwindows Consolidated Download
Most recent VCV Rack Module
download 64 Bit Windows VSTs.zip
download Signed M1/Intel Mac AUs.dmg
download Signed M1/Intel Mac VSTs.dmg
download LinuxVSTs.zip for x86
download Pi4VSTs.zip for 32-bit Pi
download Pi5VSTs.zip for 64-bit Pi
download Retro 32 Bit Windows VSTs.zip
download Retro PPC/32/64 Mac AUs.zip
download Retro PPC/32/64 Mac VSTs.zip
Mediafire Backup of all downloads
All this is free and open source under the MIT license, brought to you by my Patreon.

Older Posts

Airwindows

human-made bespoke digital audio

Kinds Of Things

The Last Year

Patreon Promo Club

altruistmusic.com

Dave Robertson and the Kiss List

Decibelia Nix

Gamma1734

|GRENS|

GuitarTraveller

ivosight.com – courtesy Johnny Wishoff

Podigy Podcast Editing Service

Super Synthesis Eurorack Modules

Very Rich Bandcamp

If you’re pledging the equivalent of three or more plugins per year, I’ll happily link you on the sidebar, including a link to your music or project! Message me to ask.