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.

Pafnuty

TL;DW: Chebyshev filter adds harmonics.

Pafnuty

Here’s a nice one! Pafnuty has been much sought after, from back when it only existed as an Audio Unit. Now it’s up to date, in a new more-approachable form, and it’s VST and open source and dithered to the floating-point buss: all the good modern stuff from current Airwindows.

Pafnuty is a Chebyshev filter. What are those? Well, it’s not much like your usual filter: you don’t use this to roll off highs or lows (though under some conditions you might be able to do any of those things). A Chebyshev filter is like a mathematical formula. It works like this: if you feed it a sine wave (at exactly 0dB, or barely-clipping) it can generate entirely new sine waves to add to your sine wave. Which ones? Harmonically related ones. You can have twice, three, four times the frequency, all the way up to thirteenth harmonic.

Pafnuty’s been rearranged in such a way that when you move the sliders to the right, the harmonics add. (The old version used simpler math but gave a slightly weirder arrangement: you’d have to do 1.0 third harmonic, -1.0 fifth, 1.0 seventh and so on for them to add up in phase.) There’s also an attenuverter (which is what you get with a dry-wet control when it also allows for inverse-dry-wet: something out of Eurorack-land, which also existed on the Delta Labs Effectron. Side note about the funky old Effectron: it’s a delta-sigma converter like SACDs but cruder, and I’d been wanting someone to make a DIY-able delay like that. It exists! The Princeton PT2399 chip, which is in lots of current synths and pedals such as the Dreadbox Erebus)

Back to Pafnuty. What do you get when you run music into this sine-multiplying filter? If your audio has no frequencies that, multiplied, go higher than the sampling rate, you get perfect aliasing-free harmonic enhancement. The way the filter works, it absolutely doesn’t generate anything higher than the multipliers it works with. It’s a sort of color-adding harmonic enhancement where you can pick what kind of coloration you add (or subtract, since all the controls go both ways). If the frequencies do go higher than the sampling rate then they do alias, but the way Pafnuty resists adding extra harmonics helps it to resist aliasing and if you don’t add lots of higher harmonics you can go very high in frequency, cleanly.

This might not be the easiest plugin to come to terms with, but it makes a great secret weapon, and produces tones that don’t exist in more normal tone shapers! I hope you like it.

I also hope you don’t literally keep this stuff a secret: my work is supported by Patreon and that’s why I’m still around to make plugins like this (and update hundreds of plugins when the need arises, but that was LAST week). You can’t run around proclaiming the hype of Airwindows Apotheosis as that only backfires, but much like you can share riffs and patches and exchange ideas with people, it’s still possible to get the word out. You gotta do as I do and not lead with hitting people up for money: maybe they don’t have any, and need your and my help. But there are still people who would be able to buy plugins, and anyone who would have bought Pafnuty at $50 could jump on the Patreon for that much a year, either now or later when they’re convinced and are using it in their mixes as a key tone-shaping element.

It also encourages letting people have plugins that don’t phone home, turn themselves off, explode or send all your data to a secret laboratory. Airwindows stuff is open source and has no code of any kind to mess with you: it’s so simple you could learn how to code for audio by looking at it, and on some Mondays we do just that on my livestream. Come and see!

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!

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.