[linux-audio-dev] [ANN] dssi-vst 0.3

Steve Harris S.W.Harris at ecs.soton.ac.uk
Sat Nov 6 08:08:02 UTC 2004


On Sat, Nov 06, 2004 at 08:55:18 +0100, Jens M Andreasen wrote:
> >  5.3.  Audio class
> >  The remaining functions belong to the audio class:
> >
> >     -- run()
> >     -- run_adding()
> >     ...
> >     ...
> 
> I understand from the naming what these callbacks will do, but I guess
> that run() takes parameters, no? Possibly a pointer to a struct that the
> synth itself supplied, right? I have a hard time though, guessing where
> the note on/off and external controllers come in to play

run_synth*() are the ones that supports MIDI, they take a snd_seq_event_t *
parameter which are ALSA seq structs timestamped against the current
audio buffer.

The interface is explained in dssi.h, around line 223:

    /**
     * run_synth()
     *
     * This member is a function pointer that runs a synth for a
     * block.  This is identical in function to the LADSPA run()
     * function, except that it also supplies events to the synth.
     *
     * A plugin may provide this function, run_multiple_synths() (see
     * below), both, or neither (if it is not in fact a synth).  A
     * plugin that does not provide this function must set this member
     * to NULL.  Authors of synth plugins are encouraged to provide
     * this function if at all possible.
     *
     * The Events pointer points to a block of EventCount ALSA
     * sequencer events, which is used to communicate MIDI and related
     * events to the synth.  Each event is timestamped relative to the
     * start of the block, (mis)using the ALSA "tick time" field as a
     * frame count. The host is responsible for ensuring that events
     * with differing timestamps are already ordered by time.
     *
     * See also the notes on activation, port connection etc in
     * ladpsa.h, in the context of the LADSPA run() function.
     *
     * Note Events
     * ~~~~~~~~~~~
     * There are two minor requirements aimed at making the plugin
     * writer's life as simple as possible:
     * 
     * 1. A host must never send events of type SND_SEQ_EVENT_NOTE.
     * Notes should always be sent as separate SND_SEQ_EVENT_NOTE_ON
     * and NOTE_OFF events.  A plugin should discard any one-point
     * NOTE events it sees.
     * 
     * 2. A host must not attempt to switch notes off by sending
     * zero-velocity NOTE_ON events.  It should always send true
     * NOTE_OFFs.  It is the host's responsibility to remap events in
     * cases where an external MIDI source has sent it zero-velocity
     * NOTE_ONs.
     *
     * Bank and Program Events
     * ~~~~~~~~~~~~~~~~~~~~~~~
     * Hosts must map MIDI Bank Select MSB and LSB (0 and 32)
     * controllers and MIDI Program Change events onto the banks and
     * programs specified by the plugin, using the DSSI select_program
     * call.  No host should ever deliver a program change or bank
     * select controller to a plugin via run_synth.
     */
    void (*run_synth)(LADSPA_Handle    Instance,
                      unsigned long    SampleCount,
                      snd_seq_event_t *Events,
                      unsigned long    EventCount);

- Steve 



More information about the Linux-audio-dev mailing list