Airwindows CONSOLE8: Mac/Windows/Linux/Pi AU/VST

VST, AU, AAX, CLAP, etc. Plugin Virtual Effects Discussion
RELATED
PRODUCTS

Post

But if you use a real mastering engineer and send 'em 24 bit files it does exactly that, just the way you suggest :) I never, ever said that you should put a mastering chain in between BussIn and BussOut, did I? I don't think you should. I wasn't, anytime I demonstrated it. :D

Post

Probably not but this:
Don't use any added processing between BussOut and the file or converter
plus the fact that it reduces the bit depth to 24 Bit and adds dithering made me believe that it is supposed to be the final plugin including the mastering chain. I mean, why add dither and reduce the bith depth to 24 Bit when the mastering chain is supposed to be added afterwards ? Sure the effect will be extremely subtle if audible at all but the concept is just wrong to me.

Post

Mastering is for another person to do, very possibly from a 24 bit file :D

From my POV, the idea of always putting in limiting and stuff and little tweaks and corrections when you're operating from the same situation, same monitoring, same ears is what I am choosing to not go along with. Some folks will consider it very important to not send any limiting, compressing or clipping to their mastering engineer. I wouldn't go nearly that far, some of that stuff legitimately belongs to the mixer, but there's a stage where it's far more important that it be another (qualified) set of ears.

One of the most important things mastering can do is decide when NOTHING needs to be done.

If it's loudenating you're looking to from mastering (some genres do thrive on this), it's commonly punished by streaming services which will be turning you down anyway, and native Console8 will help you get into a zone that naturally sits well in playback on streaming services (NOT entirely through slamming the Console8BussOut, either: I think almost nobody will ever need to turn that up any significant amount beyond 0.5)

You can not trust me, even when I say trust me, and it's okay. You just don't get to unmake all of my decisions around how this stuff works. It's not by accident and I don't mind if there are people for whom it seems wrong. Trust me. Ditch the mastering chain ;)

Post

jinxtigr wrote: Sun Jun 26, 2022 7:41 pm All better now?
I know its a wee bit late, but it seems fine here, fwiw; no longer downloading the .gz file, it all looks much as it was, I think.
An idiot on Set Theory:
"In some cases there is an object called red that contains everything that is red. In much the same way a pot is a plate."

Post

Hey Chris, what do you think about my idea to build a virtual summing mixer (think 5059 satellite, Dangerous Music 2Bus) ? This would keep the Airwindows console setup pretty simple, too, when complex routings are involved.

How could it look like ? First of all you would mix like you normally do. Channels, sub groups, sends, various routings, splits, whatever. No console plugins there. All channels and sub groups you would normally send to the 2bus would be send to the virtual summing mixer.

The virtual summing mixer would look like this: 24 (or more / whatever) groups just for the "summing". For example: 16 groups with nothing in it except console8 channel ins and console8 channel outs. Those 16 groups then get send to other groups with just console8 sub ins and console 8 sub outs. Which then go out to the 2bus with console8 bus in and console 8 bus out.

Post

Wrong Eq wrote: Tue Jun 28, 2022 2:18 pm Hey Chris, what do you think about my idea to build a virtual summing mixer (think 5059 satellite, Dangerous Music 2Bus) ? This would keep the Airwindows console setup pretty simple, too, when complex routings are involved.

How could it look like ? First of all you would mix like you normally do. Channels, sub groups, sends, various routings, splits, whatever. No console plugins there. All channels and sub groups you would normally send to the 2bus would be send to the virtual summing mixer.

The virtual summing mixer would look like this: 24 (or more / whatever) groups just for the "summing". For example: 16 groups with nothing in it except console8 channel ins and console8 channel outs. Those 16 groups then get send to other groups with just console8 sub ins and console 8 sub outs. Which then go out to the 2bus with console8 bus in and console 8 bus out.
A great tool to use for this is console8 inside Mulab. The app or use the Vst plugin in the daw of your choice. You can basically build what you describe.
We jumped the fence because it was a fence not be cause the grass was greener.
https://scrubbingmonkeys.bandcamp.com/
https://sites.google.com/view/scrubbing-monkeys

Post

Sounds do-able. Isn't that just routing? You absolutely can do that if you like :)

Post

jinxtigr wrote: Tue Jun 28, 2022 4:44 pm Sounds do-able. Isn't that just routing? You absolutely can do that if you like :)
Yes, no 3rd party-plugins needed !

Post

Dip200 wrote: Mon Jun 27, 2022 9:56 pm Probably not but this:
Don't use any added processing between BussOut and the file or converter
plus the fact that it reduces the bit depth to 24 Bit and adds dithering made me believe that it is supposed to be the final plugin including the mastering chain. I mean, why add dither and reduce the bith depth to 24 Bit when the mastering chain is supposed to be added afterwards ? Sure the effect will be extremely subtle if audible at all but the concept is just wrong to me.
As requested/suggested, if you re-download Console8 you'll find that the dithering is now left off the final plugin. Monitoring3 is out and has what was in Console8 (everything else is the same across Monitorings, 1 is NJAD, 2 is Dark, three is the Ten Nines/Dark hybrid from Console8)

:D

You can drop the new version into your plugins folders and existing mixes and nothing else will change: given that it's a 24th bit change (or for folks on double precision buss, now its passing through the full 64 bit buss untouched) I'm comfortable with doing an update in place.

Post

Hi Chris,

I've just read the code to Console8 and noticed what I believe is a mistake.
You have claimed in an earlier post on this thread that the 6 ultrasonic filters of each Console8 plugin, once cascaded, form a Butterworth Lopass.

The Q values are
ChannelOut: 3.51333709
SubOut: 1.20361562
ChannelIn: .76352112
SubIn: .59435114
BussOut: .52110856

So far, these are the coefficients to an 11th order Butterworth Lopass filter; and the remaining stage should be a one-pole filter (exponential moving average) — but instead it (BussIn) is a biquad with a Q of .5.

So I've put all 6 plugins in series inside a Bertom EQ Curve Analyzer sandwich (in Reaper) and the response is indeed not a Butterworth one (cutoff at 6.1 instead of 3.01).
This results in a treble softening effect, and I've noticed that you like those, so maybe it's on purpose — if so, never mind me!

If not however, here are the Q values to 6 biquads cascaded into a 12th order Butterworth filter:
.504314480290076
.5411961001461972
.6302362070051318
.8213398158522921
1.306562964876376
3.830648787770188

(Read them bottom to top to preserve the equivalence with my previous enumeration).


Best regards,

Antoine.
Working-class filter design (GitHub)
Monetize THIS (Bandcamp)
"Man vergilt einem Lehrer schlecht, wenn man immer nur der Schüler bleibt." — Friedrich Nietzsche (Ecce homo)

Post

antoineportes wrote: Mon Feb 20, 2023 7:38 am If not however, here are the Q values to 6 biquads cascaded into a 12th order Butterworth filter:
.504314480290076
.5411961001461972
.6302362070051318
.8213398158522921
1.306562964876376
3.830648787770188

(Read them bottom to top to preserve the equivalence with my previous enumeration).

Best regards,

Antoine.
I have no reason to doubt you, and thank you for the attentiveness :) with your permission, I'll save your figures as a note for if I revisit any two-stage six-plugin (or indeed six filter stage) system? I am only referring to other notes anyhow, which apparently aren't as accurate as I'd thought they were.

Are you working this out with your own math, or have you found a better source for me as far as looking up filter coefficients? It's also possible that I got mixed up and had looked up coefficients for Bessel or something :D

Post

I use your plugins every day... of course you have my permission!

I've sent an email to chrisj [at] airwidnows [dot] com.

EDIT: ... and just received an "Undelivered Mail Returned to Sender" report.

So here's the mail:

"
Hello again,

In the txt file attached to this mail, you'll find the sources upon which I based my calculations and the Q values to Butterworth cascaded biquads up to a 20th order filter (for both odd and even orders).
This is part of the documentation to my yet unreleased JSFX collection (you're mentioned at some point). I wrote it myself, there is no risk of copyright infringement, and please feel free to use it!

Antoine.
"

And here's the attachment txt file:

"
//sources: https://www.earlevel.com/main/2016/09/2 ... g-filters/
// https://www.numberempire.com/expressioncalculator.php

N=2, 1 biquad
1. Q = 1/(2*cos($pi/4)) = 0.7071067811865468

N=3, 1 single-pole & 1 biquad
0. E.M.A.
1. Q = 1/(2*cos($pi/3)) = 1

N=4, 2 biquads
1. Q = 1/(2*cos($pi/8)) = 0.5411961001461972
2. Q = 1/(2*cos(3*$pi/8)) = 1.306562964876376

N=5, 1 single-pole & 2 biquads
0. E.M.A.
1. Q = 1/(2*cos($pi/5)) = 0.6180339887498941 ~= $phi-1
2. Q = 1/(2*cos(2*$pi/5)) = 1.618033988749897 ~= $phi

N=6, 3 biquads
1. Q = 1/(2*cos($pi/12)) = 0.5176380902050423
2. Q = 1/(2*cos($pi/4)) = 0.7071067811865468
3. Q = 1/(2*cos(5*$pi/12)) = 1.931851652578134

N=7, 1 single-pole & 3 biquads
0. E.M.A.
1. Q = 1/(2*cos($pi/7)) = 0.554958132087372
2. Q = 1/(2*cos(2*$pi/7)) = 0.8019377358048384
3. Q = 1/(2*cos(3*$pi/7)) = 2.246979603717467

N=8, 4 biquads
1. Q = 1/(2*cos($pi/16)) = 0.5097955791041596
2. Q = 1/(2*cos(3*$pi/16)) = 0.6013448869350453
3. Q = 1/(2*cos(5*$pi/16)) = 0.8999762231364165
4. Q = 1/(2*cos(7*$pi/16)) = 2.562915447741506

N=9, 1 single-pole & 4 biquads
0. E.M.A.
1. Q = 1/(2*cos($pi/9)) = 0.5320888862379565
2. Q = 1/(2*cos(2*$pi/9)) = 0.6527036446661392
3. Q = 1/(2*cos(3*$pi/9)) = 1
4. Q = 1/(2*cos(4*$pi/9)) = 2.879385241571816

N=10, 5 biquads
1. Q = 1/(2*cos($pi/20)) = 0.5062325628940023
2. Q = 1/(2*cos(3*$pi/20)) = 0.5611631188171797
3. Q = 1/(2*cos($pi/4)) = 0.7071067811865468
4. Q = 1/(2*cos(7*$pi/20)) = 1.101344632292633
5. Q = 1/(2*cos(9*$pi/20)) = 3.196226610749832

N=11, 1 single-pole & 5 biquads
0. E.M.A.
1. Q = 1/(2*cos($pi/11)) = 0.5211085581132033
2. Q = 1/(2*cos(2*$pi/11)) = 0.5943511444371408
3. Q = 1/(2*cos(3*$pi/11)) = 0.7635211184333675
4. Q = 1/(2*cos(4*$pi/11)) = 1.203615623775565
5. Q = 1/(2*cos(5*$pi/11)) = 3.513337091666132

N=12, 6 biquads
1. Q = 1/(2*cos($pi/24)) = 0.504314480290076
2. Q = 1/(2*cos($pi/8)) = 0.5411961001461972
3. Q = 1/(2*cos(5*$pi/24)) = 0.6302362070051318
4. Q = 1/(2*cos(7*$pi/24)) = 0.8213398158522921
5. Q = 1/(2*cos(3*$pi/8)) = 1.306562964876376
6. Q = 1/(2*cos(11*$pi/24)) = 3.830648787770188

N=13, 1 single-pole & 6 biquads
0. E.M.A.
1. Q = 1/(2*cos($pi/13)) = 0.5149639154748634
2. Q = 1/(2*cos(2*$pi/13)) = 0.564680780879147
3. Q = 1/(2*cos(3*$pi/13)) = 0.6679930798878865
4. Q = 1/(2*cos(4*$pi/13)) = 0.8801813576307551
5. Q = 1/(2*cos(5*$pi/13)) = 1.41002004842653
6. Q = 1/(2*cos(6*$pi/13)) = 4.14811490527938

N=14, 7 biquads
1. Q = 1/(2*cos($pi/28)) = 0.5031637882900888
2. Q = 1/(2*cos(3*$pi/28)) = 0.5297264862561447
3. Q = 1/(2*cos(5*$pi/28)) = 0.5905110547870328
4. Q = 1/(2*cos($pi/4)) = 0.7071067811865468
5. Q = 1/(2*cos(9*$pi/28)) = 0.9397929599938086
6. Q = 1/(2*cos(11*$pi/28)) = 1.513871321542847
7. Q = 1/(2*cos(13*$pi/28)) = 4.465702135190253
// Seems like I've accidently found the recipe for Airwindows Hypersonic!
// check: https://github.com/airwindows/airwindow ... icProc.cpp
// lines 22 to 28 should look familiar.

N=15, 1 single-pole & 7 biquads
0. E.M.A.
1. Q = 1/(2*cos($pi/15)) = 0.5111702974325153
2. Q = 1/(2*cos(2*$pi/15)) = 0.5473181392530235
3. Q = 1/(2*cos($pi/5)) = 0.6180339887498941 ~= $phi-1
4. Q = 1/(2*cos(4*$pi/15)) = 0.7472382749323057
5. Q = 1/(2*cos($pi/3)) = 1
6. Q = 1/(2*cos(2*$pi/5)) = 1.618033988749897 ~= $phi
7. Q = 1/(2*cos(7*$pi/15)) = 4.783386116752817

N=16, 8 biquads
1. Q = 1/(2*cos($pi/32)) = 0.5024192861881563
2. Q = 1/(2*cos(3*$pi/32)) = 0.522498614939689
3. Q = 1/(2*cos(5*$pi/32)) = 0.5669440348163586
4. Q = 1/(2*cos(7*$pi/32)) = 0.6468217833599913
5. Q = 1/(2*cos(9*$pi/32)) = 0.7881546234512491
6. Q = 1/(2*cos(11*$pi/32)) = 1.060677685990347
7. Q = 1/(2*cos(13*$pi/32)) = 1.722447098238334
8. Q = 1/(2*cos(15*$pi/32)) = 5.101148618689149

N=17, 1 single-pole & 8 biquads
0. E.M.A.
1. Q = 1/(2*cos($pi/17)) = 0.5086609187583941
2. Q = 1/(2*cos(2*$pi/17)) = 0.5362089982233461
3. Q = 1/(2*cos(3*$pi/17)) = 0.5880850655531958
4. Q = 1/(2*cos(4*$pi/17)) = 0.6765818224229968
5. Q = 1/(2*cos(5*$pi/17)) = 0.8296901137380606
6. Q = 1/(2*cos(6*$pi/17)) = 1.121734294391001
7. Q = 1/(2*cos(7*$pi/17)) = 1.827064740717401
8. Q = 1/(2*cos(8*$pi/17)) = 5.418975723729716

N=18, 9 biquads
1. Q = 1/(2*cos($pi/36)) = 0.5019099187716733
2. Q = 1/(2*cos($pi/12)) = 0.5176380902050423
3. Q = 1/(2*cos(5*$pi/36)) = 0.5516889594812459
4. Q = 1/(2*cos(7*$pi/36)) = 0.6103872943807273
5. Q = 1/(2*cos($pi/4)) = 0.7071067811865468
6. Q = 1/(2*cos(11*$pi/36)) = 0.8717233978105502
7. Q = 1/(2*cos(13*$pi/36)) = 1.18310079157625
8. Q = 1/(2*cos(5*$pi/12)) = 1.931851652578134
9. Q = 1/(2*cos(17*$pi/36)) = 5.736856622834924

N=19, 1 single-pole & 9 biquads
0. E.M.A.
1. Q = 1/(2*cos($pi/19)) = 0.5069136413554682
2. Q = 1/(2*cos(2*$pi/19)) = 0.5286433551380074
3. Q = 1/(2*cos(3*$pi/19)) = 0.568521799899184
4. Q = 1/(2*cos(4*$pi/19)) = 0.6336007264187286
5. Q = 1/(2*cos(5*$pi/19)) = 0.7382453929756331
6. Q = 1/(2*cos(6*$pi/19)) = 0.9141634222088053
7. Q = 1/(2*cos(7*$pi/19)) = 1.244724159932757
8. Q = 1/(2*cos(8*$pi/19)) = 2.036780283118011
9. Q = 1/(2*cos(9*$pi/19)) = 6.054782792720508

N=20, 10 biquads
1. Q = 1/(2*cos($pi/40)) = 0.5015460992414137
2. Q = 1/(2*cos(3*$pi/40)) = 0.5142075968326045
3. Q = 1/(2*cos($pi/8)) = 0.5411961001461972
4. Q = 1/(2*cos(7*$pi/40)) = 0.5864138483070047
5. Q = 1/(2*cos(9*$pi/40)) = 0.657543499945393
6. Q = 1/(2*cos(11*$pi/40)) = 0.7698845216111823
7. Q = 1/(2*cos(13*$pi/40)) = 0.956940427715471
8. Q = 1/(2*cos(3*$pi/8)) = 1.306562964876376
9. Q = 1/(2*cos(17*$pi/40)) = 2.14182878486559
9. Q = 1/(2*cos(19*$pi/40)) = 6.372747421591193

//if 120 dB/oct isn't brickwall enough, feel free to continue!


E.M.A. = Exponential Moving Average
//sources: https://tttapa.github.io/Pages/Mathemat ... erage.html
// https://www.earlevel.com/main/2012/12/1 ... le-filter/
// https://en.wikipedia.org/wiki/Low-pass_ ... nse_filter
// 3 distinct formulas, first one is more accurate, last one is more CPU-friendly -- I haven't tried the middle one yet.
// The first one sounds punchier to my hears but that might just be a cognitive bias induced by neat math!
// There is also a good chance that what I hear as punch is in fact low-end instability due to inaccurate approximation.
// What is for certain is that they sound different: null tests don't have cognitive biases.
//
//BONUS TIP: Cascade two equal Butterworth filters of order N, and you get a Linkwitz–Riley filter of order 2N.
"
Working-class filter design (GitHub)
Monetize THIS (Bandcamp)
"Man vergilt einem Lehrer schlecht, wenn man immer nur der Schüler bleibt." — Friedrich Nietzsche (Ecce homo)

Post

This might save some time as well if you (or anyone) plan(s) on experimenting with odd orders, here is a JSFX that compares the three exponential moving average algorithms (in mono):

Code: Select all

desc:0im's filtering: 2 modes 1 pole
desc:exponential moving average filter


slider1:HP=0<0,1,1{Lo-pass,Hi-pass}>Mode
slider2:freqHz=20000<20,20000,.1:log>Cutoff (Hz)
slider3:algo=0<0,2,1{neat,decent,cheap}>Algorithm


@init
    Ts=1/srate;
    nyquist.safe=srate*.49;


@slider
    HP=max(0,min((HP|0),1));
    freqHz=max(20,min(freqHz,nyquist.safe));
    algo=max(0,min((algo|0),2));
    w0=freqHz*2*$pi*Ts;
    
  //ALGORITHM 0 "neat"
    algo==0?(
      //source: https://tttapa.github.io/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/Exponential-Moving-Average.html
        calb0=cos(w0)-2; //thanks Tale!
        b0=sqrt(sqr(calb0)-1)+calb0+1;
        a1=1-b0;
    );
  //ALGORITHM 1 "decent"
    algo==1?(
      //source: https://www.earlevel.com/main/2012/12/15/a-one-pole-filter/
      ////a & b are at each other's place in the original
      a1=exp(-w0);
      b0=1-a1;
    );
  //ALGORITHM 2 "cheap"
    algo==2?(
      //source: https://en.wikipedia.org/wiki/Low-pass_filter#Simple_infinite_impulse_response_filter)
      b0=w0/(w0+1);
      a1=1-b0;
    );

@sample
    yn=b0*spl0+a1*yn;
    !HP?(
        spl0=yn;
    ):(
        spl0-=yn;
    );
    spl1=spl0;
Again, my code, no copyright.
Working-class filter design (GitHub)
Monetize THIS (Bandcamp)
"Man vergilt einem Lehrer schlecht, wenn man immer nur der Schüler bleibt." — Friedrich Nietzsche (Ecce homo)

Post


Post

Sorry for the silly typo and for disappearing, life had me moving to a new place and I just got internet back.

In the meantime rafa1981 provided a link to earlevel — it's the sole source of my math (not really mine from that perspective), the same link was in my comment but might have been censored by auto-admin because of the 5-post rule.

While experimenting with cascaded Butterworth, I've found how Pro Q 3 and Kirchhoff EQ deal with resonance (i.e. steeper peak as order grows but constant level).

I can send you some EEL2 code if you're interested in that (or I could just explain the process, it's actually quite simple).

antoine.portes@yandex.com
Working-class filter design (GitHub)
Monetize THIS (Bandcamp)
"Man vergilt einem Lehrer schlecht, wenn man immer nur der Schüler bleibt." — Friedrich Nietzsche (Ecce homo)

Post Reply

Return to “Effects”