Plugin IO

A plugin has a lot of options on what IO it can support. GMPI talks about segmentation along several axis.

A plugin can have multiple Modules (also called slots) that each have their independent set of parameters and their own input and output channels.

Input and output channels can be of different types: channels that move audio samples (interleaved/non-interleaved/replace-in-place), midi events, parameter change events and possibly others. These channels are managed in groups we call Buses (also called bundles). Connections are made on a bus level - not on individual channel level. The host may support allowing to recompose these buses. (There is a problem here because it seems the plugin first determines the composition of a bus. Allowing the host to recompose can make thing more complex for the plugin. Either Buses must be a host thing it uses to manage multiple connection in a logical manner - or it is a plugin thing where the plugin determines the composition).

Q: Do buses only contain audio channels or is it just a collection of channels and can it include Midi channels or other control channels?

Both the number of channels/buses and its parameters can be dynamic (change at runtime).

Assembly ->* Plugin ->* Module ->* (I/O) Bus ->* Channel

Parameters can exist at each level of this hierarchy (also assembly?).
Additional grouping options exist for parameters. See also Plugin Parameters

// plugin root interface
public interface IPlugin
{
    ICollection<IPluginModule> Modules { get; }
}

public interface IPluginModule
{
    ICollection<IAudioBus> Buses { get; }
}

public  interface IAudioBus
{
    ICollection<IChannel> Channels { get; }
}

Last edited Oct 6, 2013 at 8:45 AM by obiwanjacobi, version 4