a few quick points:
> void (*write_to_channel)(int channel, void* buffer, long int count);
> void (*read_from_channel)(int channel, void* buffer, long int count);
IMHO, these are better written as:
void (*read_from_channel) (channel_id_t channel,
sample_t *buf,
guint32 nsamples,
guint32 offset);
void (*write_to_channel) (channel_id_t channel,
sample_t *buf,
guint32 nsamples,
guint32 offset,
gain_t gain);
the channel_id_t allows encoding of different types of channels (aes
supports hardware, internal bus, network).
the offset is needed to allow internal sample-accurate event
processing (since the reads/writes may be divided into several chunks
to cope with intra-block events).
the gain for writing is extremely efficient, since it avoids an extra
data copy when deliverying data with non-unity gain.
> - common transport functionality (prepare,start,top) which can
> be triggered by any of the clients, or the server
don't call this "transport" please.
you can stop the engine itself - this simply means that it doesn't
ever call the plugin chain. in aes, stopping the engine actually
closes the audio interface. i suppose that notifying plugins that we
are stopping for a while is not a terrible idea, though i haven't
found it necessary so far.
--p