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.

DitherFloat

TL;DW: Look down. Look up. Your plugins are now dithered to 32 bit floating point :D

DitherFloat

This began as a challenge. A forum poster said you couldn’t dither floating point outputs, and posted a link to a study explaining why.

Floating point (including the kind that fits between every plugin in a mix on MacOS or 32-bit bussed VST) has fixed point math of the kind one needs to dither, in a part of the number called the mantissa. (64-bit VST has it too, just more finely grained.) It’s not all that hard to work out how to apply dither to this part. You scale it up or down according to the part of the number called the exponent.

The trouble is (a) it’s hard enough getting people to dither to 16-bit CDs, and (b) the argument is that the amplitude of the dither would fluctuate madly, making it unhelpful and incorrect. This is kind of like how flat dither isn’t correct: with only one noise source what happens is, the noise floor fluctuates according to the waveform causing a kind of distortion. If you have a low sine wave you’ll hear the ripple effect of flat dither, and the argument is that dithering floating point is like that only more so (and so, nobody ever tried).

DitherFloat demonstrates this, and it’s not true. You can TPDF dither (even PaulDither, like I’m using here) floating point. The noise doesn’t fluctuate according to the waveform represented in the mantissa. It fluctuates according to the value in the EXPONENT, because it has to, because the quantization noise also fluctuates wildly in volume. And if you get it right, you end up with no truncation distortion at all, just like using TPDF to fixed point.

The video explains more and shows it working. It’s practically impossible to hear ONE stage of 32 bit truncation (may be literally impossible, I think) but you can cheat and hear it as obviously as you like. You just add a huge offset to the number, convert it to float, and then subtract the offset again: and that’s what DitherFloat does. It’s a demo. It shows you there’s still truncation in floats, and it shows you the way TPDF dither completely removes the truncation distortion. It linearizes the signal so that no trace of the truncation is present (that’s how correct dither works).

You can’t add DitherFloat after existing plugins to fix them: even though you can use it (with zero offset) to export a 64 bit buss to 32 bit float and dither it, by itself DitherFloat can’t fix existing plugins. You would have to put the code for the dithering, into every single plugin that outputs 32 bit floats. Every MacOS plugin, every singlereplacing VST (every older VST implementation before they implemented 64 bit buss). For the Airwindows library that would involve personally revising every plugin I’ve released under the VST/Patreon years, many hundreds of plugins.

So I did. :D

See the video, and to update everything you have, download NewUpdates.zip to drag and drop the whole collection (or whatever subset of it you use) to your plugins folder. Each individual plugin package has also been updated for people who download them one at a time, or find them through search. The only exceptions are plugins that are already dithers, or things like DCOffset and BitShiftGain that are meant to work with the direct sample values (BitShiftGain is purer than even 32 bit dithering: it literally changes only the exponent and leaves the mantissa always exactly as it was, only at a different gain scale, so it’s cleaner than even PurestGain). (if you need to roll back for any reason, BeforeFPDither.zip is the previous version, untouched)

It’s free. Go ahead and use all this. I don’t have to put any barrier in your way. Update the plugins for free, read the source code on my github page, and the new code is this, intentionally dual licensed in addition to my MIT license.

//This is free and unencumbered software released into the public domain.
uint32_t fpd; //this goes where fpNShape went, but it's an unsigned int used for the random generator
fpd = 17; //the random generator is xorshift32 which can't start off with zero.
//then in the actual processing code:
int expon; frexpf((float)inputSample, &expon);
fpd ^= fpd<<13; fpd ^= fpd>>17; fpd ^= fpd<<5;
inputSample += (fpd*3.4e-36l*pow(2,expon+62));
//Anyone is free to copy, modify, publish, use, compile, sell, or
//distribute this software, either in source code form or as a compiled
//binary, for any purpose, commercial or non-commercial, and by any
//means.
//In jurisdictions that recognize copyright laws, the author or authors
//of this software dedicate any and all copyright interest in the
//software to the public domain. We make this dedication for the benefit
//of the public at large and to the detriment of our heirs and
//successors. We intend this dedication to be an overt act of
//relinquishment in perpetuity of all present and future rights to this
//software under copyright law.
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
//EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
//MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
//IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
//OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
//ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
//OTHER DEALINGS IN THE SOFTWARE.

64 bit version for hilarious overkill is almost identical but with small changes in frexp() and the constants. This is now a sort of mad community effort, so that becomes public domain too:

//This is free and unencumbered software released into the public domain.
uint32_t fpd; //this goes where fpNShape went, but it's an unsigned int used for the random generator
fpd = 17; //the random generator is xorshift32 which can't start off with zero.
//then in the actual processing code:
int expon; frexp((double)inputSample, &expon);
fpd ^= fpd<<13; fpd ^= fpd>>17; fpd ^= fpd<<5;
inputSample += (fpd*6.4e-45l*pow(2,expon+62));
//Anyone is free to copy, modify, publish, use, compile, sell, or
//distribute this software, either in source code form or as a compiled
//binary, for any purpose, commercial or non-commercial, and by any
//means.
//In jurisdictions that recognize copyright laws, the author or authors
//of this software dedicate any and all copyright interest in the
//software to the public domain. We make this dedication for the benefit
//of the public at large and to the detriment of our heirs and
//successors. We intend this dedication to be an overt act of
//relinquishment in perpetuity of all present and future rights to this
//software under copyright law.
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
//EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
//MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
//IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
//OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
//ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
//OTHER DEALINGS IN THE SOFTWARE.

It’s not complicated but it’s my own code and it’ll work: it’s even pretty easy to drop into other plugins. If anyone’s game to do that and shout out that they did, I’d love to hear about it.

If they don’t, they will just continue adding a little truncation with every single plugin, every single calculation, and now none of MY plugins do that :)

If you like me being able to discover something like this, becoming determined to explore it, discovering that it’s a huge upgrade and implementing it into every (relevant) plugin I make, and then giving it to the world even more than I usually do, please support my Patreon. I like days like this. I like helping the industry (to the extent it’s willing to be helped, which is always a question) and advancing the science of digital audio, and I especially like making demos where it’s plain to hear what’s being done under the hood. And I wouldn’t be able to do it if not for Patreon, which doesn’t make as much money as commercial work (I’m still very poor) but it’s steadier, and it lets me give these tools to ALL the musicians whether they’re broke or not :)

Thank you and good night. Next up is Pafnuty, next week.

StudioTan

TL;DW: StudioTan is all the ‘non-dither’ dithers, up to date and convenient.

StudioTan

Let’s make things a little simpler.

If you were curious about the new work in quantization I’ve been doing… where I’ve put out a series of experimental plugins with names like Dither Me Timbers and RawGlitters and then said they weren’t dithers, or if you tried stuff like Dither Me Timbers and then found your limiter set to 0dB was now giving you overs, or if it just didn’t make sense at the time…

This is for you.

StudioTan is the sum total of all I’ve been doing with ‘dither’ that isn’t dither, for the last two years. It’s got three algorithms, StudioTan, Dither Me Timbers, and Not Just Another Dither. Each one is brought up to date, optimized, voiced to do what it does best. The first two begin with the use of quantization to apply EQ at ‘noise floor’ levels and the third applies Benford Realness statistics at noise floor levels, and they all use noise shaping to refine that behavior and get a specific tonal result. Not one of these have been quite available before, even from previous versions of Dither Me Timbers or Not Just Another Dither: it’s the latest finetunings of the algorithms. None of them can produce signal outputs beyond -1 to 1 so they can’t produce overs (if you’re ‘mastering’ so hot you get intersample overs, firstly that’s not a great idea and secondly StudioTan can’t help you there). All three come with 24 and 16 bit options right there in the plugin, as experimenter time is over and this is the final form, requiring no more fussing with plugins.

The effect of each is more pronounced at 16 bit, and that’ll give you a sense of what is being subliminally imparted at the far subtler 24 bit level.

StudioTan is like the posh, glossy, high class output. It sounds kind of like expensive studios and tape, brings up micro-detail but suppresses harshness. It’s slick and makes things sound more flawless and possibly more boring, but satisfying.

Dither Me Timbers is like the spatially enhanced, electrically charged output. It makes sonic events spark out of a darker, spacious background, and gives a little energy to transients and attacks. It makes things sound more human and attitude-laden, so it’s more dramatic and attention-getting. It’s got different noise shaping behavior and voicing but in basic character it’s the opposite of StudioTan, and can be approached from that direction.

Not Just Another Dither is like the holographic, hi-fi output. It’s a bit darker than previous Not Just Another Dithers and its purpose is to have detail go down to a digital noise floor that’s a balance of all types of artifact (since you’re always going to have a noise floor of something, no matter what you do) without changing character in any way. Since this perceived character is so balanced (this time, not even airy hiss as a ‘identifiable’ floor change) the new Not Just Another Dither is the best choice to seem like infinite resolution without even a noise floor being there. Instead of making ‘a sound’ like the previous two, it’s the one that sounds completely open and unaffected.

None of these give sensible results with test tones: you can’t take a sine and enhance high frequency details, so you get purely garbage data. Don’t use Airwindows non-dither dithers for scientific processing or your rocket ships will blow up on the launch pad ;) these are literally tone controls in two cases and an obscure data handling technique for the third, and they are re-voiced for 2019 to best deliver their sonic mojo. You can do test tone stuff to satisfy yourself they aren’t placebo effect: they really do the noise-floor-EQing or Benford Realness stuff, and the source code is open. But for evaluating how they really work, the proof is in the listening.

What they do cannot be done any other way, and they’re the final artistic polish on sonic creations done in or outside the DAW. Use them on mixes, or when mastering raw analog captures to lower word lengths for CD. They are ‘final dither’ in function if not strict definition, the way to crystallize high-res audio data into an output file that retains all the magic you intended, whatever flavor of magic that’s meant to be. The three categories of tone color ought to cover your bases there.

I know this is all I’ll be using from now on :)

I live off Patreon and look forward to growing in 2019: the more I earn through this hard, continuous work, the more I’m able to do. Increasingly I’m fascinated with audio hardware as well as software and if I can afford to (after all, I’m still living frugally on less than minimum wage) I’ll build physical gear for people to have, most likely using Eurorack format as a platform. That probably won’t be software-based but I know software folks such as Sean from Valhalla who’ve brought their software into the Eurorack format, so it’s not impossible. So if you like me doing this for a living, support the Patreon, not so much because it’s Patreon (if you paid me with PayPal, would you be supporting PayPal?) but because it’s me, and because Patreon is unusually good at letting me concentrate on my work rather than chasing individual ‘hit products’. That might end up with me having huge hit products (I think StudioTan may well be one of those!) but it needs to be idea-first, never sales-first. And you can’t fake that :)

TapeFat

TL;DW: TapeFat is the tone control from TapeDelay.

TapeFat

We’ll start off 2019 with something kind of fun :)

TapeFat is just the tone control from TapeDelay. It works like an averaging filter that you can use to either roll off highs (or eventually mids), or subtract the effect to create a highpass and take out the lows.

The reason this is interesting is, that tone control is completely bizarre. It’s an averaging filter, but on a pile of delay taps arranged according to prime numbers. Works more like an ambience control, but more densely packed. If you put an impulse through it you don’t get a smoothed-out lowpass so much as a bizarre micro-reverb. Since it’s using primes, it doesn’t reinforce any particular frequency. Since it’s an ambience, it doesn’t have any pre-echoes like linear phase EQs, and the artifacts it produces become a tone of their own (either in-phase, or inverted).

You can hear it on the video, which has a number of things updated, not least this: the new audio is directly captured analog sorta-house music out of my livestreams. This way you ought to be able to really hear the way my plugins retain analog qualities, because now the demo music is essentially AAD: not products of other DAW mixes or digital synthesis, but source material. You can also download those tracks at full 24/96 off SoundCloud. (I use an old Audacity to SRC them to 44.1K for plugin-video making purposes)

Patreon is how I do all this, and I appreciate people using it. I like it better than Kagi, which I used to use to get paid. If you can, please jump on the Patreon at a level equal to buying one this year (for $50 perpetual license, with no DRM, full support as long as I’m alive, you get the source code and the right to make derivative plugins: you know, NORMAL plugin licensing terms :lol: ) and after a year you’ll have paid $50 of which I get nearly all. Then, next year, we’ll look back and see if I made another plugin that you would have bought :) (and if there’s more than one, so much the better: I provide tiers up to five plugins a year and worked out the math up to seven)

See ya Monday at 11:00 AM EST for the Q&A livestream, and Tuesday 11:00 AM EST for the music jam!

Crystal

TL;DW: Crystal is a tone shaper and buss soft-clipper.

Crystal

We’ll step away from strange inventions this week, to plain old ‘phat buss mojo’ tone shapers.

Crystal’s the first of the Character reissues, by request: I know there’s the possibility for this to become people’s favorite plugin, because it already is one user’s favorite buss plugin and he begged me to rerelease it with updated code and VST compatibility. This is the result. Tonally it’s exactly the same as the classic ‘magic’ Audio Unit, but it’s got the denormalization and noise shaping to the floating point buss of 2018 and beyond.

The controls you’ll be interested in are Hardness and Personality. Hardness applies the same algorithm that was in ‘New Channel’: though it’s not a replacement for what made Channel special, it’s got its own uses. It lets you define the onset of clipping, whether soft-clip saturation or digital hard clipping. Though this dirties up the sound a little, it lets you dial the ‘fatness’ of the saturation effect and gives you a tonal parameter that no other Airwindows plugin gives you. Think of it as a slider for how much the roaring, overdriven midrange sticks out.

Personality is a precursor to what became BussColors (and there are other flavors to come) but in Crystal it’s a little different. The BussColors algorithms are taken from hardware convolution impulses, and there’s a time-constant making the interpolation between ‘loud’ and ‘soft’ impulses happen over several samples. In the Character plugins, this didn’t happen. It was sample-by-sample, so on the one hand there was no dynamic behavior, just each sample got a fixed convolution behavior.

On the other hand (and it took me a while to properly understand this) every convolution sample got its own, separate dynamic behavior. The curve was different for each one, so it became a more tightly controlled little kernel rather than a set of possible kernels. There are still people who swear these were the great ones, and I’ve learned to pay closer attention to such things.

And the thing is, Crystal’s not using a hardware sample. Unlike anything in BussColors, Crystal’s using a data set that comes from doing a brickwall filter: if I remember correctly, two different ones at different Q/steepness, and then generating the dynamic behavior out of that. So it’s doing a treble-restricting EQ behavior (a FIR filter), but then it manipulates that. The question is, do you like what it does? Some people really, really liked this one. Not everything about it is in line with how I usually do things. That’s why it’s different. Maybe it’s right up your alley? Let your ears guide you, and have fun checking it out.

All this is supported by my Patreon and the better that does, the more freedom I have to do interesting things. Right now, that means a couple of weekly livestreams on my YouTube channel on top of my plugin posting: Mondays at 11:00 AM EST I answer questions about my plugins and audio, a tech support stream that’s been running a couple hours long (I will go longer if I need to). Tuesdays also at 11:00 AM EST I’ll do a music-making stream for a couple hours, and then upload it to my Soundcloud at 24/96 FLAC, if I haven’t forgotten to hit record like last week :)

Newer Posts
Older Posts

Airwindows

handsewn bespoke digital audio

Kinds Of Things

The Last Year

Patreon Promo Club

altruistmusic.com

Dave Robertson and the Kiss List

Decibelia Nix

Gamma1734

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.