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




Reply via email to