Maybe... I considered Control as well, but to me, both
of those sound
more like single instances of something (just like Ports), rather
than the Class/Type style (ie "Voice Pitch Controls") term I'm
looking for.
*Some* plugin API or something somewhere must have
something similar
to this, I'd think, but I can't remember seeing one...
My plugin API has parameters , pins ( similar to ports ) and 'voices'.
The relationship is that parameters map to pins, and controllers map to
pins.
For example:
pin 0 - "Master Volume" (parameter, monophonic).
Pin 1 - "Note Pitch" (controller, polyphonic, mapped to MIDI
Note-On/Pitch).
Pin 3 - "Tempo" (monophonic, mapped to host tempo).
The host decodes MIDI and maps controllers to pins. The plugin API need not
support MIDI at all (yay!), you could migrate to using OSC messages just as
easily with no change to your plugin code.
The end result is that the plugin API is *very* minimal, 3 functions support
most of the GMPI requirements...
class IMpPlugin : public IMpUnknown
{
public:
// Processing about to start. Allocate resources here.
virtual int32_t MP_STDCALL open() = 0;
// Notify plugin of audio buffer address, one pin at a time. Address
may change between process() calls.
virtual int32_t MP_STDCALL setBuffer( int32_t pinId, float* buffer )
= 0;
// Process a time slice. No Return code, must always succeed.
virtual void MP_STDCALL process( int32_t count, MpEvent* events ) =
0;
};
Jeff