Working on the API of my plugin set, after a few days of focusing on other projects. The new I/O system is done. This is the list of formats and flags that can be used when setting the processing mode:
/* values for setting the processing mode. (fP_*_IO == fP_*_IN|fP_*_OUT)
any two formats can be combined, with any combination of mode flags */
enum {
/* - processing I/O formats - */
/* single-precision float data */
fP_FLOAT_IN = 0x01,
fP_FLOAT_OUT = 0x10,
fP_FLOAT_IO = 0x11,
/* double-precision float data */
fP_DOUBLE_IN = 0x02,
fP_DOUBLE_OUT = 0x20,
fP_DOUBLE_IO = 0x22,
/* 8-bit integer data */
fP_INT8_IN = 0x03,
fP_INT8_OUT = 0x30,
fP_INT8_IO = 0x33,
/* 16-bit integer data */
fP_INT16_IN = 0x04,
fP_INT16_OUT = 0x40,
fP_INT16_IO = 0x44,
/* 24-bit integer data */
fP_INT24_IN = 0x05,
fP_INT24_OUT = 0x50,
fP_INT24_IO = 0x55,
/* 32-bit integer data */
fP_INT32_IN = 0x06,
fP_INT32_OUT = 0x60,
fP_INT32_IO = 0x66,
/* - processing flags - */
/* I/O is mono data to be used for both channels */
fP_MONO_MODE = 1<<8,
/* add processed data to output rather than, as default, replace it */
fP_ACC_MODE = 1<<9,
/* clip output to 0dB; use to prevent wrapping for integer formats */
fP_CLIP_MODE = 1<<10,
/* input is read and/or output is written in interleaved form */
fP_INTERL_IN = 1<<11,
fP_INTERL_OUT = 1<<12,
fP_INTERL_IO = fP_INTERL_IN|fP_INTERL_OUT
};
Now I am going to make a simple API for manipulating the GUI of a plugin instance without having to link to and use the FLPTK library and screw around with the GUI class instance. Then the API-specification will be complete, and I can begin to work on a simple test host making use of the native fREaKy Plugin Set format. I am making my own, you see, which my plugins will support together with the VST and Winamp 2 DSP format. Not that I think any programs apart from my own will support it, but it's a fun experiment. And it will allow me to indirectly support other plugin formats as well, by making a wrapper plugin for my plugins for them. foobar2000 comes to mind. And perhaps, sometime in the probably not-so-near future, LADSPA. (as I cannot implement support for it directly, due to the licensing)