airfx package

Isabel Kaspriskie's icon

Hello forums! I've just finished up an initial release of a side project I've been working on for a few months -- a package of 150+ audio effect externals all ported directly from the open source airwindows VSTs. There are compressors, delays, reverbs, bitcrushers, filters... All sorts of good stuff. Big thanks to Chris Johnson for making Airwindows open source!

Here is airfx v1.0.0 (you can find the downloads on the release page). https://github.com/isabelgk/airfx/releases/tag/v1.0.0

You may ask: why not just use the vst~ object? Well, the real answer is that I wanted an excuse to see if I could automate generating min-based externals! The Airwindows plugins' source code is pretty standardized and easy to parse as text, so I decided to give it a go. But also it's nice to know that you can bundle up the external in, for example, a M4L device and not require the user to have the plugin installed.

Anyway. Hope you enjoy! If you run into anything that seems broken, feel free to leave a GitHub issue. :)

Iain Duncan's icon

This is awesome Isabel! These will be hugely helpful as min examples. I will definitely be playing with this, and will also share it with my professor friends at UVic for potential course materials!

👽'tW∆s ∆lienz👽's icon

Thank You!
✨🥇++🥇++🥇✨

MAX.XAM's icon

Thanks! :)

davidestevens's icon

I'm probably being dim here, but I downloaded the zip and put the airfx folder in my Packages folder, but when I launch any of the help files , the ar. objects all get the message "no such object". What am I missing? Ta.

Isabel Kaspriskie's icon

Are the .mxo and .mxe64 files in the externals folder?

Also, are you on Windows? (If so, there could have been an issue with the GitHub actions build and I can recompile and test again soon when I’m near my Windows machine again.)

davidestevens's icon

Hi Isabel,

I’m on Mac, and there isn’t an externals folder at all! Have I downloaded the wrong thing? (“Download ZIP” in the Code drop-down. (I’ve never really gotten my head around GitHub)

Roman Thilenius's icon

yup. the /source folder is emtpy, too (unzipped under win here)

Isabel Kaspriskie's icon

Ah, to clarify you should download from the releases page here: https://github.com/isabelgk/airfx/releases/tag/v1.0.0 (the first item, not the source code)

Will update the original post...

Greg Ross's icon

Thanks so much for these:)

davidestevens's icon

Thanks for that Isabel.

yaniki's icon

Wow! This is great! Thank you very much,

davidestevens's icon

Lots of useful objects… but loading any of the ones I tried (in the help files) bumped processor load up to around 35%. That seems a bit hungry for a single object to me!

Isabel Kaspriskie's icon

Some of the reverb algorithms might be higher performance hits, but I wouldn't expect that for a lot of the lighter weight ones.

For example, ar.pocketverbs~ is around 10-15% load on my machine whereas ar.adt~ is around 2% load.

davidestevens's icon

I _was a bit surprised when I saw that. So I’ll check them again tomorrow. This will be on an M1 and max 8.2 without Rosetta.

davidestevens's icon

Hmm. I tried several of the objects, and with Max8.2/Rosetta they were using from 15-30% cpu, but with Rosetta off, the load was 0-1% . Pocketverbs used a steady 5%. Would you would expect that much difference with/without Rosetta?

Exit Only's icon

Thanks for making these! I'm noticing an issue where the external's attributes reset when the dsp chain resets. i.e. if I make a new msp object somewhere, the attributes will reset to the their default value. I can get around this by setting them in a numbox and resending them each time.

Isabel Kaspriskie's icon

Would you would expect that much difference with/without Rosetta?

I am not too surprised to hear there's a pretty different level with/without Rosetta. It's hard to say, unfortunately.

if I make a new msp object somewhere, the attributes will reset to the their default value.

Thanks for this catch! I know why it's happening, but it may take a little while to fix all the objects. ;)

Exit Only's icon

no rush! I appreciate the effort that went into this. thanks again

Isabel Kaspriskie's icon

I've just released v1.0.1 which should hopefully fix the issue mentioned above!

You can grab it at https://github.com/isabelgk/airfx/releases/tag/v1.0.1 by downloading the airfx-*-release.zip and unzipping it into your ~/Documents/Max 8/Packages directory.

Exit Only's icon

awesome. thanks!

distantnoise's icon

Thank you for the airfx Max package! It's great. Yet I miss some of airwindows newer stuff. Any chance for an update?

Isabel Kaspriskie's icon

I do plan to update with more of the newer effects in the nearish future. :)

distantnoise's icon

Fantastic! Thank you.

Baek Santarek's icon

Hi Isabel,

first of all thank you for your work!

Do these objects have similar performance for similar operations as native MSP/gen~ objects?

I am trying to understand the tradeoffs when it comes to packages and externals in general. I am a bit paranoid about dependencies for performance reasons.

Sorry if this is a non-sense newbie question!

Isabel Kaspriskie's icon

Hi Baek,

I would say that yes the objects "have similar performance for similar operations as native MSP/gen~ objects". It's hard to say what's exactly equivalent to native MSP/gen~ in this package -- which is the hard part of answering such a question -- but there's no extra overhead of using a third-party external vs a built-in object or a gen~ patch.

The tradeoffs of packages (in my view) are more that you have to make sure anyone running your patch also has the same externals available on their system. For example, if you made a patch using an object from the airfx package and gave it to someone, they'd have to make sure they also have the package (and ideally the same version, in case there are breaking changes). The benefit of packages and externally-compiled objects is that you get the entire world of C/C++ code available, basically, so there are a lot of possibilities not necessarily available from MSP/gen~ (even though there is quite a lot!)