>       struct XAP_bay_descriptor
>       {
>               const char              *name;
>               XAP_channel_type        channel_type;
>               int                     min_channels;
>               int                     max_channels;
>               /*
>                * Maybe some other stuff
>                */
>       };
> 
> If you like, you may have several Bays with Audio Input Channels, for 
> example. These would be totally independent WRT min/max channel 
> counts, audio format or whatever properties Audio Channels may have.

So let me see if I get the the containership correct:

a Plugin has n Bays
a Bay has m Channels
a Channel has p Controls and q Ports

I know at some point you started thinking of event ports as separate
channels.  I am almost convinced that different channel kinds are needed,
but Bays has thrown me.  This is what I was thinking about as I slept (weird
dreams...)

Plugin {
        /* everything has master controls */
        n_master_controls;
        master_controls[];
        n_master_eventports;
        master_eventports[];

        /* many plugins will have 1 template, but they can have more.
         * multi-timbral instruments (synth part, drum part, ...) and mixer
         * slots (mono, stereo, ...) come to mind
         */
        n_channel_templates;
        channel_templates;

        /* mixers might start with 0, synths might start with any #, simple
         * instruments might start with 1.
         */
        n_channels;
        n_channels_min;
        n_channels_max;
        channels[n_channels_min];
}

Eventport {
        label;
        name;
        /* anything else? */
}


ChannelTemplate {
        label;
        name;

        /* could be split to per-channel and per-voice */
        n_controls;
        controls[];

        n_eventports;
        eventports[];

        n_inports;
        n_outports;
}

Channel {
        template
        ...
}

Does this sound like what you're talking about?
> Number of Bays hardcoded or not?

Assuming that we're using different words to get the same idea, no.  A Mixer
would start with 0 Channels and (for example) 4 ChannelTemplates
(MONO_STRIP, STEREO_STRIP, MONO_BUS, STEREO_BUS) .  The host
would somehow direct the plugin to add a new MONO_STRIP for each incoming
connection and a STEREO_BUS for output.  Just as ideas..

You can now have different controls, different numbers of audio in/outs, and
different event ports per Template.  And you can instantiate as many
instances of each template as needed via plug->new_channel(template_num).

This model suggests that there are a number of Channels that are de-facto
for the plugin.  That could easily be changed to a per-Template min/max
which the host is expected to instantiate.

> Well, why would you ever want to *change* the number of Bays of a 
> plugin? Well, consider a plugin that wraps other plugins... If 

This is VERY important in my worldview.  Assuming the work being done on a
VST hack on wine, a VST wrapper plugin or a LADSPA wrapper plugin makes all
those bits of code available.  The VST stuff may be useless in RT, but if I
am composing in the studio (bedroom :) they can sure bring new sounds to the
table.

Reply via email to