Tracktion F.'em unified using AutoHotKey
Tracktion's powerful F.'em synth is available from AudioDeluxe for just US$29 until August 13 (2022), so I got it, and decided to make a first pass at unifying it using AutoHotKey.
This is the simplest kind of unified library, containing one Unify patch per F.'em factory patch, with nothing else added (macro definitions, AUX effects layers, etc.). Consider it an example of how we typically start a new unified library. If anyone wants to figure out a nice "fleshed-out" unify patch template, please post the .unify file here (preferably with the F.'em instance on INST1 replaced by Sine Wave Synth, to reduce the file size) and I can make a revised version of the library with your changes applied to all patches.
John and I chose not to make this an "official" unified library for two reasons:
- F.'em saves a huge amount of data in its state, and as a result, every single unified patch (.unify file) is over 1.9 MB, making the whole Patches folder (566 patch files) just over 1 GB in size.
- The factory presets don't do a great job of showing off what this very powerful (11 operator!) FM synth can do, and as a result, may not be worth the >1 GB of disk space.
However, it does make a nice teaching example for AHK and library-unification in general, so I decided to post it here.
F.'em has quite a nice preset browser, where you can click on an item in the Category column to select only presets in that category, double-click the first one to load it, and then click the next/prev buttons to scroll through them. I did this when using my AHK script, to unify one category at a time, as follows:
- Select one Category item, making sure to first de-select any others, so you get only presets in that category.
- Decide on a suitable prefix for the unified patch names (e.g. "STR - " for strings), and put that into the script at line 31.
- Manually load the first preset in the category, and then save it manually in Unify, adding the chosen prefix at the beginning of the patch name, and setting other metadata items like Category, Tags, etc. for that category.
- Run the script to automatically select and save the remaining presets in the list, and press ESC to stop as soon as the last one has been saved.
- Repeat for the next category.
Some categories contain only one or a few presets, so I did these manually. The F.'em factory preset collection contains a few extra categories which I consider redundant, e.g. "voice" and "voices"; I saved both with prefix "VOX - ". (This is one case where you might want to select both in F.'em's Category list, to get a single list with both sets of presets.)
F.'em takes a few seconds to load (especially the first time), and benefits substantially from instance re-use in Unify. Locate the ReuseAcceptRules.xml file (see the linked manual page for where to find it), open it in a plain-text editor (e.g. Notepad on Windows, TextEdit on Mac), and add a line near the bottom as shown below (this is my current ReuseAcceptRules.xml file):
<?xml version="1.0" encoding="UTF-8"?> <PluginRules> <PluginRule vendor="Spectrasonics"/> <PluginRule vendor="Native Instruments%" name="Massive"/> <PluginRule vendor="Native Instruments%" name="Reaktor"/> <PluginRule vendor="Rhizomatic" name="Plasmonic"/> <PluginRule vendor="Decidedly" descName="DecentSampler"/> <PluginRule vendor="Arturia" descName="Pigments"/> <PluginRule vendor="KORG" descName="wavestate%"/> <PluginRule vendor="Cherry Audio"/> <PluginRule vendor="Hexachords" name="Orb Synth"/> <PluginRule vendor="Tracktion" name="F-em%"/> </PluginRules>
The % sign at the end of the name is important, because the actual plug-in name may have something like "(x64)" tacked onto it, depending on your operating system. The % is a wild-card character which will match anything.
NOTE: While working on this, I discovered a bug in Unify's instance reuse code, which means that the above will only work on Windows at the moment, but Mac users can go ahead and add the line to your ReuseAcceptRules.xml file anyway, because I'll include a fix for this in the next release of Unify (including the next release of the current v1.8.x public beta).
F.'em isn't the only plug-in that stores such a large blob of state-data, and of course, all this is basically redundant for a unified library, because it's just a reformatted copy of the actual factory preset.
I hope to start a conversation about this with the developers at Tracktion, and others, to see if we can't devise a semi-standard state-blob format that simply tells the plug-in to simply load one of its own presets, verbatim with no changes. Something like a sequence of character strings, ending in the preset-name, and optionally including a library-name, and possibly other items to identify the target preset in whatever hierarchy system the plug-in may use.
If you agree this would be a good and desirable thing, please chip in with a comment below, to help this conversation gain some "trac(k)tion" 😜