I fear we've all been very busy.  I know I have.  I have not had time to
devote to XAP, though I have certainly not lost interest.

So today I start looking at my evolving spec doc again.  The biggest chunk
of undecidedness lies in the area of Channels.  We never really resolved the
Bays/Channels etc debate.  We just put it off.  Here it is.

I'd like to propose the following - it is simple and flexible.  Not too
confusing.

Plugins define 'Modules'.  Every plugin has a master Module, and 0-n extra
Modules.  The host can instantiate Modules as needed.  A Module is analogous
to a MIDI Channel in a synth (maybe Module is the wrong word).  It is
analogous to a slot in a mixer.

struct XAP_descriptor {
        ...

        /* master module descriptor */
        XAP_module master;

        /* other channel descriptors */
        int n_modules;
        XAP_module *modules;

        /*
         * Instantiate a module, return a plugin-unique
         * id/index for it - it's 'Channel'.
         */
        int (*add_module)(void *plugin, int module);

        /*
         * Remove a module.
         */
        int (*del_module)(void *plugin, int index);
};

struct XAP_module {
        char *label;
        char *name;
        uint32_t flags;

        /* how many instances of this module are allowed? */
        int count_max;

        /* per-module controls and I/O */
        int n_controls;
        XAP_control **controls;
        int n_ports;
        XAP_port **ports;
};

Reply via email to