Tuesday 26 June 2012

VST to AudioUnit Preset Converter

KVR user aMUSEd recently tipped me off about a Python script which converts presets from .aupreset format to .fxp. Putting discussion about why we shouldn't be using host or plug-in architecture proprietary formats aside, it's a useful little tool for automating a mass preset conversion.

I've derived a mirror script which reverses this process, converting .fxp presets into equivalent .aupreset files: useful for Logic users migrating from a VST-only to an Audio Unit environment. Converting from one opaque format to another was never going to be easy, but it certainly seems to work for the (select few) plug-ins I've tested it with. Provided that the plug-in saves to an opaque chunk, and that the internal format is identical for both Audio Unit and VST plug-in chunks, conversion should work.

There are a few bits of information, absent from fxp format presets, that is required by au presets. The first three of these, the so called 'type', 'subtype', and 'manufacturer', can be found by running (from the command-line)
auval -a
and then copying the three, four character codes for the destination plugin. Our own Aspect, for example, uses:
aumu Lmaa Loom  -  Loomer: Aspect
aumu Lmaa Loom are the type, subtype, and manufacturer, respectively.

The final piece of information is the state key. This is completely defined by the developer, and there is no simple way to programatically find this. All is not lost, however: just save an aupreset using the plug-in, open it (in TextEdit, for example), and locate the key. Note that it is NOT the <key>data</key> line, but is usually found after that. Again, in Aspect's case, we have <key>jucePluginState</key>

So, in the case of Transverb, assuming that your presets are stored in .fxp format and in a folder called "~/transverb_presets", from the directory you've unzipped the app you'll need to run from a Terminal:

./fxp2aupreset.app/Contents/MacOS/fxp2aupreset ~/transverb_presets aumf DFtv DFX! destroyfx-data

or for those using the python script:
python ./fxp2aupreset.py ~/transverb_presets aumf DFtv DFX! destroyfx-data.

If all goes according to plan, this will create an aupreset for each fxp file it finds. Copy the aupresets into ~/Library/Audio/Presets/... in order for Logic/AU Lab or whatever to find them. Make sure you've already saved at least one preset with the plug-in to ensure that the .aupreset folder have been created beforehand.

The python script can be found here (you'll need the construct library installed for this). For those who'd rather not dabble with Python dependencies, you can find a command-line App bundled for Mac OS X here.

Thanks to yairadix from the rawmaterialsoftware forum for the original script, and for doing all the heavy lifting in defining the fxp construct structure. 

1 comment:

  1. Yes, please, just a simple README would be great. I can't seem to get it to work.